Spatial
Mysql 8 ST_GeomFromText 在函式 st_geomfromtext 中給出錯誤緯度超出範圍。它必須在−90.000000,90.000000−90.000000,90.000000-90.000000, 90.00000…
我正在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)
更多資訊
有關更多資訊,另請參閱,