Статьи

Широта/долгота или долгота/широта?

Другое
Время прочтения: 2 минуты
Когда речь идет о паре географических координат, геопространственное ПО все еще не может определиться в одном: в каком порядке указывать долготу и широту. Координаты часто представлены в виде массивов [-87.73, 41.83], а не объектов { long: -87.73, lat: 41.83 }. Это оставляет разработчику право определить, что такое "-87.73" — долгота или широта. Одна пара координат приведет вас в Чикаго, а другая — в Антарктиду.
В работе приходится использовать комбинации библиотек и ПО, и многие из них требуют разный порядок координат: lon/lat или lat/lon. Не существует единого установленного для всех порядка, что приводит к путанице и ошибкам.
Том МакРайт, разработчик с интересным блогом, собрал весь свой опыт в таблицу с источниками и показал, в каких программах, форматах и библиотеках используется порядок широта/долгота, а где — долгота/широта.

Долгота, широта

Форматы
  • GeoJSON*
  • KML*
  • шейп-файл*
  • WKT*
  • WKB*
  • geobuf*

javascript API
  • OpenLayers*
  • d3*
  • ArcGIS API для JavaScript*
  • Mapbox GL JS*

Мобильные API
  • Tangram ES

Спецификации сервисов
  • WFS 1.0.0*
  • WMS 1.1.1*

Другое
  • Проект OSRM*
  • Сервис Redis*

Широта, долгота

Форматы
  • GeoRSS
  • Encoded Polylines (Google)*
  • iCalendar*

javascript API
  • Leaflet*
  • Google Maps API*

Мобильные API
  • Google Maps iOS/Android
  • Apple MapKit

Спецификации сервисов
  • WFS 1.1.0 & 2.0.0*
  • WMS 1.3.0*

А как в других форматах: GPX, OSM XML и GML?

Форматы, которые представляют широту и долготу отдельными атрибутами XML, не определяют порядок координат, потому что атрибуты XML не упорядочены. GML позволяет диктовать порядок системе данных, и некоторые данные могут иметь порядок lat/lon, а другие — lon/lat.

Какой вариант правильный?

На этот вопрос нет четкого ответа, оттого и путаница. География отдает предпочтение lat/lon, а математика и IT предпочитают lon/lat. В математике упорядоченная пара x, y более привычна, чем y, x, а если добавить к координатам высоту, то lat/lon приведет к еще более непривычному виду y, x, z.
Почему в географии принято ставить широту на первое место?
Есть несколько теорий, но очень вероятно, что широта оказалась на первом месте, потому что географы смогли определить ее гораздо раньше, чем долготу.

А что говорят стандарты?

По ISO 6709, международному стандарту отображения координат, широта стоит первой. Но этот стандарт диктует только вид их записи и не относится к механизмам хранения, программному обеспечению или форматам.
Сам Том МакРайт при этом считает, что долгота должна стоять первой. Форматы данных менять сложнее и дольше, чем программное обеспечение, и многие геоформаты уже поставили долготу на первое место. Порядок долгота/широта принят еще в древнем формате WKT, в стандартном шейп-файле, в удобном GeoJSON, а также в KML. Относительно известные форматы, которые ставят широту на первое место, — это GeoRSS Simple и алгоритм Google Encoded Polyline. GeoRSS Simple встречается редко: чаще используют GeoRSS GML, а в GML нет установленного порядка координат.
Многое ПО с открытым исходным кодом сейчас использует порядок долгота/широта. Известное исключение — Leaflet, и разработчик Крис Хенрик показал на примере, как разный порядок координат библиотек Leaflet и Turf.js приводит к необычным результатам. Так что, чтобы избежать проблем, всегда проверяйте, какой порядок координат ждет от вас программа.
Источники:
Автор: Юлия Федорова