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?

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.


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


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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.