2013-08-13 2 views
0

Я разрабатываю мобильное приложение, которое вычисляет расстояние по GPS. Я использую следующую функцию haversine для вычисления расстояния.Вычислить расстояние с помощью GPS: как рассмотреть различия в точности

var R = 6371; // Radius of the earth in km 
     var dLat = deg2rad(lat2-lat1); // deg2rad below 
     var dLon = deg2rad(lon2-lon1); 
     var a = 
     Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
     var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
     var d = R * c; // Distance in km 

Я забочусь о том, как обращаться с различными значениями точности местоположения.

т. Е. Сначала я получаю местоположение с точностью 30 м, а затем получаю местоположение с точностью до 150 м.

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

Я надеюсь на совет от экспертов.

+0

Расчет dLat и dLon неверен как точка, возможно, на экваторе и на северный полюс. например, когда дельта такая же, но на расстоянии северного полюса 0, но в экваторе большая. Найти поиск беспорядка x, y, z точек и рассчитать угол дуги и только после вычисления расстояния. Резюме: проблема не в точности. –

+0

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

+0

@ Толя, вы имеете в виду антиподал? Вышеупомянутая формула haversine работает в основном, но есть исключения – AlexWien

ответ

2

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

Но главное не формула расстояния.
Вам нужно отфильтровать позиции GPS, вы не должны просто рассчитать расстояние от одного места до следующего.

В противном случае, особенно при движении на низкой скорости, вы суммируете линию зигзага неуправляемой траектории GPS.

+0

, что совершенно верно, и в основном распространенный используется фильтр Калмана. Доступны десятки реализаций для большинства языков. Это быстрый и эффективный способ фильтрации gps-треков. Если вы хотите пойти еще более точным способом, вы должны связать свой трек с фактической картографией в соответствии с маршрутом, тогда вы получите еще лучшую точность, удалив «срезанные» углы и т. Д. – evilruff

+0

@evilruff да и нет: если вы связываетесь с картографией, тогда расстояния неправильны в углах, автомобиль ездит короче, чем уличное пересечение на 90 °, которое моделируется в cartzography как угол 90 °, но реальный автомобиль управляет изогнутым короче угла 90 °. И все ухудшается, если вы едете по дороге, а не по карте, но рядом .... – AlexWien

+0

Я согласен, вот что я написал, это не так просто, как было задано. Я разрабатывал системы ECS/ECDIS в течение 5 лет .. люди просто часто не видят фоны на своих проблемах, надеясь, что где-то есть волшебная формула, что не так. Это зависит прежде всего от задачи ... потому что, например, если мы говорим о VTS FleetManagement, вы могли бы имеют довольно большие расстояния между образцами GPS (говоря, что мы говорим о грузовиках, ведущих тысячи миль) .., а затем вы также должны применять такие вещи, как «мертвый расчет», чтобы сделать оценки на фактическом расстоянии. – evilruff

1

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

В случае GPS это проекция WGS84. если вам нужно быстрое и эффективное решение, посмотрите на библиотеку Proj4, которая включает в себя все это внутри себя и имеет привязки практически ко всем.

Лучший способ перейти - это преобразовать ваши координаты в метры (но тогда вы должны учитывать зону), а затем произвести расчет с использованием прямоугольных координат. вы можете посмотреть в here. Он предлагает несколько способов его решения.

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

10001.965729km = 90 degrees 
1km = 90/10001.965729 degrees = 0.0089982311916 degrees 
10km = 0.089982311915998 degrees 
+0

любое объяснение около -1? – evilruff

+0

Ты не понял его вопроса. И ваш ответ ему не помогает. Расположение GPS - это WGS84, вам не нужен proj4, чтобы преобразовать его задачу. – AlexWien

+0

В WGS84 все еще есть зоны, которые следует учитывать, если вы хотите сделать правильное прямоугольное преобразование. Конечно, вы можете полагаться на определенные предположения, такие как определенное расстояние в одну градус, но это очень приблизительное. И у вас будут разные результаты в зависимости от того, где на планете вы измеряете. – evilruff

Смежные вопросы