Přeskočit obsah

09.1 PROJ

Knihovna PROJ (dříve označovaná jako PROJ.4) zajišťuje převod souřadnic mezi jednotlivými souřadnicovými systémy. Jde o jednu ze základních knihoven využívaných v mnoha open source GIS projektech jako GRASS, QGIS, PostGIS a dalších.

Knihovna je napsána v C++, existují ale rozhraní do dalších programovacích jazyků jako je Javascript, PHP nebo Python.

Konzolové nástroje

Knihovna PROJ nabízí řadu konzolových nástrojů, viz dokumentace.

  • proj - převod souřadnic mezi jednotlivými souřadnicovými systémy
    echo 15 50 0 | proj +proj=utm +zone=32 +ellps=WGS84
    
    echo 15 50 0 | proj EPSG:32632
    
    echo 15 50 0 | proj EPSG:5514
    

Tip

Příkaz echo zde používáme k simulaci čtení ze souboru. Měli-li bychom soubor /tmp/test.txt, který by obsahoval řetězec 15 50 0 0, první příkaz by vypadal následovně: proj +proj=utm +zone=32 +ellps=WGS84 /tmp/test.txt.

  • invproj - opačný převod souřadnic

    echo 929865.50 5555901.55 | invproj EPSG:32632
    

  • projinfo - dotazování se na souřadnicové systémy

    projinfo EPSG:32632 -o proj
    

  • cs2cs - převod souřadnic mezi jednotlivými souřadnicovými systémy

    echo 929865.50 5555901.55 | cs2cs EPSG:32632 EPSG:5514
    

Note

Vysvětlení rozdílných výsledků:

  • proj použije moderní EPSG operaci (WGS84 → S-JTSK → Krovak)
    • viz projinfo EPSG:5514 -o PROJ --spatial-test intersects
  • proj + cs2cs interně:
    • (1) WGS84 → UTM
    • (2) UTM → WGS84
    • (3) WGS84 → S-JTSK (není jednoznačné)
    • viz projinfo -s EPSG:32632 -t EPSG:5514 -o PROJ --spatial-test intersects

Úkol

Porovnejte výsledek předchozího příkazu s EPSG:5514 code 5239:

# projinfo EPSG:5514 -o proj
echo 929865.50 5555901.55 | cs2cs EPSG:32632 +to +proj=krovak +lat_0=49.5 +lon_0=24.8333333333333 +alpha=30.2881397527778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=572.213,85.334,461.94,-4.9732,-1.529,-5.2484,3.5378 +units=m +no_defs +type=crs
  • cct - převod 4D souřadnic
    • zkratka cct znamená Coordinate Conversion and Transformation
    • třetí souřadnice - výška m n.m.
    • čtvrtá souřadnice - rok měření (např. tektonické pohyby)
    • příklad pro ETRS89 (European Terrestrial Reference System) ↔ ITRF (International Terrestrial Reference Frame)
echo "15 50 250 2020" | cct +proj=pipeline +step +proj=cart +ellps=GRS80 +step +proj=helmert +dx=0.025 +dy=0 +dz=0  +t_epoch=2000.0 +convention=position_vector +step +inv +proj=cart +ellps=GRS80

Úkol

Vyzkoušej různé epochy. Porovnej rozdíl mezi roky 2000 a 2020 (posun Eurasie ~ 2.5 cm/rok v ose X).

  • geod - první geodetická úloha

    # Kladno, 50d, 1km
    # -> lat,log,azimut
    echo 50.1473350N 14.1028503E 50 1000 | geod +ellps=bessel +units=m
    

  • invgeod - první geodetická úloha (inverzní)

    # Kladno, Mladá Boleslav
    # -> azimut, azimut zpět, vzdálenost
    echo 50.1473350N 14.1028503E 50.4113514N 14.9031836E | invgeod +ellps=bessel +units=m
    

  • gie - testovací nástroje knihovny

  • projsync - umožňuje stahovat a aktualizovat podpůrná data (výpočetní gridy)

Python API

Ukázka transformace zeměpisných souřadnic (EPSG:4326) do S-JTSK (EPSG:5514):

from pyproj import CRS
crs_from = CRS.from_epsg(4326)
crs_to = CRS.from_epsg(5514)

from pyproj import Transformer
transformer = Transformer.from_crs(crs_from, crs_to)
transformer.transform(50, 15)

Úkol

Porovnej výsledek s příkazem cs2cs.