6 votos

Unir varias tablas espaciales por distancia

Estoy tratando de unir dos tablas, una que contiene los nombres de las carreteras y la otra sólo un punto. Después de agotar la investigación ahora estoy atascado.

La idea es unir las dos tablas utilizando sólo la distancia, es decir, seleccionar todos los nombres de las carreteras, que es de menos de 500 meteres de un código postal

Mi consulta actual no hace nada salvo perder el tiempo y me pregunto a donde voy mal?

SELECT "R"."name", "P"."Postcode"

FROM "planet_osm_roads" AS "R" JOIN "gb_postcodes" AS "P" 

ON st_dwithin(st_transform("P"."Geom", 900913), "R"."way" , 500)

ORDER BY "P"."Geom" <-> st_setsrid(st_makepoint(0.06703376770019531,  51.51646108300825), 900913)


LIMIT 10;

4voto

NilObject Puntos 7874

Deshacerse del índice de recorrido de operación (<->) en la cláusula ORDER BY, es causante de la base de datos para intentar ordenar primero toda la tabla en términos de distancia de la carretera antes de llegar a la cláusula que usted desea.

SELECT "R"."name", "P"."Postcode", ST_Distance("P"."Geom", "R"."way") AS dist
FROM "planet_osm_roads" AS "R" JOIN "gb_postcodes" AS "P" 
ON ST_DWithin(st_transform("P"."Geom", 900913), "R"."way" , 500)
ORDER BY dist ASC;

Por cierto, porque se están transformando en una de las cláusulas en su condición de combinación, usted puede no estar recibiendo la mejor asistencia de los índices que se podía. Las cosas funcionan mejor cuando están todos en el mismo espacio proyectado.

0voto

joxnas Puntos 111

El && operador que ha funcionado para mí. Sospecho que hay muchas maneras de lograr el mismo, pero que sin duda es muy elegante:

SELECT 
    "R"."name",
    "P".*,
    st_distance("R"."way", "P"."Geom") AS "Distance"


FROM "planet_osm_line" AS "R"

JOIN "gb_postcodes" AS "P" ON "R"."way" && "P"."Geom"


ORDER BY    "P"."Geom" <-> st_transform(st_setsrid( st_makepoint(-0.12391805648803711, 51.51400408502046),4326), 900913)


LIMIT 10

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