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?
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?
Odpowiedzi:
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.
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
Przykłady żądania SQL: jak obliczyć długość geometrii polilinii dla kilku tabel w postgis
Żądanie SQL (długość w km (/ 1000 -delete for metres)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";