J'ai parcouru l '«API» de fonctions PostGIS et je constate que la plupart d'entre elles nécessitent deux éléments pour se comparer. Par exemple, la fonction ST_Distance prend deux éléments de géométrie / géographie pour trouver la distance.
Il n'y a pas de fonction pour faire quelque chose comme: "Étant donné une géométrie G, donnez-moi la géométrie la plus proche GClosest dans le tableau T où G.id <> GClosest.id"
Je me rends compte que je pourrais écrire une fonction PL / PgSQL pour itérer sur la table et appeler ST_Distance sur chaque élément, mais j'espère qu'il y a une meilleure solution, plus efficace.
postgis
postgresql
Jmoney38
la source
la source
Réponses:
Vous pouvez également répondre à votre question par une seule requête (quoique complexe) comme la suivante, qui renvoie l'ensemble de l'enregistrement et la distance par rapport à la géométrie de référence. Veuillez noter que si plusieurs enregistrements correspondent à la distance minimale, ils sont tous retournés.
J'ai testé cette requête sur une table d'adresses et ça marche. Dans la requête ci-dessus, je recherche le point le plus proche de celui avec id = 3.
la source
George MacKerron a écrit une simple fonction de voisin le plus proche que j'ai trouvée très utile. Cette fonction renvoie l'ID du voisin le plus proche d'une entité donnée:
Exemple d'utilisation:
... sélectionne le nœud le plus proche dans la table nw_node pour chaque entrée de my_point_table.
Il existe également une fonction plus générique sur le site SIG de Boston .
la source