¿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?

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.


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


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;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.