KOGIS (= Koordination, Geo-Information und Services) is, along with
eCH, the custodian of INTERLIS language/specification. KOGIS coordinates some activities in the
Swiss Bundesverwaltung related to Geoinformation (GI) and GIS
WGS84
WGS84 is the latest revision of the WGS (World Geodetic System) standard.
WGS includes
- Definitions of fundamental and derived constants of coordinate systems.
- The Earth Gravity Model (EGM)
- A description of the associated World Magnetic Model (WMM)
- A current list of local datum transformations
Definition
- The origin of the coordinate system is the Earth's center of mass (whose uncertainity is believed to be less than 2cm !)
- The WGS84 meridian of zero longitude is the IERS Reference Meridian, 102 meters or 5.3 arc seconds east of the Greenwich meridian.
- The WGS 84 datum surface is an oblate spheroid with equatorial radius a = 6'378'137 m at the equator and flattening f = 1/298.257'223'563.
Apparently, it is planned to move to IGS20 on 27 November 2022 (not sure if this move has taken place).
Discrete Global Grid Systems (DGGS)
A Discrete Global Grid System (DGGS) is a type of spatial reference system that tessellates the globe into many individual, evenly spaced, and well-aligned cells.
Such cells are used to encode location and, thus, can serve as a basis for data cube construction
Open source DGGS implementations include:
- Google S2
- Uber H3: a Hexagonal hierarchical geospatial indexing system.
- RiskAware OpenEAGGR
- rHEALPix by Landcare Research New Zealand (the original intention was to achieve equal-area cells throughout all resolutions)
- DGGRID by Southern Oregon University
S2
In
S2, a cell is a four sided polygon (quadrilateral) bounded by four geodesics.
The S2 hierarchy starts with 6 root cells.
The root cells are obtained by projecting a cube onto a sphere.
HEALPix projection
HEALPix is a projection that is based on subdivisions of a
distorted rhombic dodecahedron (a convex polyhedron with 12 congruent rhombic faces).
When subdividing a level, each tile is divided into four tiles so that at any level of subdivisions, all tiles have the same size (equal-area pixelisation).
HEALPix as an acronym or Hierarchical Equal Area isoLatitude Pixelisation (of a 2-sphere).
Sometimes, it is also written as Healpix.
Using the RING ordering scheme, HEALpix can be used to efficiently compute the Fourier decomposition in spherical harmonics of a discretized signal on the sphere (spherical harmonic transforms). Because of this property, HEALPix is widely used to map the cosmic microwave background.
Using the NESTED ordering scheme allows to efficiently find neighbouring pixels.
Alternatives for HEALPix include
Source code stuff
Some interesting stuff I found in the source code…
The enum Healpix_Ordering_Scheme
(src/cxx/Healpix_cxx/healpix_tables.h
) corresponds to the two orderings schemes of a HEALPix map: RING
and NEST
.
class pointing
(src/cxx/cxxsuport/pointing.h
) represents a direction in 3d space or a location on the unit sphere.
Two possibly important
public
members of this class are
-
theta
(The radian (colatitude) running from «north pole» to «south pole», 0 … π)
-
phi
(the longitude, 0 … 2*π)
template<typename I> class T_Healpix_Base
derives from Healpix_Tables
, but it's unclear what these classes are needed for.
T_Healpix_Base<I>::order_max
specifies the maximum order.
The value of T_Healpix_Base<int>::order_max
is 13 and 29 for T_Healpix_Base<int64>
.
src/cxx/cxxsuport/datatypes.h
defines various platform-independent data types, among which are:
-
tsize
, an unsigned integer type which should be used for array sizes (typedef std::size_t tsize
)
-
tdiff
, used for relative array indices
Interesting functions seem to be:
query_disc | Finds the indices of all pixels within an angular distance radius from a defined center |
query_polygon | Finds the indices of all pixels within a polygon with at most one koncave vertex. |
src/cxx/Healpix_cxx/hpxtest.cc
can be used to get a first impression on how HEAPix functions can be used.
Among others, the following identities are tested:
-
ring2nest(nest2ring(m))==m
-
peano2nest(nest2peano(m))==m
-
zphi2pix(pix2zphi(m))==m
-
ang2pix(pix2ang(m))==m
-
pix2zphi(zphi2pix(ptg)) approx zphi