У 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 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: як обчислити-довжину-поліліній-геометрію-для-декількох таблиць-в-postgis
SQL-запит (довжина в км (/ 1000 - вилучити за метри)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";