7 votos

Cómo obtener la distancia entre un punto y todos los otros puntos en una tabla?

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?

7voto

Martin Duys Puntos 121

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

4voto

sashkello Puntos 325

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

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