Spatial

Mysql 8 ST_GeomFromText 在函式 st_geomfromtext 中給出錯誤緯度超出範圍。它必須在−90.000000,90.000000−90.000000,90.000000-90.000000, 90.00000…

  • July 3, 2019

我正在mysql 8上嘗試以下插入查詢。

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

它在 mysql 5.7 上完美執行,但在 mysql 8 中我得到了這個error Latitude 102.189331 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].

根據一些建議,我也這樣做了。

ALTER TABLE fence MODIFY fenceGeometry geometry NOT NULL SRID 4326;

但它給了我同樣的結果。

那是因為在 MySQL 8 上,他們做了不可思議的事情並實現了做地理座標的愚蠢方法(如 MySQL)。這破壞了向後兼容性。

  • 當您在 MySQL 上使用 Geometry(任何 SRID)時,除了 4326 之外,您使用 (long,lat)。那是笛卡爾系統上的 (x,y)。
  • 當您在 MySQL (SRID = 4326) 上使用 Geography 時,您使用 (lat, long)。這通常是(y,x)。這樣做是因為說英語的人傾向於說*“緯度和經度”而不是“經度,緯度”*

有趣的是,擁有 MySQL 的 Oracle 並沒有在 Oracle Spatial 上這樣做。Oracle Spatial 和 PostGIS 是一致的 (long,lat)`。要解決此切換的順序,而不是

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

但是這個,

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

在 MySQL 5.x 中沒有真正的地理座標系。

邊注

如果您有可以使用的積分,則不應為此使用 WKT Point(),並且ST_SRID(pt,SRID)

ST_SRID(Point(3.880696482497261, 102.1893310546875), 4326)

更多資訊

有關更多資訊,另請參閱,

引用自:https://dba.stackexchange.com/questions/242001