Получение геометрии длины в метрах?

13

В PostGIS ST_length()функция возвращает длину строки в некоторых единицах, но не в метрах.

Есть ли такая функция, как ST_Length()в метрах?

Хосе Алехандро
источник

Ответы:

11

St_Length () возвращает длину в единицах своей системы пространственной привязки. Если вы хотите получить счетчики, вам нужно будет преобразовать вашу функцию в другой SRS, который использует счетчики в качестве единиц измерения. Это может быть сделано на лету, поэтому не беспокойтесь о записи другого набора данных.

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

В этом примере SRID 26915 - это UTM Zone 15 N, NAD83.

DavidF
источник
Или просто добавьте свое собственное поле и управляйте расчетом самостоятельно. ПРИМЕЧАНИЕ: вы должны написать свой собственный триггер или пересчитать его при изменении длины.
Брэд Несом
18

Похоже, что с PostGIS 2.0 (может быть, раньше) вы можете просто сделать это ST_Length, перенеся геометрию в географию:

ST_Length(geom::geography)

Например, расстояние между 50 ° с.ш., 12 ° в.д. и 51 ° в.д., 13 ° в.д .:

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

который дает

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384
andybega
источник
0

Используйте следующую формулу:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Лони
источник