我有一个 MySQL 8.0.15,我正在试验地理空间定位功能。我已将 SRID 4326 应用于“loc”列。
除了原始 Point() 之外,文档中没有任何内容建议输入为“x,y”或“long,lat”,但如果我运行以下查询:
INSERT INTO organization
(loc, spots, name, phone, website, account_id, category_id)
VALUES
(
ST_PointFromText("POINT(-113.532000 54.733000)", 4326),
10,
"Baptiste",
" ",
null,
null,
null
);
SQL 错误 (3617):纬度 -113.532000 超出函数 st_pointfromtext 的范围。[必须在 -90 > +90 以内]
这很有意义,因为没有 113 度的纬度 - 但是当我交换纬度/经度参数时 - 一切正常!但是,当我查询纬度/经度时,结果是向后的。
SELECT
*,
ST_Y(loc) as lat,
ST_X(loc) as lng
FROM
organization;
我对这些功能和坐标的工作方式有什么不明白的地方?
似乎 POINT() 实际上在输入时接受LAT、LON - 但是在查询时必须记住 Y 是纬度,而 X 是经度???
TIA
那是因为 MySQL 和 Microsoft 在地理表示中交换顺序是绝对疯狂的事情,因为这就是 EPSG 所说的。Oracle 和 PostGIS 没有。MySQL 地理表示中没有 X/Y。使用 MySQL v8时,他们试图解决这个问题,同时通过引入
ST_Longitude()
ST_Latitude()
有关更多信息,请查看MySQL 是否将点数据类型存储为 LAT LNG 或 LNG LAT?