KNN_Arcpy_PostGISEn el marco del proyecto de Fin de Máster de uno de nuestros alumnos, la semana pasada nos surgió la necesidad de, partiendo de una tabla de puntos (+ de 8 Millones de puntos), encontrar los 5 puntos más cercanos a cada punto e incluir en cada punto el valor de uno o varios campos.

Pues bien, aunque se hicieron un par de intentos con Geopandas de Python y arcpy, encontramos una solución limpia y eficaz con PostGIS.

Fijaos, se hizo lo siguiente:

Se utiliza el operador de PostGIS <-> que nos devuelve la distancia 2D entre dos elementos. Y para devolver os 5 puntos más cercanos a una tabla T1 usamos la sentencia:

Como lo que buscábamos era obtener como resultado de una consulta una tabla con el  id de cada punto en un campo y la distancia en otro montamos la siguiente consulta.

La función unnest lo que hace es convertir un array en una tabla

a convertir en

 

Al final el resultado queda como sigue

 

Al final nos quedó una interesante sentencia con un rendimiento mucho mejor que las pruebas hechas con PyQGIS y con ArcPy. Aunque, justo la semana pasada cuando nos poníamos a escribir esta entrada veíamos esta herramienta dentro de ArcGis Pro con su correspondiente código para ArcPy que nos ha faltado probar. Si alguno se anima a comparar rendimiento que nos cuente. https://pro.arcgis.com/es/pro-app/tool-reference/geostatistical-analyst/neighborhood-selection.htm

 

En cualquier caso enhorabuena a Antonio por su trabajo de Fin de Master