#android #orientation #android-mapview #android-sensors #azimuth
#Android #ориентация #android-mapview #android-датчики #азимут
Вопрос:
У меня есть MapView, в котором я рисую здания, используя географические точки. В настоящее время приложение определяет ближайшее к вам здание, просто проверяя ваш long / lat и сравнивая со зданиями; но что я хочу иметь возможность сделать, это навести мое устройство на здание, и появится информация об этом здании, даже если это не ближайшее к вам здание.
Я посмотрел, как это сделать, и я бы использовал азимутальное направление, полученное от прослушивателя датчика ориентации. У меня возникли проблемы с использованием этого азимутального направления и определением, перехватывает ли оно одно из зданий на карте.
Буду ли я использовать датчик ОРИЕНТАЦИИ и азимута для достижения этой цели? Как бы мне это реализовать? Любая помощь приветствуется!
Ответ №1:
Нашел решение:
Я использовал эту функцию (и вспомогательную функцию), чтобы определить направление от моего текущего местоположения до ближайших зданий вокруг меня (используя установленный радиус):
public static float calculateBearing(GeoPoint before, GeoPoint after) {
Point pBefore = location2Point(before);
Point pAfter = location2Point(after);
float res = -(float) (Math.atan2(pAfter.y - pBefore.y, pAfter.x
- pBefore.x) * 180 / Math.PI) 90.0f;
if (res < 0)
return res 360.0f;
else
return res;
}
public static Point location2Point(GeoPoint aLocation) {
return new Point((int) (aLocation.getLongitudeE6()),
(int) (aLocation.getLatitudeE6()));
}
После того, как у вас будут координаты зданий вокруг вас; затем вы должны сравнить это с направлением, на котором расположен ваш телефон, используя SensorEventListener для датчика TYPE_ORIENTATION, чтобы выяснить, на какое из ближайших зданий вы указываете.