Comment effectuer une jointure spatiale de couches de points et de polygones dans PostGIS?

13

J'ai un ensemble de données ponctuelles représentant les ménages que je souhaite associer à une couche parcellaire (c'est-à-dire affecter son parcel_id). Avec ArcMap, je pouvais joindre spatialement les polygones aux points et spécifier que la jointure avait un certain rayon de recherche et utiliser le polygone le plus proche.

Je souhaite effectuer cela avec des postgres et je me demandais quelle était la façon la plus prudente de le faire. Je ne peux pas utiliser ST_contains car les points tombent dans les rues et non sur les parcelles réelles. Au lieu de ST_contains, existe-t-il une autre fonction permettant des contrôles de proximité?

update households h set parcel_id = p.parcel_id 
from parcels p where ST_contains(p.the_geom, h.xy);
ako
la source

Réponses:

8

Pour ce que vous voulez accomplir, je pense que ST_DWithin fonctionnerait. Dans la documentation du site PostGIS:

ST_DWithin - Retourne vrai si les géométries sont à la distance spécifiée les unes des autres. Pour les unités de géométrie sont dans celles de référence spatiale et pour les unités de géographie sont en mètres et la mesure est définie par défaut sur use_spheroid = true (mesure autour de sphéroïde), pour une vérification plus rapide, utilisez_spheroid = false pour mesurer le long de la sphère.

RK
la source
Cela pourrait probablement fonctionner, mais l'astuce consiste à définir un seuil de recherche approprié. Réglez-le trop haut et j'obtiens plus d'un match, réglez-le trop bas et je n'en reçois aucun. Ou placez-le haut et jetez les records de match supplémentaires.
ako