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


9

我习惯将位置格式看作是纬度,然后是经度,但是使用库,我相信我理解MySQL将其存储为POINT(LNG LAT)相反的顺序。我的图书馆有误吗,或者这是实际格式?我似乎在MySQL文档中找不到此详细信息。


Answers:


14

构造函数语法

查找空间函数参考,您将看到

Point(x, y)
Constructs a Point using its coordinates

这并不完全正确。所有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,明确定义了(长,长)排序。

一种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

0

一种检查订单的简单方法是超出范围纬度:

SELECT ST_Longitude(ST_SRID(POINT(45, 160), 4326));

给出错误3732(22S03):函数st_srid的参数包含一个纬度为160.000000的几何,该几何超出范围。它必须在[-90.000000,90.000000]之内;

请注意,顺序可能会因您使用的功能而异:

SELECT ST_Longitude(ST_SRID(POINT(45, 90), 4326));
SELECT ST_Longitude(ST_GeomFromText('POINT(45 90)', 4326));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.