Как мне преобразовать координаты в широту и долготу?

StackOverflow https://stackoverflow.com/questions/609379

  •  03-07-2019
  •  | 
  •  

Вопрос

Я занимаюсь реверс-инжинирингом приложения для визуализации транспорта.Мне нужно выяснить широту происхождения их потока данных.В частности, что такое XY 0,0.Единственные формулы, которые я нашел, вычисляют расстояние между двумя точками или местоположение азимута / дистанции.

Они используют XY для отображения карты в очень устаревшем приложении.XY выражается в ФУТАХ.

У меня есть эти координаты:

47.70446615506108, -122.34469839507263: x=1268314, y=260622
47.774182540800616,-122.3412994737105:  x=1269649, y=286031
47.60024792289405, -122.32767331735774: x=1271767, y=222532
47.57012494413499, -122.29129609983679: x=1280532, y=211374

Мне нужно выяснить, каковы широта и долгота x=0, y=0 есть и какова была бы формула, чтобы выяснить это.

У них есть два канала передачи данных, один более актуальный, чем другой.Лента с самыми актуальными данными НЕ включает широту и долготу, а только XY.Я пытаюсь экстраполировать на основе их менее текущего, но более информативного (включая широту, lon) потока данных, что равно 0,0, поэтому я могу просто преобразовать координаты XY их (более текущего) канала данных в широту и долготу.

Это было полезно?

Решение

Спросите их, какую систему координат они используют! (или если вы получили набор данных из какой-либо базы данных, посмотрите на метаданные для набора данных, и он должен сказать вам. В противном случае я скептически отношусь к его значению)

Скорее всего, это одна из систем координат плоскости состояния . Они предназначены для локализованных областей Земли (например, UTM ) и часто используются для геодезия.

Вы можете использовать CORPSCON (или другие ГИС-программы; ExpertGPS сделает это, если у вас есть GIS Option Pack, но он не бесплатный. Я забыл, GPSBabel выполняет преобразование) для преобразования между широтой / долготой и любой из систем координат плоскости состояния. Вам также необходимо знать, в каких датум находятся координаты. WGS84 и NAD83 являются очень близко, но NAD27 отличается.

Другие советы

Если вы посмотрите на первые 2 строки данных и вычтите широту

47.7044 - 47.7741 = -0.06972 degrees

Существует 60 морских миль на градус широты и 6076 футов на морскую милю.

-.06972 * 60 * 6076 = 25,415 ft

Вычитание двух значений 'Y':

260662 - 286031 = 25,409 ft

Так что это действительно доказывает, что значения X и Y указаны в футах.

Если вы возьмете любое из значений Y и конвертируетесь, например, в градусы

260622 ft / ( 6076 ft/nm ) / ( 60 nm/degree ) = .71
286031 ft / 6076 / 60 = .78

Таким образом, вычитая эти значения из широт (47,70 и 47,77), вы получите очень близкие значения, равные 47 градусам, что должно быть вашей точкой y = 0.

Для долготы градус составляет 60 морских миль на экваторе и 0 миль на полюсах. Таким образом, число миль на градус должно быть умножено на косинус широты, то есть приблизительно cos (47 градусов) или 0,68. Таким образом, вместо 6076 нм на градус, это около 4145 нм.

Так что для значений X

1268314 ft / ( 4145 ft/nm ) / ( 60 nm/degree ) = 5.10 degrees
1269649 ft / 4145 / 60 = 5.10 degrees

Эти числа X увеличиваются с увеличением широты (менее отрицательной), поэтому я считаю, что вы должны добавить 5,1 градуса, что означает, что базовая точка X составляет около

-122.3 + 5.1 = 117.2 West longitude for your x=0 point.

Это примерно позиция Спокана WA.

Итак, учитывая X = 1280532, Y = 211374

Lat = 47 + ( 211374 / 6096 / 60 ) = 47.58
Lon = -117.2 - ( 1280532 / ( 6096 * cos(47.58)) / 60 ) = -122.35

Что примерно эквивалентно приведенным данным 47,57 и -122,29

Дисперсия может быть связана с разными проекциями - система X, Y может быть «сплюснутой»; проекция в отличие от широты / долготы, которые применяются к сферической проекции? Поэтому, чтобы быть точным, вам может понадобиться более сложная математика или библиотека с открытым исходным кодом:)

Этот вопрос также может быть полезен, он содержит код для расчета расстояний большого круга:

Рассчитать расстояние между двумя широтами -длинки? (Формула Haversine)

Существует много разных систем координат. Вам необходимо выяснить, что такое системы координат как для широты / долготы (например, WGS84 и т. Д.), Так и для первой оси (например, какая-то проекционная система, вероятно).

Получив эту информацию, вы можете использовать несколько инструментов для выполнения преобразований и манипуляций. Одним из примеров (бесплатной библиотеки кодирования с открытым исходным кодом) является proj4 .

У вас уже есть хорошие советы по системам координат, так что я просто воспользуюсь библиотекой, которой с большим успехом пользовался в прошлом.

Geotrans одобрен к использованию Министерством обороны США, поэтому вы можете быть уверены, что он хорошо протестирован.Вы можете взять его отсюда:

http://earth-info.nga.mil/GandG/geotrans/index.html

Возможно, это неправильная ссылка, поскольку на этой странице говорится о приложении, а не о библиотеке.Я ожидаю, что библиотека находится в пакете разработчиков.Насколько я помню, условия лицензирования были очень либеральными, но обязательно ознакомьтесь с условиями, прежде чем использовать его в коммерческих целях.

Редактировать:

Интересное обсуждение лицензирования Geotrans можно найти здесь:

http://www.mail-archive.com/debian-legal@lists.debian.org/msg39263.html

Здесь я сказал следующее:

В Java я бы использовал Конвертер OpenMap из выражения точки в UTM в выражение с использованием широты и долготы (при условии эллипсоида WGS-84, который чаще всего используется в GPS).

OpenMap является открытым исходным кодом, и я бы опубликовал ссылку на их страницу загрузки, но у них есть короткий лицензионный скрипт. Таким образом, чтобы не быть грубым, я не буду глубоко связывать. Вместо этого перейдите на их домашнюю страницу и нажмите« Загрузки ».

Это должно либо решить вашу проблему напрямую, либо, по крайней мере, указать вам на полезный алгоритм.

scroll top