Surface Normals#
Many mapping operations in weitsicht return surface normals as part of
MappingResultSuccess (field normals).
Normals are returned as:
a numpy array of shape
(N, 3),unit vectors in the same CRS as
coordinates,nanfor entries wheremaskisFalse.
They are primarily used to refine perspective-image GSD estimation (see Perspective Image).
How normals are estimated (by mapper)#
The meaning of normals depends on the mapper backend:
Mapper |
Normal estimation |
|---|---|
|
Constant upward normal |
|
Currently returns the local “up” direction of the mapper CRS (i.e. |
|
Same as above: currently returns the local “up” direction of the mapper CRS. |
|
Uses the hit triangle’s face normal (from |
CRS notes#
Normals are direction vectors and cannot be transformed by many CRS operations directly. When a CRS transform is
required, weitsicht approximates vector transformation by:
transforming a start point
pand an end pointp + v_unit * 10, andre-normalizing the transformed difference vector.
This works best in cartesian-like CRSs with linear units (meters), such as projected CRSs or ECEF. For geographic CRSs (lon/lat degrees) the concept of “unit vectors” and angles becomes ambiguous; treat normals and any derived quantities (like incidence-angle corrections) with care.
Note
Raster-based mappers currently approximate normals as a purely vertical “up” vector. In many geographic 3D CRSs
(lon/lat/height, e.g. WGS84 3D / EPSG:4979), the height axis is a linear unit (typically meters), so transforming
a purely vertical vector is often stable even though the horizontal axes are in degrees.
This only addresses the vector transform itself; it does not make angle- or distance-based interpretations in a geographic CRS physically meaningful. For measurements (GSD, areas, incidence angles), prefer a projected metric CRS.