Использование датчика ориентации для указания на конкретное место - PullRequest
10 голосов
/ 30 марта 2011

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

Мне удалось получить азимут, но, учитывая местоположение, я не знаю, как перейти к вычислению нужного мне угла.Более того, мне нужно сделать преобразования с реального севера и магнитного севера.У кого-нибудь есть пример такой реализации?

Заранее спасибо.

1 Ответ

22 голосов
/ 02 апреля 2011

Я решил это.

float azimuth = // get azimuth from the orientation sensor (it's quite simple)
Location currentLoc = // get location from GPS or network
// convert radians to degrees
azimuth = Math.toDegrees(azimuth);
GeomagneticField geoField = new GeomagneticField(
             (float) currentLoc.getLatitude(),
             (float) currentLoc.getLongitude(),
             (float) currentLoc.getAltitude(),
             System.currentTimeMillis());
azimuth += geoField.getDeclination(); // converts magnetic north to true north
float bearing = currentLoc.bearingTo(target); // (it's already in degrees)
float direction = azimuth - bearing;

Если вы собираетесь нарисовать стрелку или что-то еще, чтобы указать направление, используйте canvas.rotate (-direction).Мы передаем отрицательный аргумент, потому что холст вращается против часовой стрелки.

...