Tengo una tabla en Postgres con el lat y long columnas. ¿Puedo usar el ST_Distance_Sphere
o ST_Distance_Spheroid
métodos para obtener la distancia entre un punto y todos los otros puntos en la tabla? ¿Tengo que convertir mi existentes en lat/long para el Punto de tipo de datos; si es así ¿hay algún método para hacerlo?
Respuestas
¿Demasiados anuncios?Sí, puede, y el PostGIS página de documentación para ST_Distance_Sphere y ST_Distance_Sphereoid ambos contienen buenos ejemplos. Aquí está uno con lon/lat valores conectado a la ST_Point función:
SELECT
st_distance_sphere(
st_point(-69.23, 44.61), st_point(-75.42, 43.55)
)
El resultado en este ejemplo es 508166.687378974 metros.
Para hacer el cálculo de un punto a otro en un "lon_lat" de la tabla que usted acaba de hacer lo siguiente:
SELECT
st_distance_sphere(
st_point(-69.23, 44.61), st_point(lon_lat.lon, lon_lat.lat)
)
FROM
lon_lat
En la línea con katahdin respuesta, para calcular la distancia a TODOS los otros lugares en la tabla, y asumiendo que usted tiene algún tipo de identificación en sus filas, puedes usar algo como esto:
SELECT
g1.id,
g2.id,
st_distance_sphere(
st_point(g1.lon,g1.lat),st_point(g2.lon,g2.lat)
)
FROM
lon_lat as g1,
lon_lat as g2
WHERE
g1.id != g2.id