Suite

Montrer une coïncidence spatiale à l'aide de QGIS / PostGIS ?


J'ai une base de données de bouches d'incendie (HYD). Les positions ne sont pas très exactes, les autres champs sont très utiles. J'ai également une base de données de bornes d'incendie (GPS) GPS. Nous déplaçons manuellement les points HYD pour les aligner sur les points GPS, puis effectuerons une jointure sur des entités spatialement égales.

Étant manuel, cela devient fastidieux, et il peut être utile si une indication visuelle montre que vous avez effectivement accroché avec succès le HYD au point GPS. (disons que le point HYD passe du rouge au jaune, par exemple, ou change de taille/forme, etc.)

J'ai abordé cela sous différents angles, mais je n'arrive pas à trouver un bon moyen avec PostGIS ou QGIS pour réaliser ce changement visuel.

Aider? Notez également que nous faisons cela avec environ 40 types d'entités, et certains impliqueront des lignes touchant des points. Concept assez similaire, cependant.


Pour identifier visuellement des points au même emplacement, vous pouvez envisager de rendre votre couche avec Déplacement de point.

Cette capture d'écran montre un ensemble de codes postaux au Royaume-Uni. Normalement, le style de calque de points ne donne aucune indication lorsque deux ou plusieurs points se trouvent au même endroit. Avec ce style activé, cependant, vous pouvez voir les emplacements où il y a plus d'une entité ponctuelle.

Ici, un seul point apparaît sous la forme d'un point bleu. Plusieurs points au même emplacement sont représentés par un point rouge à l'emplacement correct et des points bleus répartis en anneaux concentriques. Vous pouvez bien sûr styliser cela à votre guise - ce n'est qu'un exemple rapide utilisant les valeurs par défaut.

Vous pouvez expérimenter avec les paramètres pour définir la tolérance d'accrochage (à quelle distance deux points doivent être fusionnés). Cela peut être fait en unités de carte, en mm ou en pixels.

Dans votre cas, vous n'aurez probablement que deux points correspondants, vous vous retrouverez donc avec deux points bleus « en orbite » autour d'un point rouge lorsque vous les aurez alignés au même endroit… comme ceux du haut. à droite de la capture d'écran.


Il peut y avoir une approche beaucoup plus simple si vous venez d'une direction différente. Au lieu de déplacer manuellement les points, joignez les attributs. Une jointure spatiale est d'une utilité limitée car vos points ne coïncident pas (c'est pourquoi vous les déplacez manuellement).

Je suppose que vos bouches d'incendie GPS n'ont pas d'identifiant compatible avec les données d'origine car, si elles le font, vous auriez déjà fait une jointure de table standard et ne poseriez pas cette question. La question est donc de savoir comment fabriquer un identifiant qui vous permettra d'effectuer la jointure (et ainsi de transférer tous les attributs aux points GPS) ?

  1. Assurez-vous que tous vos points GPS ont un identifiant unique, de même que vos bornes d'incendie
  2. Utilisez l'outil Distance Matrix pour trouver le voisin le plus proche entre les deux couches (Vecteur->Outils d'analyse->Matrice de distance). Je vous recommande de limiter le nombre de points les plus proches peut-être à 1 dans un premier temps (Utiliser uniquement les points cibles (k) les plus proches)
  3. L'étape 2 vous donnera un tableau à partir duquel vous pourrez sélectionner la bouche d'incendie la plus proche. Joignez la table de sortie à vos points GPS. Vous avez maintenant un identifiant de référence de la bouche d'incendie la plus proche dans vos données de points GPS. Utilisez-le pour joindre les attributs de la borne d'incendie à vos points GPS.
  4. Vérifiez que la jointure est correcte par un contrôle visuel (étiquetage des données à l'écran) et en contrôlant un échantillon de points. Il peut arriver que la bouche d'incendie la plus proche d'un point GPS ne soit pas la bonne. Vous seul le saurez, mais vous pouvez modifier la table de jointure pour corriger toute anomalie et la rejoindre.

Il existe peut-être d'autres moyens d'atteindre votre objectif. L'un d'eux pourrait utiliser ST_SnapToGrid. Notez que cela entraînerait un décalage des données, probablement pas ce que vous voulez.

Ma façon préférée de résoudre ce genre de tâche est la suivante :

// sélectionnez des identifiants de bouches d'incendie distincts avec leur géométrie équivalente à partir de snap_layer s ON (ST_DWithin(h.wkb_geometry, s.wkb_geometry, 150)) -- ordre par distance (voir les opérateurs spatiaux, principalement <#>, st_distance peut également être pratique, mais pas très efficace) ORDER BY id, h.wkb_geometry <-> s.wkb_geometry;

Est-ce d'une quelconque aide ?


Si je vous comprends bien, vous modifiez manuellement les emplacements de ces bouches d'incendie, en utilisant la capture. Si c'est le cas, une jointure spatiale trouvera des points spatialement coïncidents, puisque leurs ensembles de coordonnées seront une correspondance exacte ; de même avec les lignes, puisque les coordonnées du point doivent se situer parfaitement le long de la ligne - encore une fois, après avoir utilisé l'accrochage.

Ainsi, vous pouvez effectuer une jointure spatiale lorsque vous avez terminé un lot de modifications, entre les points modifiés et "GPS". Les points ajustés manuellement qui coïncident avec ceux "GPS" auront des attributs de jointure que les autres n'auront pas. Vous pouvez utiliser ces attributs pour les différencier et les symboliser différemment.

Ce qui précède peut également être effectué en utilisant un rayon de recherche spécifié lorsque vous effectuez la jointure spatiale, si, pour une raison quelconque, une coïncidence exacte ne se produit pas dans vos données.

Les étapes suivantes permettent d'effectuer des jointures spatiales à l'aide de l'interface graphique : http://www.qgistutorials.com/en/docs/performing_spatial_joins.html


Voir la vidéo: Qgis Tutorial 307: Create non spatial data in Postgis from qgis (Octobre 2021).