Suite

Auto-assainissement des coordonnées illégales PostGIS WGS84 (lat, lon)


Je viens de tomber sur ce qui semble être un comportement très curieux de PostGIS.

Le point XYZ-117.0, 32.0, 0dans WGS84 (SRID 4326) est légal :

items=> SELECT st_y(st_geomfromtext('POINT Z (-117.0 32.0 0)', 4326)); st_y ------ 32 (1 ligne)

Considérons maintenant le point XYZ32.0, -117.0, 0. Cela devrait être illégal sous WGS84 (SRID 4326), car les latitudes terrestres devraient être comprises entre '[-90, 90], mais PostGIS l'accepte :

items=> SELECT st_y(st_geomfromtext('POINT Z (32,0 -117,0 0)', 4326)); st_y ------ -117 (1 ligne)

PostGIS calculera même la distance entre les deux points illégaux, en donnant un avertissement mineur :

items=> SELECT st_distance_sphere( (st_geomfromtext('POINT Z (32,0 -117,0 0)', 4326)), (st_geomfromtext('POINT Z (-117,0 32,0 0)', 4326))); AVIS : Les valeurs de coordonnées ont été forcées dans la plage [-180 -90, 180 90] pour GEOGRAPHY CONTEXTE : instruction SQL "st_distance_sphere" 1 st_distance_sphere -------------------- 15938523.6399401 (1 rangée)

Cela a causé un bug très méchant avec une bibliothèque externe qui a sagement refusé d'accepter un-117.0latitude.

Puis-je empêcher PostgreSQL d'accepter des coordonnées violant WGS84 dans la base de données ?


Voir la vidéo: Geolocations Using PostGIS (Octobre 2021).