Сохраняет ли MySQL типы данных как LAT LNG или LNG LAT?


9

Я привык видеть формат местоположения как широту, за которой следует долгота, но я полагаю, что при использовании библиотек MySQL хранит его POINT(LNG LAT)в обратном порядке. Моя библиотека неверна или это фактический формат? Я не могу найти эту деталь в документации MySQL.


Вы, вероятно, можете прочитать это: stackoverflow.com/questions/159255/…
codedawg82

Ответы:


14

Синтаксис конструктора

Посмотрев ссылку на пространственную функцию, вы увидите

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

Это не совсем правильно. Все реализации ГИС должны делать (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.

Вы также можете изучить блог Пола Рэмси (Captain PostGIS) на эту тему, озаглавленный «Давайте отзовемся».

Nicities

В качестве особого примечания, 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));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.