2012-10-10 57 views
5

Tengo una tabla en PostgreSQL/PostGIS llamada 'viaje' con dos columnas de geometría: 'source_geom' ('POINT') y 'destination_geom' ('POINT') que indica inicio y finalizando la ubicación de un viaje.PostGIS: Encontrar puntos dentro de cierto radio desde otros puntos

Tengo una tabla más llamada 'business' con la columna de geometría 'office_geom' ('POINT') que indica la ubicación de las oficinas.

Mi objetivo es seleccionar los registros de la tabla 'viaje' cuyo destino está dentro de 1000 metros de cualquiera de la ubicación de la oficina.

¿Qué consulta debo iniciar para obtener los resultados que necesito?

Respuesta

2

Se puede hacer mediante subconsulta o combinaciones. Ejemplo de uso de subconsulta:

SELECT * FROM business 
WHERE EXISTS(
    SELECT 1 FROM trip 
    WHERE ST_Distance_Sphere(trip.destination_geom, business.office_geom) < 1000 
) 

Pero esta consulta no utilizará los índices y puede tardar mucho tiempo en grandes conjuntos de datos. Si necesita este, puede crear geography columnas de geometry, crear índices espaciales en columnas de geografía, y utilizar ST_DWithin:

select * 
    from business b 
    join trip t on ST_DWithin(trip.destination_geogr, business.office_geogr, 1000) 
Cuestiones relacionadas