2013-03-06 4 views
6

У меня небольшая алгоритмическая проблема.Широта/Долгота и метры

Я разрабатываю приложение для Android. Я получаю GPS-координаты. Например: широта: 23.23907, долгота: 50.45786.

Так что я получаю точку. Я хочу вычислить данные о границах в этом пункте плюс или минус 5 метров. I.e .:

[23.23907 - 5 meters ; 23.23907 + 5 meters] 
[50.45786 - 5 meters ; 50.45786 + 5 meters] 

Как сделать расчет?

спасибо!

+2

Check это: http://stackoverflow.com/questions/639695/how-to-convert-latitude-or-longitude-to-meters – Trinimon

+0

Возможный дубликат [нахождения координаты на некотором расстоянии от источника] (http: // stackoverflow.com/questions/14398378/finding-a-coordinate-at-some-distance-from-the-source) – Joni

ответ

14

Формула haversine может быть упрощена, когда вы работаете только в направлениях север-юг и восток-запад.

Если окружность Земли равна C, точка в d километрах к югу от данной точки равна 360 * d/C градусов на юг. Точка в километрах к востоку составляет 360 * d/(C * cos (широта)) градусов на восток. Косинус в знаменателе исходит из того, что длина долготы на данной широте короче экватора.

Так что если the Earth's circumference находится 40075,04 км, чтобы переместить 5 м на север/юг вы бы добавить/вычесть 0.0000449 от широты и использовать ту же долготу. Чтобы переместиться на 5 м на запад/восток, вы должны использовать одну и ту же широту и добавить/вычесть 0.0000449/cos (широта) на долготу. Не забывайте о краевых случаях, хотя: возле полюсов вы должны зажать широту до 90 °, а около долготы 180 ° вы будете слишком добавлять или вычитать 360 °, чтобы сохранить долготу в правильном диапазоне.

С вашего номера диапазон оказывается приблизительно:

latitude: [23.23903 ; 23.23911] 
longitude: [50.45781 ; 50.45791] 

Update: Обратите внимание, что это по-прежнему предполагает, что Земля является идеальной сферой, which it's not. Например, система GPS моделирует Землю как эллипсоид, где экватор находится на высоте 6378.137 км, а полюса - на 6356.7523142 км от центра Земли. Разница составляет около 1/300 и имеет большое значение для многих приложений, но в этом случае она находится в пределах погрешности.

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

+0

Большое спасибо, это просто! – Apaachee

+0

@AntoineMathys: Правильно, я добавил к этому заметку. – Joni

4

Я хотел бы добавить очень важный комментарий (для непосвященных или для тех, кто забыл об этом):

косинус должен быть рассчитан на широте в радианах, а не в градусах.

преобразование: радиан = PI/180 * градусы


(я извиняюсь за сделав ответ, но с моей нынешней репутацией 35 я не могу опубликовать комментарий)

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