Obtendo comprimento da geometria em metros?

13

No PostGIS, a ST_length()função retorna o comprimento de uma cadeia de linhas em algumas unidades, mas não em metros.

Existe uma função como ST_Length()mas em metros?

José Alejandro
fonte

Respostas:

11

St_Length () retorna o comprimento nas unidades do seu Sistema de referência espacial. Se você deseja obter medidores, precisará transformar seu recurso em um SRS diferente que use medidores como unidades. Isso pode ser feito imediatamente, portanto, não se preocupe em escrever outro conjunto de dados.

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

Neste exemplo, SRID 26915 é UTM Zone 15 N, NAD83.

DavidF
fonte
Ou simplesmente adicione seu próprio campo e gerencie você mesmo o cálculo. OBSERVAÇÃO: você deve escrever seu próprio gatilho ou recalculá-lo com base em alterações em seus comprimentos.
Brad Nesom
18

Parece que, desde o PostGIS 2.0 (talvez antes), você também pode fazer isso ST_Lengthreformulando a geometria para a geografia:

ST_Length(geom::geography)

Por exemplo, a distância entre 50 ° N, 12 ° E e 51 ° N, 13 ° E:

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

que dá

       deg       |       km_1       |       km_2       
-----------------+------------------+------------------
 1.4142135623731 | 131.935962780384 | 131.935962780384
andybega
fonte
0

Use a seguinte fórmula:

select ST_Length(ST_Transform(ST_GeomFromEWKT('SRID=4326;'||st_astext(the_geom)),26986)) as geolength from my_table;
Loni
fonte