MySQL 是否将点数据类型存储为 LAT LNG 或 LNG LAT?

Laz*_*zlo 12 mysql spatial

我习惯于将位置格式视为纬度和经度,但是使用库,我相信我理解 MySQL 将其存储为POINT(LNG LAT),相反的顺序。是我的图书馆错了,还是这是实际格式?我似乎无法在 MySQL 文档中找到这个细节。

Eva*_*oll 15

构造函数语法

查找空间函数参考,你会看到

Point(x, y)
Constructs a Point using its coordinates
Run Code Online (Sandbox Code Playgroud)

这并不完全正确。所有 GIS 实现都必须(x,y)对投影坐标进行处理,即 (long,lat). 但是,在大地坐标系上,对于该做什么存在一些分歧。MySQL(和 SQL Server)可以,(lat,long)但 PostGIS 在(long,lat)任何地方都维护。

这触及的规范OpenGIS®执行标准地理信息-简单要素访问-第2部分:SQL选项

  • 对于具有椭球二维坐标系的大地测量 CRS,二维椭球坐标系的轴是大地纬度,正北向和大地经度,正东。轴方向应分别为“北”和“东”。
  • 对于具有三维椭球坐标系的大地测量CRS,WKT字符串中水平轴的名称和缩写应遵循(ii)中的要求。垂直轴名称应为“椭球高度”;纵轴缩写应为“h”,当包含横轴缩写时应包括在内。

请注意,上述单词是在地理信息 - 坐标参考系统的众所周知的文本表示中逐字找到的

甚至可以追溯到 1.1 规范,

空间参考系,也称为坐标系,是地理(纬度-经度)、投影 (X,Y) 或地心 (X,Y,Z) 坐标系。

也就是说,似乎 PostGIS 和 Oracle 以及许多第三方库(x,y,[z])为所有类型的点维护。这违反了 WKT 的规范,但这是一个非常普遍的约定。例如GeoJSON 也这样做,

点坐标按 x、y 顺序排列(投影坐标为东、北,地理坐标为经度和纬度)

并且,EPSG 为 SRSID 4326明确定义了 (lat,long) 排序。

一个 2D 或 3D 坐标系,其中的位置由大地纬度、大地经度和(在三维情况下)椭球高度指定,用于地理 CRS。

您也可以考虑查看Paul Ramsey(PostGIS 船长)关于这个主题的博客,标题为“让我们把事情全部结束”

城市

特别要注意的是,MySQL 带来了两个新功能,

这些功能站在一旁的ST_X(),并ST_Y()需要地理SRS或者抛出异常和错误。

贮存

文档

在内部,MySQL 以不同于 WKT 或 WKB 格式的格式存储几何值。(内部格式类似于 WKB,但有一个初始的 4 个字节来指示 SRID。)

存储在此处定义

Table 11.1 WKB Components Example

Component       Size    Value
Byte order      1 byte  01
WKB type        4 bytes 01000000
X coordinate    8 bytes 000000000000F03F
Y coordinate    8 bytes 000000000000F0BF
Run Code Online (Sandbox Code Playgroud)