Uzyskujesz długość geometrii w metrach?

13

W PostGIS ST_length()funkcja zwraca długość linii w niektórych jednostkach, ale nie w metrach.

Czy jest funkcja taka jak ST_Length()w metrach?

José Alejandro
źródło

Odpowiedzi:

11

St_Length () zwraca długość w jednostkach systemu odniesienia przestrzennego. Jeśli chcesz zdobyć liczniki, musisz przekształcić swoją funkcję w inny SRS, który używa liczników jako jednostek. Można to zrobić w locie, więc nie martw się o zapisanie kolejnego zestawu danych.

SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;

W tym przykładzie SRID 26915 to UTM Zone 15 N, NAD83.

DavidF
źródło
Lub po prostu dodaj własne pole i samodzielnie zarządzaj obliczeniami. UWAGA: musisz napisać własny wyzwalacz lub przeliczyć go na podstawie zmian długości.
Brad Nesom,
18

Wygląda na to, że od PostGIS 2.0 (może wcześniej) możesz to również zrobić ST_Length, przekształcając geometrię w geografię:

ST_Length(geom::geography)

Na przykład odległość między 50 ° N, 12 ° E i 51 ° N, 13 ° E:

SELECT ST_Length(geom) AS deg,
       ST_Length(geom::geography)/1000 AS km_1,
       ST_Length_Spheroid(geom, 'SPHEROID["WGS 84",6378137,298.257223563]')/1000 as km_2
FROM   ST_GeomFromText('LINESTRING(12 50, 13 51)' , 4326) AS geom

co daje

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384
andybega
źródło
0

Użyj następującej formuły:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Loni
źródło