PostGIS - Ako vypočítať dĺžku linestringu z WGS84 po transformácii z OSGB 36

We are searching data for your request:
Upon completion, a link will appear to access the found materials.
Po transformácii údajov z EPSG: 27700 - OSGB 1936 / British National Grid na EPSG: 4326 / WGS 84 mám problémy s získavaním dĺžok z viacriadkových reťazcov.
Robím túto konverziu na importovanie tvarového súboru ciest do databázy PostGIS, ktorá štandardne používa WGS84. Keď sa však pokúsim vypočítať dĺžky, mám zvláštne hodnoty.
Najprv som premýšľal o nesprávnej transformácii, ale po vykonaní ďalších testov v prázdnej databáze, ktoré importujú vrstvu bez jej transformácie (referencia OSGB 1936), som stále zmätený:
Nasledujúci dopyt vráti protichodné výsledky
SELECT ST_Length (geom) AS length_OSGB, ST_Length_Spheroid (ST_Transform (geom, 4326), 'SPHEROID ["WGS 84", 6378137,298.257223563]') As length_WGS84 FROM osgb36_data WHERE id = 108
to dáva 338 metrov pre dĺžku OSGB36 a 482 metrov pre dĺžku WGS84. Pravá má 338 metrov.
Import som do databázy urobil pomocou QGIS a DBmanager.
Tiež som musel uhádnuť počiatočné projekcie, pretože .prj chýbal, ale premietanie výsledku cez google maps vedie k dokonalej zhode.
Akýkoľvek náznak je vítaný
ÚPRAVA:
Toto je WKT pre prvok v príklade, ako je navrhnuté:
SRID = 27700; MULTILINESTRING ((423216,279 574665,249 0, 423206,315 574708,077 44,649, 423158,458 574896,911 242,525, 423132,406 574993,061 344))
To je čudné, zdá sa, že používali súradnicu z na zaregistrovanie akumulovanej vzdialenosti pre každý bod v riadku reťazca ... To by mohlo vysvetliť problém so zlými vzdialenosťami
Funkcie dĺžky pracujú inak s geometriami linestringu 3D:
ST_Length
- vráti 2D vzdialenosti pregeometria
typy a zvláštne 3D vzdialenosti pregeografia
typy (ale nie v tejto otázke)ST_Length_Spheroid
- vráti 3D vzdialenosti pregeometria
typy
Váš príklad je v 3D, takže bude počítať 3D dĺžku sST_Length_Spheroid
a 2D dĺžka sST_Length
na ageometria
.
Ak však vždy požadujete 2D dĺžky, môžete geometriu vynútiť tak, že vytvoríte 2D riadok s linkami pomocou jedného z nich ST_Force2D
aleboST_Force_2D
funkcia (zmena názvu v PostGIS 2.1).
SELECT ST_Length (geom) AS length_27700, ST_Length_Spheroid (ST_Transform (ST_Force2d (geom), 4326), spheroid) AS length_spheroid_2d, ST_Length_Spheroid (ST_Transform (geom, 4326), spheroid) AS length_spheroid_3d FROM (SELECT0032 SR = 32; 27 574665.249 0, 423206.315 574708.077 44.649, 423158.458 574896.911 242.525, 423132.406 574993.061 344)) ':: geometry AS geom,' SPHEROID ["WGS 84", 6378137,298.257223563] '; spheroid) dĺžka_27700 | length_spheroid_2d | length_spheroid_3d ----------------- + -------------------- + ---------- ---------- 338.39264086563 | 338.515774984236 | 482,622196178051
Postgis je správny.
Vaša linka je v 3D priestore a v skutočnosti má dĺžku ~ 482 metrov, dokonca aj v British National Grid.
338 metrov je tiež správnych, ale zodpovedá to pri premietaní 3D čiary v 2D priestore.
s as (select st_Geomfromewkt ('SRID = 27700; MULTILINESTRING ((423216.279 574665.249 0, 423206.315 574708.077 44,649, 423158,458 574896,911 242,525, 423132,406 574993,061 344) )_) geom) (dĺžka) geom) ()) „3D_Length“ z a; 2d_length | 3d_length ----------------- + ----------------- 338.39264086563 | 482.54086040695 (1 riadok)
Manuálne odkazy:
ST_Length
ST_3DLength
Upraviť:
Súvisiace:
http://revenant.ca/www/postgis/workshop/measurement.html