dem_skyline — GEOCAM skyline op

• Datenarten: depth → table

• Aufruf: import fullseye as fs; fs.ledger.dem_skyline(dem, cell_size, observer_rc, eye_height=1.5, az_step_deg=1.0, max_distance=None, earth_curvature=True) (die Implementierung direkt: import geocam; geocam.dem_skyline(dem, cell_size, observer_rc, eye_height=1.5, az_step_deg=1.0, max_distance=None, earth_curvature=True); aus dem Register: opsgeocam.get("dem_skyline"))

Verwendung

Rundum-Skyline, gesehen von 1 Punkt des DEM (Horizontelevation je Azimut) → table.

dem_horizon_angle ist "alle Zellen × 1 Azimut", dies ist "1 Punkt × alle Azimute" -- um die Ausrichtung einer festen Kamera zu bestimmen, braucht man Letzteres. In jedem Azimut wird die Sichtlinie in Schritten von cell_size / 2 vorgeschoben (Höhe per bilinearer Interpolation), und das Maximum von atan((z_j − z_0 − drop(d)) / d) wird der Höhenwinkel dieses Azimuts. drop(d) = d² / (2 R_eff) ist, wie stark ferne Berge durch Erdkrümmung und atmosphärische Refraktion (effektiver Radius R / (1 − 0.13)) absinken. Verlässt die Sichtlinie das DEM, stoppt sie dort (sie stoppt auch bei max_distance). Außerhalb des DEM wird angenommen, dass "die Ebene auf der niedrigsten Höhe des DEM bis zum Horizont weiterläuft", und die Untergrenze des Höhenwinkels wird auf die Kimmtiefe −sqrt(2 h / R_eff) gesetzt (h = Höhe des Beobachters über der niedrigsten Höhe) -- damit nicht, weil man am Rand eines endlichen DEM zufällig einen tiefen Punkt sieht, ein "Loch" wie −7°, das in Wirklichkeit wegen der Erdkrümmung unsichtbar ist, zu Himmel wird (zurückgegeben in horizon_dip_deg).

Args:

dem: (H, W) Höhe [m]. Zeile 0 ist der Nordrand.

cell_size: [m/Zelle].

observer_rc: Beobachtungspunkt (row, col). float erlaubt (innerhalb einer Zelle stehend).

eye_height: Kamerahöhe über dem Boden [m].

az_step_deg: Azimutschritt [Grad].

max_distance: maximale Länge der Sichtlinie [m] (None = bis zum Rand des DEM).

earth_curvature: False bedeutet eine flache Erde.

Returns:

table: azimuth_deg (M,) / elevation_deg (M,) / distance_m (M,) (Entfernung zu dem Punkt,

der den Höhenwinkel bestimmt hat) / observer_elevation_m / horizon_dip_deg / n. Das Azimut ist mindestens 0 und

kleiner als 360, aufsteigend.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie geocam

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• poc_public_camera_heading — py -3.11 examples/poc_public_camera_heading.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

render_skyline_view · camera_orientation_from_skyline

Gleiche Kategorie (skyline)

skyline_extract · render_skyline_view


*Provenance: geocam.py — GEOCAM Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.