Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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 wink

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

vincentp
Participant actif
Lieu: Drôme
Date d'inscription: 18 Jul 2006
Messages: 128
Site web

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

 

Pied de page des forums

Powered by FluxBB