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