在 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)

的原因

尽管如此,如果您在应用程序中保持一致,那么世界是否在您的数据库中翻转并不重要 ;-)

【讨论】:

你会迷惑别人。 lonx 轴,其渐变垂直显示。 laty 轴,所以它的渐变是水平的。与每个 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 顺序的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询point类型类型的坐标,返回经度纬度

mysql空间类型使用笔记

MySQL数据类型 - 空间数据类型

Mybatis mapper 到 Mysql Point 对象

Point类型的默认值

MapServer 之 使用 MySQL 数据