He estado revisando la "API" de funciones de PostGIS, y noté que la mayoría de ellas requieren dos elementos para comparar. Por ejemplo, la función ST_Distance toma dos elementos de geometría / geografía para encontrar la distancia.
No hay ninguna función para hacer algo como: "Dada una geometría G, dame la geometría más cercana GClosest en la Tabla T donde G.id <> GClosest.id"
Me doy cuenta de que podría escribir una función PL / PgSQL para iterar sobre la tabla y llamar a ST_Distance en cada elemento, pero espero que haya una solución mejor y más eficiente.
postgis
postgresql
Jmoney38
fuente
fuente
Respuestas:
Su pregunta también puede responderse mediante una sola consulta (aunque compleja) como la siguiente, que devuelve todo el registro y la distancia a la geometría de referencia. Tenga en cuenta que si más de un registro coincide con la distancia mínima, todos se devuelven.
He probado esta consulta en la tabla de direcciones y funciona. En la consulta anterior, estoy buscando el punto más cercano a ese con id = 3.
fuente
George MacKerron ha escrito una función simple de Vecino más cercano que he encontrado bastante útil. Esta función devuelve la ID del vecino más cercano a una característica dada:
Ejemplo de uso:
... selecciona el nodo más cercano en la tabla nw_node para cada entrada en my_point_table.
También hay una función más genérica en el sitio SIG de Boston .
fuente