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?
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:
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.
Parece que, desde o PostGIS 2.0 (talvez antes), você também pode fazer isso ST_Length
reformulando 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
Exemplos de solicitação SQL: como calcular o comprimento da polilinha-geometria para várias tabelas no postgis
Solicitação SQL (comprimento em km (/ 1000 - exclusão por metros)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";