¿Cuál es la unidad utilizada en ST_Distance ()?

24

Me pregunto cuál es la unidad del flotador que se devuelve ST_Distance.

En la documentación dice:

... distancia mínima cartesiana (basada en la referencia espacial) entre dos geometrías en unidades proyectadas.

¿Cuáles son estas unidades proyectadas?

La geometría se almacena en un campo: geometry(Point,4326).

stUrb
fuente

Respuestas:

36

Creo que esta es la pregunta más frecuente en la lista PostGIS a lo largo del tiempo :-)

Si sus datos están en SRID 4326 y utiliza el geometrytipo, el resultado no tendrá ningún significado. Está en grados.

Para obtener el resultado en metros, simplemente tírelo para geographyescribir y ST_Distancecalculará la distancia a lo largo del gran círculo y regresará en metros.

geometry(Point,4326)::geography

Otra opción es proyectar sus datos a alguna proyección local basada en una unidad adecuada. Entonces la respuesta estará en esa unidad.

Nicklas Avén
fuente
2
Aquí hay un ejemplo para encontrar la distancia entre dos filas en una tabla SELECT ST_Distance (a.geom :: geography, b.geom :: geography) FROM pure_gis a, pure_gis b DONDE a.id = '1' AND b.id = '2';
Brian McCall
4

De http://postgis.net/docs/ST_Distance.html

- Ejemplo de geometría: las unidades en grados planos 4326 es WGS 84 long lat unit = grados

Si ST_Distancese le dan dos geometrías, se supone que esas geometrías están realmente en coordenadas cartesianas (o planas). Por lo tanto, las unidades son las mismas que las de las coordenadas, generalmente metros o pies.

Su problema parece ser que su sistema de referencia espacial, 4326, en realidad utiliza coordenadas geográficas (angulares) - grados de largo lat - por lo que los resultados están en grados (algo sin sentido).

Martin F
fuente
1
Los resultados no tienen ningún sentido, ni siquiera un poco.
Paul Ramsey
@PaulRamsey. ¿No serían lo mismo que obtendría "midiendo" distancias en una proyección PlateCaree?
Martin F
En una PC, recuperaría unidades lineales y al menos podría decir "OK, sé que estas unidades están sujetas a una distorsión grave". Obteniendo "grados" de regreso, la gente podría verse tentada a pensar "ajá, tengo una distancia angular aquí, solo necesito multiplicar por 2R y tendré una distancia lineal". Las unidades hacen una mala medición potencialmente aún más terriblemente engañosa. Y la PC es tan terrible que no sé por qué recibe un nombre de proyección ... no preserva la distancia, no conserva la dirección, no preserva el área ...
Paul Ramsey
PC conserva distancias a lo largo del ecuador y perpendiculares al ecuador. Además de las radiaciones requeridas y las conversiones de radio (ciertamente, un inconveniente muy importante), los resultados del uso de ST_Distance en 4326 geometrías tendrán la misma mezcla general de desventajas y beneficios que deben considerarse al usar ST_Distance con geometrías de proyección. Tal vez el mejor debate debería ser (no "algo" versus "completamente" sin sentido, pero) "¿Debería permitirse que ST_Distance y ST_Area devuelvan resultados dados 4326 geometrías?"
Martin F