在 MySQL 中使用空间 POINT 类型时的 Lon/Lat 顺序
Posted
技术标签:
【中文标题】在 MySQL 中使用空间 POINT 类型时的 Lon/Lat 顺序【英文标题】:Lon/Lat Order when using spatial POINT type with MySQL 【发布时间】:2012-06-20 09:55:57 【问题描述】:在 mysql 中设置 POINT 的正确顺序是什么?
甚至 SO 问题中的答案也有所不同: Moving lat/lon text columns into a 'point' type column
是吗
POINT(lat lon)
或
POINT(lon lat)
据我所知,它应该是第一个版本(经纬度),因为 POINT 将参数 x 和 y 用作参数,但我无法找到明确的证据。
【问题讨论】:
您可以尝试两种方法,看看哪种方法有效,不是吗?我会指望 Quassnoi 的回答。 +1 因为我搜索 MySQL 文档超过 3 分钟,但找不到相关文档。 我唯一找到的是X()
and Y()
functions 示例。
基本上都可以。当您在 MySQL 中使用 X() 和 Y() 访问它们时,我只能假设 POINT(lat lon) 是正确的顺序。但正如你所说,它没有很好的记录。
【参考方案1】:
大家可以在这里看到https://***.com/a/5757054/1393681 顺序是(经纬度)。
lon 基本上是 y 轴,lat 如果我看看我的地球仪,则 x,但是 lon 沿着 x 轴移动 和 lat's 沿 y 轴 所以我认为这就是你 使用 (lon lat)
尽管如此,如果您在应用程序中保持一致,那么世界是否在您的数据库中翻转并不重要 ;-)
【讨论】:
你会迷惑别人。lon
是 x 轴,其渐变垂直显示。 lat
是 y 轴,所以它的渐变是水平的。与每个 2D 图形一样,渐变垂直于它们测量的轴。
如果您希望使用 MySQL 5.7+ 中内置的 GIS 功能,使用 POINT(lon lat) 而不是 POINT(lat lon) 很重要【参考方案2】:
在我看来就像lat lon
。你可以从你的 mysql shell 中检查:
mysql> SELECT ST_ASTEXT(coords), ST_LONGITUDE(coords), ST_LATITUDE(coords) FROM table;
+----------------------------+-----------------------+----------------------+
| ST_ASTEXT(coords) | ST_LONGITUDE(coords) | ST_LATITUDE(coords) |
+----------------------------+-----------------------+----------------------+
| POINT(33.520571 -18.20072) | -18.20072 | 33.520571 |
+----------------------------+-----------------------+----------------------+
注意:使用了 SRID 4326。
另请参阅:https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html#function_st-latitude
【讨论】:
【参考方案3】:技术上没关系。 您正在存储到一个点的 x 和 y 坐标中。 您只需要以与编写它们相同的方式阅读它们。
如果您关心“正确的方式”,我只能指 Google Maps API 使用创建坐标的事实
var location = new google.maps.LatLng(lat, lng);
在学校里,你也会学习“纬度和登录度”,而不是相反。
不过,从技术上讲,这并不影响您存储它们的方式。只需确保在回读它们时使用相同的约定即可。
【讨论】:
在编程中,您还会发现很多系统和函数需要 lonlat 参数而不是 latlon。但是,在您的数据库中,这仍然无关紧要。以上是关于在 MySQL 中使用空间 POINT 类型时的 Lon/Lat 顺序的主要内容,如果未能解决你的问题,请参考以下文章