En PostGIS, la ST_length()
función devuelve la longitud de una cadena lineal en algunas unidades, pero no en metros.
¿Hay una función como ST_Length()
pero en metros?
En PostGIS, la ST_length()
función devuelve la longitud de una cadena lineal en algunas unidades, pero no en metros.
¿Hay una función como ST_Length()
pero en metros?
Respuestas:
St_Length () devuelve la longitud en las unidades de su Sistema de referencia espacial. Si desea obtener medidores, deberá transformar su función a un SRS diferente que use medidores como unidades. Esto se puede hacer sobre la marcha, así que no se preocupe por escribir otro conjunto de datos.
SELECT ST_AsText(ST_Transform(the_geom,26915)) from my_table;
En este ejemplo, SRID 26915 es UTM Zone 15 N, NAD83.
Parece que desde PostGIS 2.0 (tal vez antes) también puede hacer esto ST_Length
al cambiar la geometría a la geografía:
ST_Length(geom::geography)
Por ejemplo, la distancia entre 50 ° N, 12 ° E y 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
lo que da
deg | km_1 | km_2
-----------------+------------------+------------------
1.4142135623731 | 131.935962780384 | 131.935962780384
Ejemplos de solicitud de SQL: cómo calcular la longitud de la polilínea-geometría-para-varias-tablas-en-postgis
Solicitud de SQL (longitud en km (/ 1000 -delete para metros)):
SELECT
sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads
FROM
"D1_r";