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 01 October 2017 21:24

blesca
Juste Inscrit !
Date d'inscription: 1 Oct 2017
Messages: 4

[PostGIS] Egalité entre 2 points

Bonjour,

Je m'interroge sur la recherche d'égalité entre 2 point geometry(point,4326)

Je tente donc de comparer 2 points :

Code:

select geom from ais_iroise_way where id in (4588,4598)

result
'0101000020E6100000CAE02879754E11C0FA86AF9CAA0C4840'
'0101000020E6100000CAE02879754E11C04963B48EAA0C4840'

Je constate que les deux chaines sont différentes

Code:

select st_astext(geom) from ais_iroise_way where id in (4588,4598)

result
'POINT(-4.32662 48.0989566666667)'
'POINT(-4.32662 48.098955)'

Premier commentaire, on comprend ici que la différence se loge dans l'arrondi et la précision. Cependant je constate que la différence existe

Je test l'égalité de 3 manières
select (select geom from ais_iroise_way where id = 4588) = (select geom from ais_iroise_way where id = 4598) ==> TRUE
select (select st_astext(geom) from ais_iroise_way where id = 4588) = (select st_astext(geom) from ais_iroise_way where id = 4598) ==> FALSE
select st_equals((select geom from ais_iroise_way where id = 4588),(select geom from ais_iroise_way where id = 4598)) ==> FALSE

Le premier test qui test directement les geom (qui sont différents) me renvoie true. Une expication?
J'en conclu que je dois utiliser ST_EQUALS pour une comparaison stricte, mais j'aimerai quand même ne pas tenir compte des différences d'arrondi.

Ma question wink, vaut-il mieux calculer un arrondi ou faut-il utiliser une autre méthode?

Merci beaucoup, B.

Hors ligne

 

#2 Sun 01 October 2017 23:57

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1159

Re: [PostGIS] Egalité entre 2 points

Salut,

pour Postgis < 2.4, l'opérateur = teste l'égalité entre les bounding box des géométries,
pour Postgis >= 2.4, il vérifie que les 2 opérandes ont les mêmes sommets, dans le même ordre.

Vos deux points ont vraisemblablement la même Bbox.

A noter que st_equals ne vérifie pas l'ordre des coordonnées, ce que fait st_orderingEquals

http://blog.cleverelephant.ca/2017/09/p … ators.html

Sinon pour la question, vous pouvez soit arrondir les coordonnées "à la main",
soit utiliser un truc comme SnapToGrid : http://postgis.net/docs/manual-2.4/ST_SnapToGrid.html

Dernière modification par tumasgiu (Mon 02 October 2017 00:17)

Hors ligne

 

#3 Mon 02 October 2017 17:33

blesca
Juste Inscrit !
Date d'inscription: 1 Oct 2017
Messages: 4

Re: [PostGIS] Egalité entre 2 points

Hi,

Je vais en fait utiliser st_equals. j'ai testé avec des literaux à la douzième décimale et c'est ok.
Je vais cependant tout arrondir à la sixième décimale, ca sera largement sufisant.

Merci beaucoup

B.

Hors ligne

 

Pied de page des forums

Powered by FluxBB