geologyidea.com
Viac

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

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


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
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 pregeometriatypy a zvláštne 3D vzdialenosti pregeografiatypy (ale nie v tejto otázke)
  • ST_Length_Spheroid - vráti 3D vzdialenosti pregeometriatypy

Váš príklad je v 3D, takže bude počítať 3D dĺžku sST_Length_Spheroida 2D dĺžka sST_Lengthna 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_Force2DaleboST_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


Pozri si video: Geometry Creation and Manipulation Using PostGIS. PostGIS Baby Steps