Suite

La fonction postGIS st_equals ne fonctionne pas comme prévu

La fonction postGIS st_equals ne fonctionne pas comme prévu


J'ai une situation où je dois savoir si une géométrie importée dans une base de données postGIS 2.1 correspond à celle dessinée précédemment (c'est-à-dire que nous voulons savoir si la géométrie importée est moins à jour que celle existante).

Je pensais pouvoir utiliser st_equals pour cela, mais cela ne fonctionne pas comme prévu.

Voici le code que j'utilise pour trouver si la nouvelle géométrie existe :

SELECT id FROM "GeomArchive" WHERE ST_Equals(geom, ST_GeometryFromText(wkt,4326));

cependant, il renvoie toujours false même lorsque je passe une géométrie extraite de la table "GeomArchive".

J'ai vu cette question, mais la solution n'a pas aidé.

Je trouve que "=" fonctionne, ce qui semble rendre peu probable que le problème soit lié à l'arrondi, car je me serais également attendu à un faux résultat avec cela.

Je ne sais pas à quoi "=" se compare. Quelque chose que j'ai lu dans la documentation de pg semblait indiquer qu'il ne compare en fait que les cadres de délimitation.

Pourquoi st_equals ne fonctionne-t-il pas dans cette situation ?


Je suppose que votre problème est la précision des coordonnées.

l'utilisation de l'opérateur "=" ne compare que les cadres de délimitation et ils sont stockés en tant que float4 tandis que les coordonnées sont float8.

Lorsque vous extrayez, je suppose que vous voulez dire en utilisant ST_AsText, vous perdrez probablement un peu de précision. Traduire une valeur à virgule flottante en une représentation basée sur 10 n'est pas toujours possible.

Essayez donc d'aligner le geom sur une grille, puis comparez comme ceci :

SELECTIONNEZ l'identifiant FROM "GeomArchive" WHERE ST_Equals(st_snaptogrid(geom,0.00001), st_snaptogrid(ST_GeometryFromText(wkt,4326),0.00001));

Voir la vidéo: Spatial Relationships using PostGIS. PostGIS Baby Steps