2 votos

Uso de ST_LengthSpheroid para calcular la distancia en metros de la cadena de líneas devolviendo números enormes

Tengo un montón de LineStrings que me gustaría calcular la distancia en metros. Después de investigar un poco, utilicé lo siguiente en mi SELECT :

ST_LengthSpheroid(geometry,'SPHEROID["WGS 84",6378137,298.257223563]')::text AS length

Sin embargo, al ver los datos de este estoy recibiendo algunos números masivos para mi length campo:

enter image description here

Serían más de 55.000 km, lo que no es correcto.

¿Alguien tiene alguna idea de lo que podría estar haciendo mal aquí? Una vez más, mi objetivo es obtener la longitud de un LineString en metros.

3voto

jbalk Puntos 581

Un esferoide es la representación de una superficie curva. Un sistema de coordenadas "lat/lon" o geográficas también es una representación de una superficie curva. Cuando se utilizan estos sistemas de coordenadas, las medidas entre puntos se representan en grados a lo largo de la curva del esferoide. Para convertir esto en metros, es necesario utilizar el esferoide para calcular la longitud exacta utilizando una línea curva, en lugar de la línea recta más corta que conectaría los puntos en una superficie plana.

Un sistema de coordenadas proyectadas es un plano. Las líneas entre puntos son siempre rectas. Así que los cálculos realizados en sistemas de coordenadas proyectadas casi siempre utilizan metros.

  • Si no sabe qué sistema de coordenadas utiliza su geometría, utilice select st_srid(geom) para encontrarlo.
  • Si desea una explicación detallada del srid devuelto por st_srid, utilice select * from spatial_ref_sys where srid = 4326 pero sustituye 4326 por tu srid
  • Si el srid es 0, significa que nunca se configuró. Tendrá que averiguar cuál debe ser el srid y establecerlo utilizando alter table your_table alter column geom type geometry(linestring,4326) using st_setsrid(geom,4326)

Según su último comentario, su geometría no utiliza la proyección WGS84, por lo que está utilizando el esferoide incorrecto.

Si su geometría no utiliza un sistema de coordenadas lat/lon, debe utilizar un sistema de coordenadas proyectadas. Si es así, puede utilizar simplemente select st_length(geom) para obtener la longitud en metros.

Si su geometría utiliza, de hecho, un sistema de coordenadas lat/lon, utilice esto en su lugar:

select st_length(geometry::geography)

Esto utilizará el esferoide por defecto, y devuelve la longitud en metros.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X