Pages: 1
- Sujet précédent - QGIS: Distance de Haussdorf pour un ensemble de polygones - Sujet suivant
#1 Sun 25 August 2019 11:56
- ODJAC33
- Participant assidu
- Date d'inscription: 6 Aug 2017
- Messages: 240
QGIS: Distance de Haussdorf pour un ensemble de polygones
Bonjour à tous,
Je souhaiterais lancer un calcul de distances de Haussdorf pour 2 couches de surfaciques (une nouvelle et une ancienne) ayant un attribut Id commun.
Quelle serait la formule magique à appliquer? (Peut-être qu'il faudrait faire au préalable une jointure des 2 couches, et créer un attribut distance de Haussdorf qui calculerait cette distance pour chaque élément de la base).
Merci d'avance.
Hors ligne
#2 Mon 26 August 2019 12:23
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Distance de Haussdorf pour un ensemble de polygones
Salut,
apparemment il y a un script qui existe et qui fait exactement
ce que vous recherchez :
https://gis.stackexchange.com/questions … using-qgis
Hors ligne
#3 Mon 26 August 2019 15:15
- ODJAC33
- Participant assidu
- Date d'inscription: 6 Aug 2017
- Messages: 240
Re: QGIS: Distance de Haussdorf pour un ensemble de polygones
Merci de votre réponse,
En faite, je ne suis pas trop à l'aise avec les scripts python et du coup je me demandais s'il n'était pas possible dans la calculatrice de champ de rajouter un attribut Dist Haussdorf qui calculerait automatiquement celle-ci sur chaque paire de surfaces (issue d'une jointure entre mes 2 couches).
Car en regardant la doc sur l'opérateur hausdorff_distance, il semble qu'on ne puisse l'appliquer que sur une seule paire de surface et non sur un ensemble de paires de surface
(exemple de code pour une paire :
hausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)'),0.5))
Hors ligne
#4 Mon 26 August 2019 15:42
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Distance de Haussdorf pour un ensemble de polygones
En faite, je ne suis pas trop à l'aise avec les scripts python
C'est l'occasion de s'y mettre
Car en regardant la doc sur l'opérateur hausdorff_distance, il semble qu'on ne puisse l'appliquer que sur une seule paire de surface et non sur un ensemble de paires de surface
(exemple de code pour une paire :
hausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)'),0.5))
Dans ce cas, vous pouvez en effet joindre vos deux couches avec l'attribut id,
puis créer un champ qui calculera cette distance avec l'aide de la calculatrice.
Pour pouvoir accéder à la geometrie de la couche jointe, vous pouvez créer un champ virtuel
avec la calculatrice qui convertira la geometrie en WKT ( il y a peut être un autre moyen mais
je le connais pas).
Hors ligne
#5 Mon 26 August 2019 19:17
Re: QGIS: Distance de Haussdorf pour un ensemble de polygones
Je pense que ce serait plus simple et plus efficace de laisser ce type de traitement à PostGIS, qui dispose d'une fonction de distance de Hausdorff.
Cela permettrait d'affiner le traitement exact à réaliser, en fonction de si vous voulez comparer les polygones spatialement ou juste leurs formes géométriques. À priori c'est spatial étant donné que vous avez deux millésimes de données.
Vous pourrez ainsi utiliser les indexes spatiaux sur les données afin de ne comparer que les géométries qui le méritent, dont les bounding box s'intersectent par exemple.
Exemple de requête :
Code:
select a.id , b.id , st_HausdorffDistance(a.geom, b.geom) as dist from old_table as a join new_table as b on st_intersects(a.geom, b.geom);
Dans le cas où on a un id commun on peut directement jointurer sur cet ID :
Code:
select a.id, st_HausdorffDistance(a.geom, b.geom) as dist from old_table as a join new_table as b on a.id = b.id
Pour la doc c'est par là : https://postgis.net/docs/ST_HausdorffDistance.html
Tout cela est exécutable directement dans le DB Manager de QGIS.
Hors ligne
#6 Tue 27 August 2019 11:37
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS: Distance de Haussdorf pour un ensemble de polygones
Oui, utiliser Postgis est une bonne alternative.
Si l'une des couches à croiser n'est pas une table de la base de données,
on peut même utiliser les FDW pour acceder à d'autres sources de données
OGR compatibles.
Hors ligne
#7 Thu 29 August 2019 14:33
- ODJAC33
- Participant assidu
- Date d'inscription: 6 Aug 2017
- Messages: 240
Re: QGIS: Distance de Haussdorf pour un ensemble de polygones
Merci beaucoup de vos conseils mais pour être franc, je n'ai jamais utilisé PostGis.
Je vais essayer de m'en sortir, pour l'instant je sèche sur l'import de mes couches (message d'erreur : Erreur 9 :le fournisseur de données virtual n'a aucune méthode createEmptyLayer) et ne sais pas où positionner le code que vous proposez dans l'interface de Postgis.
La route est longue ...
Hors ligne
Pages: 1
- Sujet précédent - QGIS: Distance de Haussdorf pour un ensemble de polygones - Sujet suivant