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

Printemps des cartes 2024

#1 Sun 17 February 2013 09:57

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

POSTGIS 2.0 Tester si une géométrie existe

Bonjour,

Avant d'insérer une géométrie ((prenons un multi polygone par exemple)  dans une table existante, je voudrais savoir si cette géométrie existe déjà.

Est ce qu'un simple :

Code:

SELECT the_geom FROM schemaname.mytable WHERE ST_Equals(the_geom, geomtoadd);

Va fonctionner (0 ligne si existe pas)  ou existe il un truc plus simple, plus rapide?


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#2 Mon 18 February 2013 10:14

guil31
Participant actif
Date d'inscription: 22 Jan 2013
Messages: 79

Re: POSTGIS 2.0 Tester si une géométrie existe

Ou tout simplement:

Code:

SELECT the_geom FROM schemaname.mytable WHERE the_geom IS NULL

Hors ligne

 

#3 Mon 18 February 2013 10:31

damika
Participant occasionnel
Lieu: Bidart
Date d'inscription: 3 Aug 2010
Messages: 33

Re: POSTGIS 2.0 Tester si une géométrie existe

Bonjour,
Si le but est d'insérer une géométrie différente si elle existe déjà, on peut passer par un CASE:

Code:

SELECT CASE WHEN ST_Equals(geomtoadd, all_geom.the_geom)=FALSE THEN geomtoadd ELSE autre_geometrie END FROM
(SELECT the_geom FROM schemaname.mytable ) AS all_geom

Sinon je ne vois pas plus simple

Hors ligne

 

#4 Mon 18 February 2013 10:32

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: POSTGIS 2.0 Tester si une géométrie existe

Bonjour,

Guil31, il ne s'agit pas de savoir si la géométrie n'existe pas au sens où elle est nulle mais de savoir si la table contient déjà une géométrie équivalente.

Une sorte de INSERT INTO IF NOT EXISTS


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Mon 18 February 2013 10:49

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: POSTGIS 2.0 Tester si une géométrie existe

Bonjour,

Merci Damika c'est sympa, mais comme je gère la chose depuis le code le CASE ne m'est pas utile.
Je tente un double post sur la liste US. wink


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#6 Mon 18 February 2013 11:00

vincentp
Participant actif
Lieu: Paris
Date d'inscription: 18 Jul 2006
Messages: 127

Re: POSTGIS 2.0 Tester si une géométrie existe

Il s'agit d'un cas ressemblant très fort à un UPSERT (update si existe, insert sinon). La meilleure manière de faire cela dans les postgresql récents est celle ci :

http://stackoverflow.com/questions/1109 … 91#8702291

Par contre un petit warning : suivant votre besoin fonctionnel, il faut bien faire attention à ce qu'on appelle deux géométries égales. L'égalité est une chose un peu subjective dès qu'on sort des points.

Ce qu'il ne faut pas faire, c'est comparer des géométries avec l'opérateur = car il compare les bounding boxes et pas les géométries.

Ensuite la fonction st_equals compare les géométries elles même et est souvent la solution recherchée.
Mais elle n'est en aucun cas une comparaison stricte, et ignore le sens des vertex par exemple. Pour cela il y a une fonction st_orderingequals. On peut aussi comparer le retour de st_asbinary pour une égalité binaire parfaite.

Ça ne suffit pas toujours car définir l'égalité sur des polygones peut etre complexe, et dépendre de plusieurs critères, par exemple :
* la tolérance sur les coordonnées
* la gestion du sens de définition des enveloppes
* la présence de points additionnels dans la définition de la géométrie mais qui ne changent pas la forme

On est alors dans la recherche de similarité plutôt que d'égalité. La fonction de calcul de distance st_hausdorffdistance peut être utile à cet effet. Parfois il faut faire ses propres définitions d'égalité.

Et dans de telles requêtes, ne pas oublier d'ajouter un «AND geom1 && geom 2» à la comparaison, pour activer l'utilisation de l'index.

Dernière modification par vincentp (Mon 18 February 2013 11:01)

Hors ligne

 

#7 Mon 18 February 2013 11:22

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: POSTGIS 2.0 Tester si une géométrie existe

Bonjour,

Merci Vincentp pour cette réponse précise qui anticipe qui plus est ma seconde question qui aurait portée non plus sur une géométrie de type polygone, mais sur une couche topologique.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB