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

Я обратный инжиниринг приложение визуализации транспорта. Мне нужно узнать широту для источника их данных. В частности, что такое 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. Я пытаюсь экстраполировать на основе их менее текущего, но более информативного (включая lat, lon) потока данных, что 0,0, поэтому я могу просто преобразовать их (более текущие) координаты XY потока данных в широту и долготу.

6 ответов


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

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

можно использовать CORPSCON (или другие программы ГИС; ExpertGPS сделает это, если у вас есть пакет опций ГИС, но это не бесплатно. Забываю ли gpsbabel выступает делает преобразование) для преобразования между lat / long и любой из систем координат плоскости состояния. Вам также нужно знать, какой datum координаты в. 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 градусов), или .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 может быть "сплющенной" проекцией в отличие от lat/long, которые применяются к сферической проекции? Так будьте точны, вам может понадобиться более продвинутая математика или библиотека с открытым исходным кодом:)

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

рассчитать расстояние между двумя точками широты и долготы? (Haversine formula)


существует множество различных систем координат. Вам нужно выяснить, что такое системы координат как для lat/lon (например, WGS84 и т. д.), так и для x/y (например, какая-то проецируемая система, вероятно).

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


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

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

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

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

Edit:

интересную дискуссию о лицензировании Геотранс можно найти здесь:

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


Я использовал Бренор Brophey это класс PHP gPoint сделать это пару раз. Твердые результаты, код GPL, и легко развернуть. Рекомендуемый.