Coordinates#

OWRT uses one numerical contract everywhere: WGS84 geographic input, a topocentric East-North-Up (ENU) frame on the WGS84 ellipsoid for the scene, heights above ground for radio devices, and explicit grid orientation for every array.

The local frame#

LocalFrame.at(longitude, latitude) builds a pyproj pipeline from geodetic coordinates to ENU metres at the given origin. The scene origin is the requested centre for scenes compiled by the loader, the CLI and the explorer. An HTTP simulation without an explicit scene_center and every dataset case use the first transmitter as the centre.

from openworld_radio_twin import LocalFrame

frame = LocalFrame.at(longitude=4.8993, latitude=52.3762)
east, north, up = frame.to_local(4.9003, 52.3770)
longitude, latitude, altitude = frame.to_geographic(east, north)
corners = frame.corners(-250, -250, 250, 250)   # WGS84 corners of the scene square

A compiled scene restores the same frame with owrt.scene_frame(scene). The provenance file records the origin, axis order, units and the ellipsoidal vertical reference of the frame separately from the terrain source datum.

Heights#

Transmitter and receiver heights are metres above the local ground (AGL). owrt.position adds the compiled terrain elevation at the horizontal position, so a transmitter requested at 25 m stands 25 m above the modelled terrain even on a hillside. With terrain disabled, the ground is the local z = 0 plane.

The local frame’s up component is ellipsoidal and relative to the geodetic origin; it is not an AGL height. scene_z_reference in the provenance names which of the two the scene uses.

Array orientation#

Array

Rows

Columns

Note

terrain/*_elevation_m.npy

south to north

west to east

Grid nodes

terrain/surface_classes.npy

south to north

west to east

Cells between nodes

Solver arrays (path_gain, rss, sinr, association)

south to north

west to east

Plot with origin="lower"

Exported PNGs, height map, voxel products

north-up

west to east

One pixel per cell

Radio arrays carry cell_centers with shape (rows, columns, 3) in ENU metres. Use the saved coordinates when aligning arrays from different products rather than stacking them by index.

Scene bounds#

The scene is the square from -radius_m to +radius_m on both horizontal axes. Terrain, surfaces, receiver cells and buildings share this boundary; the WGS84 corners are written to the provenance for GIS tools.