Что такое lat lon в координатах
Перейти к содержимому

Что такое lat lon в координатах

  • автор:

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

Когда речь идет о паре географических координат, геопространственное ПО все еще не может определиться в одном: в каком порядке указывать долготу и широту. Координаты часто представлены в виде массивов [-87.73, 41.83], а не объектов < long: -87.73, lat: 41.83 >. Это оставляет разработчику право определить, что такое «-87.73» — долгота или широта. Одна пара координат приведет вас в Чикаго, а другая — в Антарктиду.

В работе приходится использовать комбинации библиотек и ПО, и многие из них требуют разный порядок координат: lon/lat или lat/lon. Не существует единого установленного для всех порядка, что приводит к путанице и ошибкам.

Том МакРайт, разработчик с интересным блогом, собрал весь свой опыт в таблицу с источниками и показал, в каких программах, форматах и библиотеках используется порядок широта/долгота, а где — долгота/широта.

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

А как в других форматах: 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 приводит к необычным результатам. Так что, чтобы избежать проблем, всегда проверяйте, какой порядок координат ждет от вас программа.

  • lat lon — Tom MacWright;
  • longitude-latitude is the right way — Tom MacWright;
  • Lat Lon or Lon Lat? — Chris Henrick, Feb 7, 2021.

Что ты должен знать про географические координаты

  • Широта, Latitude, lat — идет с севера (North, N) на юг (South, S).
  • Долгота, Longitude, lng — идет с запада (West, W) на восток (East, E).
  • Практически всегда координаты идут в порядке “широта, долгота” — Lat, Lng. В Google Maps, в Яндекс-Картах, в Википедии. Это стоит зазубрить: в географии сначала идет Y, потом X.
  • И широта, и долгота измеряются в градусах. Градус можно понимать как геометрический градус, то есть 1/360 земной окружности. Иногда их записывают в виде дробного числа, с которым все понятно; иногда — в “часовом” виде: 12°34’56» — 12 градусов, 34 минуты, 56 секунд. Такая запись легко переводится в дробь: deg + min/60.0 + sec/3600.0
  • Долгота изменяется от -180 до +180; ноль — Основной меридиан, проходящий через Гринвич, минусовые значения — западное полушарие, плюсовые — восточное.
  • Широта изменяется от -90 до +90. Ноль — экватор, минусовые значения — южное полушарие, плюсовые — северное.
  • Длина одного градуса долготы непостоянна, поскольку долгота откладывается по окружности, параллельной экватору, и длина этой окружности уменьшается с увеличением (по модулю) широты. Считай длину градуса долготы по формуле

def lng_2_km(lat)  EARTH_RADIUS*(Math::PI/180)*cos(lat*Math::PI/180) # EARTH_RADIUS = 6371 end 
def nearest(lat, lng, radius)  lat2km = LAT_DEGREE_KM # 111  lng2km = lng_2_km(lat)  # lat2km*dlat = lng2km*dlng = lateral_distance_km  # 2*lateral_distance_km^2 = radius^2  # lateral_distance_km = radius / sqrt(2)  dlat = radius / (lat2km * Math.sqrt(2))  dlng = radius / (lng2km * Math.sqrt(2))   where(:lat => (lat-dlat)..(lat+dlat), :lng => (lng-dlng)..(lng+dlng)) end 

Документация

Системы координат представляют положение на Земле с помощью координат. Функции Mapping Toolbox™ преобразовывают координаты между Сосредоточенным землей зафиксированным землей (ECEF), геодезическим, «восточный север» (ENU), северо-восток вниз (NED), и системами области значений вертикального изменения азимута (AER).

Глобальные системы, такие как ECEF и геодезические системы описывают положение объекта с помощью триплета координат. Локальные системы, такие как ENU, НЕД и системы AER требуют двух триплетов координат: один триплет описывает местоположение источника, и другой триплет описывает местоположение объекта относительно источника.

Когда вы работаете с 3-D системами координат, необходимо задать модель эллипсоида, которая аппроксимирует форму Земли. Для получения дополнительной информации о моделях эллипсоида, смотрите Опорные сфероиды. Все демонстрационные координаты на этой странице используют Мировую Геодезическую Систему 1 984 (WGS84).

Сосредоточенные землей зафиксированные землей координаты

Система Сосредоточенного землей зафиксированного землей (ECEF) использует Декартовы координаты ( X , Y , Z ), чтобы представлять положение относительно центра опорного эллипсоида. Расстояние между центром эллипсоида и центром Земли зависит от опорного эллипсоида.

  • Положительная Ось X пересекает поверхность эллипсоида в широте на 0 ° и долготе на 0 °, где экватор соответствует нулевому меридиану.
  • Положительная Ось Y пересекает поверхность эллипсоида в широте на 0 ° и долготе на 90 °.
  • Положительная ось Z пересекает поверхность эллипсоида в широте на 90 ° и долготе на 0 °, Северном полюсе.

Например, координаты ECEF Parc des Buttes-Chaumont (4 198 945 м, 174 747 м, 4 781 887 м).

Геодезические координаты

Геодезическая система использует координаты ( lat , lon , h ), чтобы представлять положение относительно опорного эллипсоида.

  • lat , широта, происходит на экватор. А именно, широта точки является углом, который нормальное к эллипсоиду в той точке делает с экваториальной плоскостью, которая содержит центр и экватор эллипсоида. Угол широты — в области значений [-90 °, 90 °]. Положительные широты соответствуют северным и отрицательным широтам, соответствуют югу.

Например, геодезические координаты Parc des Buttes-Chaumont (48,8800 °, 2,3831 °, 124,5089 м).

Координаты «восточный север»

Система «восточного севера» (ENU) использует Декартовы координаты ( xEast , yNorth , zUp ), чтобы представлять положение относительно локального источника. Локальный источник описан геодезическими координатами ( lat0 , lon0 , h0 ). Обратите внимание на то, что источник не обязательно лежит на поверхности эллипсоида.

  • Положительная xEast-ось указывает восток вдоль параллели, содержащей lat0 .
  • Положительная yNorth-ось указывает север вдоль меридиана долготы, содержащей lon0 .
  • Положительная zUp-ось указывает вверх по нормали к эллипсоиду.

Например, Монмартр имеет геодезические координаты (48,8862 °, 2,3343 °, 174,5217 м). Координаты ENU Parc des Buttes-Chaumont относительно Монмартра (3 579,4232 м,-688.3514 м,-51.0524 м).

Северо-восточные вниз координаты

Северо-восток вниз (NED) система использует Декартовы координаты ( xСевер , yВосток , zВниз ), чтобы представлять положение относительно локального источника. Локальный источник описан геодезическими координатами ( lat0 , lon0 , h0 ). Как правило, локальный источник системы NED выше поверхности Земли.

  • Положительная ось xСевера указывает север вдоль меридиана долготы, содержащей lon0 .
  • Положительная ось yВостока указывает восток вдоль параллели, содержащей lat0 .
  • Положительная ось zВниз указывает вниз по нормали к эллипсоиду.

Система координат NED обычно используется, чтобы задать местоположение относительно движущегося самолета. В этом приложении источник и оси системы NED изменяются постоянно. Обратите внимание на то, что координаты не фиксируются к системе координат самолета.

Например, самолет, летящий в аэропорт имени Шарля де Голля, имеет геодезические координаты (48,9978 °, 2,7594 °, 699,8683 м). Координаты NED аэропорта относительно плоскости (1 645,8313 м,-15677.1868 м, 555,8221 м).

Координаты области значений вертикального изменения азимута

Система области значений вертикального изменения азимута (AER) использует сферические координаты ( азимут , элевация , область значений ), чтобы представлять положение относительно локального источника. Локальный источник описан геодезическими координатами ( lat0 , lon0 , h0 ). Азимут, вертикальное изменение и наклонная область значений зависят от локальной Декартовой системы, например, системы ENU.

  • азимут , азимут, по часовой стрелке угол в плоскости xEast-yNorth от положительной yNorth-оси до проекции объекта в плоскость.
  • элевация , вертикальное изменение, является углом от плоскости xEast-yNorth до объекта.
  • расположитесь , наклонная область значений, Евклидово расстояние между объектом и локальным источником.

Например, датчик лидара в аэропорту имени Шарля де Голля имеет геодезические координаты (48,0124 °, 2,5451 °, 163,4885 м). Координаты AER самолета относительно датчика (95,8314 °, 1,8781 °, 15 773,1381 м).

Советы

Если вы преобразовываете координаты между ENU, НЕДОМ и системами AER с тем же источником, то вы не должны задавать опорный эллипсоид или координаты источника.

Смотрите также

Похожие темы

Ссылки

[1] Guowei, C., Б.М. Чех и Т. Х. Ли. Беспилотные системы винтокрыла . Лондон: Springer-Verlag London Limited: 2011.

[2] Серп фургона, J. Основные координаты GIS . Бока-Ратон, FL: CRC нажимает LLC, 2004.

Пересчет координат из Lat/Long в проекцию Меркатора и обратно

Описаны формул пересчета широты/долготы в плоские координаты по проекции Меркатора на сфере по версии Google Maps и на эллипсойде WGS84.

Картографический веб-сервис Google Maps для отображения карт использует проекцию Меркатора на сфере. Для начала рассмотрим более общий случай проекции Меркатора для эллипсоида WGS84, а потом будет не сложно перейти к сфере.

Содержание

  1. Пересчет координат из широты/долготы в проекцию Меркатора
  2. Проверка результатов
  3. Пересчет координат из проекции Меркатора в широту/долготу
  4. Реализации пересчетов

Описание проекции Меркатора более подробно можно посмотреть в следующих источниках:

  1. POSC Specifications
  2. Wikipedia
  3. Google Maps Projection and Coordinate system

Пересчет с помощью библиотеки PROJ.4:

В процессе пересчета понадобятся также следующие параметры:

  • Ложный сдвиг на восток False Eastings = 0
  • Ложный сдвиг на север False Northings = 0
  • Масштабный коэффициент Scale Factor = 1
  • Большая полуось эллипсоида WGS84: a = 6378137.0 м
  • Малая полуось эллипсоида WGS84: b = 6356752.3142 м
  • Сфера используемая в Arcview GIS: a=b=6370997

Будем использовать для примера координаты г. Москва: 55.751667 с.ш., 37.617778 в.д.

Пересчет координат из широты/долготы в проекцию Меркатора

  • lon/lat — долгота/широта в радианах;
  • e — эксцентриситет эллипса;
    • где: f — коэффициент уплощения Земли
    • или выразив эксцентриситет через полуоси:
    Lat=55.751667 Long=37.617778 rLat=Lat*pi/180 rLong=Long*pi/180 a=6378137 b=6356752.3142 f=(a-b)/a e=sqrt(2*f-f^2) X=a*rLong Y=a*log(tan(pi/4+rLat/2)*((1-e*sin(rLat))/(1+e*sin(rLat)))^(e/2)) X [1] 4187592 Y [1] 7473789

    Пересчет в Proj.4:

    proj +proj=merc +ellps=WGS84 37.617778 55.751667 4187591.89 7473789.46

    Для пересчета на сферу:

    proj +proj=merc +ellps=sphere 37.617778 55.751667 4182904.10 7500731.48

    Скачать пример пересчета координат из Lat/Long в Mercator на сфере и эллипсоиде WGS84 (Excel).

    Проверка результатов

    lat = 55.751667, long = 37.617778

    Arcview GIS Proj Excel
    WGS84 7473789.46 4187592.00 7473789.46 4187591.89 7473789.462 4187591.892
    Сфера 7500731.48 4182904.10 4182904.10 7500731.48 7500731.483 4182904.096

    Пересчет координат из проекции Мекартора в широту/долготу

    Широта вычисляется методом приближения в цикле:

    Расчитаем для примера координаты нашего проверочного пункта в географической системе координат WGS 84, используя как исходные координаты из предыдущего примера:

    Y=7473789 X=4187592 a=6378137 b=6356752.314 f=(a-b)/a e=sqrt(2*f-f^2) eh=e/2 pih=pi/2 ts=exp(-Y/a) phi=pih-2*atan(ts) i=0 dphi=1 while () < con=e*sin(phi) dphi=pih-2*atan(ts*((1-con)/(1+con))^e))-phi phi=phi+dphi >rLong=X/a rLat=phi Long=rLong*180/pi Lat=rLat*180/pi

    Реализации пересчетов

    Реализация пересчета на языке C++ (Источник: Proj.4, PJ_merc.c). Реализации на языках Java, Python, C# и др. для направления DD->Mercator доступны в Вики Openstreetmap.

    private static const PI_2:Number = Math.PI * 0.5; private static const MAX_LAT:Number = 89.5; private static const R_MAJOR:Number = 6378137.0; private static const R_MINOR:Number = 6356752.3142; private static const ECCENT:Number = Math.sqrt(1 - Math.pow(R_MINOR / R_MAJOR, 2)); private static const ECCNTH:Number = ECCENT * 0.5; public static function merc_x(longitude:Number):Number < return longitude * DEG_RAD * R_MAJOR; >public static function unmerc_x(longitude:Number):Number < return longitude * RAD_DEG / R_MAJOR; >public static function merc_y(latitude:Number):Number < if (latitude >MAX_LAT) latitude = MAX_LAT; if (latitude < -MAX_LAT) latitude = -MAX_LAT; var phi:Number = latitude * DEG_RAD; var con:Number = ECCENT * Math.sin(phi); con = Math.pow( (1.0 - con) / (1.0 + con), ECCNTH ); return -R_MAJOR * Math.log( Math.tan(0.5 * (PI_2 - phi)) / con ); >public static function unmerc_y(y:Number):Number < var ts:Number = Math.exp(-y / R_MAJOR); var phi:Number = PI_2 - 2.0 * Math.atan(ts); var i:uint = 0; var dPhi:Number = 1; while( (dPhi >= 0 ? dPhi : -dPhi) > 0.000000001 && i++ < 15 ) < var con:Number = ECCENT * Math.sin(phi); dPhi = PI_2 - 2.0 * Math.atan (ts * Math.pow((1.0 - con) / (1.0 + con), ECCNTH)) - phi; phi += dPhi; >return phi * RAD_DEG; >

    Ссылки по теме

    • Ссылка на дополнительный источник информации внутренняя
    • Ссылка на дополнительный источник информации внешняя

    Последнее обновление: September 09 2021

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *