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"))
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.
• Leitfaden zur Familie geocam
• 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.
• poc_public_camera_heading — py -3.11 examples/poc_public_camera_heading.py
table als Eingabe)render_skyline_view · camera_orientation_from_skyline
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.