Определите, на какую сборку указывает ваше устройство Android

#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, чтобы выяснить, на какое из ближайших зданий вы указываете.