16 votos

PostGIS: Asignar ID de punto en la capa A al punto más cercano en la capa B

Este debería haber sido un precursor obvio (que no pregunté) a mi otra pregunta: ¿Cómo crear diagramas de araña (líneas de centro) en PostGIS?

Si no conozco la relación entre un punto en la capa A (tiendas) y un punto en la capa B (clientes), me gustaría decir en general "El cliente 1 es atendido por la tienda más cercana." Aunque reconozco que este hecho puede que no sea cierto, puede ser un buen sustituto.

Usando PostGIS, ¿cuál es la manera más eficiente de asignar el ID del punto más cercano en la capa A (tiendas) a cada punto en la capa B (clientes)? El resultado que estoy buscando es algo como lo siguiente.

Cliente | Tienda
    1    |   A
    2    |   A
    3    |   B
    4    |   C

3voto

aditya Puntos 111

Gracias por la contribución de todos. Finalmente elegí una combinación de las sugerencias de eprand y underdark. El código final que utilicé fue:

CREATE TABLE closest_point as
SELECT DISTINCT ON (A.GID) A.GID AS CUST_ID, 
      (SELECT B.GID FROM "STORES" as B 
       ORDER BY ST_Distance(A.the_geom, B.the_geom) limit 1) as STORE_ID, 
       A.the_geom 
FROM "CUSTOMERS" as A, "STORES" as B;

Luego creé un diagrama de Voronoi en la capa de tiendas para confirmar que los resultados funcionaban correctamente, lo cual por supuesto fue así. ¡Gracias por el gran trabajo a todos!

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