¿Obtener la longitud de la geometría en metros?

13

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?

José Alejandro
fuente

Respuestas:

11

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.

DavidF
fuente
O simplemente agregue su propio campo y administre el cálculo usted mismo. NOTA: tiene que escribir su propio disparador o volver a calcularlo en los cambios en sus longitudes.
Brad Nesom el
18

Parece que desde PostGIS 2.0 (tal vez antes) también puede hacer esto ST_Lengthal 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
andybega
fuente
0

Use la siguiente fórmula:

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