Рассчитать направление объекта с географическими координатами (широта, долгота) - PullRequest
2 голосов
/ 02 ноября 2011

У меня есть координаты игрока и другого объекта. Оба с географическими координатами (широта и долгота). У меня также есть направление, в котором игрок смотрит (компас). Как я могу рассчитать угол к другому объекту от направления игрока? например Я хочу знать, находится ли объект справа / слева от игрока и сколько градусов.

Большое спасибо!

Ответы [ 3 ]

5 голосов
/ 02 ноября 2011

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

Для коротких расстояний (<10 км) вы можете игнорировать кривизну Земли и рассматривать ее как двумерную картезианскую карту (широта / долгота как X-Y). Тогда ваш вопрос становится базовой тригонометрии. </p>

Для больших расстояний или для повышения точности вы можете приблизиться, используя сфероид модель Земли ( предположить, что Земля является идеальной сферой , которой она не является) и рассчитать Большой Круг bearing и distance.

Или вы можете смоделировать Землю как эллипсоид и рассчитать ее географическую навигацию .

Две веб-страницы, которые могут помочь: Сведения для вычисления расстояния с использованием координат широты / долготы и Расчет расстояния, пеленга и других значений между точками широты / долготы .

Примечание: atan2 и Формула Haversine часто являются полезными деталями реализации.

Небольшое добавленное примечание: bearing является синонимом heading или direction в этом контексте.

2 голосов
/ 02 ноября 2011

Вам нужна эта формула сферического трига: http://williams.best.vwh.net/avform.htm#Crs Получив курс (угол относительно истинного севера), вы можете вычесть из направления компаса направление, в котором находится игрок, чтобы получить относительное направление.

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

0 голосов
/ 03 ноября 2011

В API есть инструменты, которые могут сделать это для вас: Location.bearingTo (Location) и GeomagnSensor даст вам направление от вашей позиции к цели - что вы можете затем отрегулируйте на основе текущего курса устройства.

Если у вас уже запущен MapView, и вы ленивы, установите MyLocationOverlay , включите Compass и пропустите GeomagnSensor, и пусть MapView сделает это за вас.

...