Если у меня есть показания широты или долготы в стандартном формате NMEA, есть ли простой способ / формула для преобразования этих показаний в метры, которые я затем могу реализовать на Java (J9)?
Изменить: Хорошо, кажется, то, что я хочу сделать, нелегко , однако я действительно хочу сделать следующее:
Скажем, у меня есть широта и долгота точки пути и широта и долгота пользователя, есть ли простой способ сравнить их, чтобы решить, когда сообщить пользователю, что они находятся на достаточно близком расстоянии от точки пути? Я понимаю, что разумное - это предмет, но это легко выполнимо или все еще слишком математически?
math
geolocation
geo
Адам Тейлор
источник
источник
Ответы:
Вот функция javascript:
Пояснение: https://en.wikipedia.org/wiki/Haversine_formula
источник
Учитывая, что вы ищете простую формулу, это, вероятно, самый простой способ сделать это, если предположить, что Земля представляет собой сферу с окружностью 40075 км.
Длина в метрах 1 ° широты = всегда 111,32 км.
Длина в метрах 1 ° долготы = 40075 км * cos (широта) / 360
источник
Для аппроксимации коротких расстояний между двумя координатами я использовал формулы из http://en.wikipedia.org/wiki/Lat-lon :
,
В приведенном ниже коде я оставил необработанные числа, чтобы показать их отношение к формуле из Википедии.
В википедии указано, что расчетное расстояние находится в пределах 0,6 м для 100 км в продольном направлении и 1 см для 100 км по широте, но я не проверял это, поскольку почти такая точность подходит для моего использования.
источник
Широта и долгота указывают точки, а не расстояния, поэтому ваш вопрос несколько бессмысленный. Если вы спрашиваете о кратчайшем расстоянии между двумя точками (широта, долгота), прочтите эту статью в Википедии о расстояниях по дуге большого круга.
источник
Есть много инструментов, которые сделают это легко. См . Ответ Монжардена для получения более подробной информации о том, что происходит.
Однако сделать это не обязательно сложно. Похоже, вы используете Java, поэтому я бы порекомендовал изучить что-то вроде GDAL . Он предоставляет java-оболочки для их подпрограмм, и у них есть все инструменты, необходимые для преобразования из широты / долготы (географические координаты) в UTM (систему координат проекции) или другую разумную картографическую проекцию.
UTM хорош тем, что это счетчики, с которыми так легко работать. Однако вам нужно будет получить соответствующую зону UTM, чтобы она работала нормально. Есть несколько простых кодов, доступных через поиск в Google, чтобы найти подходящую зону для пары широта / долгота.
источник
Земля - это раздражающе неровная поверхность, поэтому нет простой формулы, чтобы сделать это в точности. Вы должны жить с приблизительной моделью Земли и проецировать на нее свои координаты. Обычно я использую для этого модель WGS 84 . Это то, что обычно используют устройства GPS для решения той же проблемы.
У NOAA есть программное обеспечение, которое вы можете скачать на их веб-сайте, чтобы помочь в этом .
источник
Вот на всякий случай R-версия функции bh- :
источник
Одна морская миля (1852 метра) определяется как одна угловая минута долготы на экваторе. Однако вам необходимо определить проекцию карты (см. Также UTM ), в которой вы работаете, чтобы преобразование действительно имело смысл.
источник
Есть несколько способов рассчитать это. Все они используют приближения сферической тригонометрии, где радиус равен радиусу Земли.
попробуйте http://www.movable-type.co.uk/scripts/latlong.html, чтобы узнать о некоторых методах и коде на разных языках.
источник
источник
Чтобы преобразовать широту и долготу в представление x и y, вам необходимо решить, какой тип проекции карты использовать. Мне кажется, что Эллиптический Меркатор очень хорош. Здесь вы можете найти реализацию (в том числе и на Java).
источник
Если это достаточно близко, вы можете рассматривать их как координаты на плоской плоскости. Это работает, скажем, на уровне улицы или города, если безупречная точность не требуется, и все, что вам нужно, - это приблизительное предположение о расстоянии, которое нужно сравнить с произвольным пределом.
источник
На основе среднего расстояния для падения на Земле.
1 ° = 111 км;
Преобразовав это в радианы и разделив на метры, получим магическое число для RAD в метрах: 0,000008998719243599958;
затем:
источник
Если вам нужно простое решение, используйте формулу Хаверсина, как указано в других комментариях. Если у вас есть приложение, чувствительное к точности, имейте в виду, что формула Хаверсина не гарантирует точность выше 0,5%, поскольку предполагает, что Земля представляет собой сферу. Чтобы считать, что Земля представляет собой сплюснутый сфероид, рассмотрите возможность использования формул Винсенти . Кроме того, я не уверен, какой радиус мы должны использовать с формулой Хаверсина: {Экватор: 6 378,137 км, Полярный: 6 356,752 км, Объемный: 6 371,0088 км}.
источник
it is assuming the earth is a circle
^^ Некоторые странные люди делают это в наши дни ... но то, что вы имеете в виду, скорее всегоit is assuming the earth is a sphere
;)Вам нужно преобразовать координаты в радианы, чтобы получить сферическую геометрию. После преобразования вы можете рассчитать расстояние между двумя точками. Затем расстояние можно преобразовать в любую нужную меру.
источник