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


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.