web-dev-qa-db-fra.com

Mysql 8 st_geomfromtext donnant des erreurs latitude hors de portée dans la fonction st_geomfromtext. Il doit être dans [-90.000000, 90.000000]

J'essaie la requête d'insertion suivante sur MySQL 8.

Insert Into fence Set       
            fenceName='aa',
            radius=2,                   
            fenceGeometry=ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326)

Cela fonctionne parfaitement sur MySQL 5.7 mais ici dans MySQL 8, je reçois ceci error Latitude 102.189331 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].

Basé sur une suggestion que j'ai aussi fait cela.

ALTER TABLE fence MODIFY fenceGeometry geometry NOT NULL SRID 4326;

Mais pourtant, cela me donne les mêmes résultats.

4
newbie

C'est parce que sur MySQL 8, ils ont fait l'impensable et mis en œuvre la méthode stupide de faire des coordonnées de la géographie (comme MySQL). Cela a cassé la compatibilité à l'envers.

  • Lorsque vous utilisez la géométrie sur MySQL (n'importe quel Srid) sauf 4326 que vous utilisez (long, lat). C'est (x, y) sur un système cartésien.
  • Lorsque vous utilisez la géographie sur MySQL (Srid = 4326), vous utilisez (Lat, Long). C'est (y, x) typiquement. Ceci est fait parce que les orateurs anglais ont tendance à dire "latitude et longitude" plutôt que "longitude, latitude"

Oracle amusant qui possède MySQL ne fait pas cela sur Oracle spatial. Oracle spatial et postgis sont systématiquement (long, lat) `. Pour résoudre ce changement, la commande, pas

ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326)

Mais ça,

ST_GeomFromText('POINT(3.880696482497261 102.1893310546875)', 4326)

Dans MySQL 5.x, il n'y avait pas de véritable système de coordonnées géographiques.

Note latérale

Vous ne devriez pas utiliser WKT pour cela si vous avez les points que vous pouvez simplement utiliser Point() et ST_SRID(pt,SRID)

ST_SRID(Point(3.880696482497261, 102.1893310546875), 4326)

Plus d'information

Pour plus d'informations, voir aussi,

3
Evan Carroll