В PostGIS ST_length()
функция возвращает длину строки в некоторых единицах, но не в метрах.
Есть ли такая функция, как ST_Length()
в метрах?
В PostGIS ST_length()
функция возвращает длину строки в некоторых единицах, но не в метрах.
Есть ли такая функция, как ST_Length()
в метрах?
Ответы:
St_Length () возвращает длину в единицах своей системы пространственной привязки. Если вы хотите получить счетчики, вам нужно будет преобразовать вашу функцию в другой SRS, который использует счетчики в качестве единиц измерения. Это может быть сделано на лету, поэтому не беспокойтесь о записи другого набора данных.
SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;
В этом примере SRID 26915 - это UTM Zone 15 N, NAD83.
Похоже, что с 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
Примеры запроса SQL: как рассчитать длину полилинии, геометрию для нескольких таблиц в посте
Запрос SQL (длина в км (/ 1000 - для метров)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";