Отримання довжини геометрії в метрах?


13

У PostGIS ST_length()функція повертає довжину рядкового рядка в деяких одиницях, але не в метрах.

Чи є така функція, як ST_Length()в метрах?

Відповіді:


11

St_Length () повертає довжину в одиницях просторової системи відліку. Якщо ви хочете отримати лічильники, вам потрібно буде перетворити свою функцію в інший SRS, який використовує лічильники як одиниці. Це можна зробити на ходу, тому не турбуйтеся про виписку іншого набору даних.

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

У цьому прикладі SRID 26915 - це зона UTM 15 N, NAD83.


Або просто додайте власне поле та керуйте розрахунком самостійно. ПРИМІТКА. Вам потрібно написати власний тригер або перерахувати його на зміни вашої довжини.
— Бред Несом

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


0

Використовуйте таку формулу:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.