получить уведомление, когда пользователь приблизится к маркеру - osmdroid - PullRequest
0 голосов
/ 04 октября 2018

В настоящее время я пытаюсь создать приложение, в котором пользователь получает уведомление, когда он находится рядом с маркером, или в моем случае я использую ItemizedOverlay из Osmdroid, и мне было интересно, есть ли способ сделать это такжена несколько сотен маркеров, не разряжая батарею за несколько минут.Я видел несколько методов, но там все было только для случая, когда у вас есть только несколько маркеров.Я был бы очень рад, если бы кто-нибудь мог мне помочь.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

В дополнение к ответу @Barns, 2 замечания:

  • при использовании osmdroid у вас нет LatLng, вместо этого у вас есть GeoPoint,
  • и вы нене нужно писать свои собственные getDistanceMeters, потому что в GeoPoint уже есть этот метод:

    GeoPoint.distanceToAsDouble (окончательный вариант IGeoPoint)

0 голосов
/ 04 октября 2018

Если у маркеров есть статические местоположения, вам не нужно загружать их повторно.

Если все, что вам нужно, это рассчитать расстояние между двумя точками на земле, и у вас есть координаты по широте и долготе, тогданет необходимости в картах Google API или других библиотеках.Это просто стоит дополнительных накладных расходов и технического обслуживания.Просто создайте статический метод, подобный этому:

public static double getDistanceMeters(LatLng pt1, LatLng pt2){
    double distance = 0d;
    try{
        double theta = pt1.longitude - pt2.longitude;
        double dist = Math.sin(Math.toRadians(pt1.latitude)) * Math.sin(Math.toRadians(pt2.latitude))
                + Math.cos(Math.toRadians(pt1.latitude)) * Math.cos(Math.toRadians(pt2.latitude)) * Math.cos(Math.toRadians(theta));

        dist = Math.acos(dist);
        dist = Math.toDegrees(dist);
        distance = dist * 60 * 1853.1596;
    }
    catch (Exception ex){
        System.out.println(ex.getMessage());
    }
    return distance;
} 

Тогда вы можете сделать это:

public static boolean checkDistanceIsClose(LatLng pt1, LatLng pt2, double distance){
    boolean isInDistance = false;
    try{
        double calcDistance = getDistanceMeters(pt1, pt2)

        if(distance <= calcDistance){
            isInDistance = true;
        }
    }
    catch (Exception ex){
        System.out.println(ex.getMessage());
    }
    return isInDistance;
} 

Тот же алгоритм будет работать для любой платформы.Просто переведите его на соответствующий язык программы.

...