Android — необходимо добавить более 100 геозон

Я разрабатываю приложение, в котором пользователь может установить несколько местоположений. Мне удается показывать уведомления, когда пользователь получает вход или выход из определенного региона с помощью GeoFencing.

Теперь возникла ситуация, когда мне нужно обеспечить мониторинг всех сохраненных локаций, а их может быть сотни и более. Я прочитал по указанной ссылке "У вас может быть несколько активных геозон с ограничением 100 на пользователя устройства".

Есть ли способ добавить более 100 геозон на пользователя устройства?

Спасибо!


person Naitik    schedule 16.04.2015    source источник
comment
Если в документации сказано, что можно добавить только 100 элементов, то почему есть способ добавить их еще?   -  person Murtaza Khursheed Hussain    schedule 16.04.2015
comment
Хотя вы можете уменьшить забор, не создавая заборы одного и того же места входа и выхода. Я надеюсь, вы знаете, что можете указать оба типа в геозоне для одного и того же местоположения.   -  person Murtaza Khursheed Hussain    schedule 16.04.2015
comment
Спасибо за ответ ... но в какой-то ситуации у нас есть более 100 геозон в этом движении времени, функции приложения не работают в соответствии с требованиями приложения.   -  person Naitik    schedule 16.04.2015
comment
нужно уменьшать геозону, другого пути нет. и помните, что разрешено 100 геозон не НА ПРИЛОЖЕНИЕ, а НА УСТРОЙСТВО.   -  person Murtaza Khursheed Hussain    schedule 16.04.2015
comment
возможный дубликат Отслеживание более 100 одновременных геозон с новый Android API   -  person Marian Paździoch    schedule 17.04.2015
comment
конечно, это 100 за приложение, а не за устройство!   -  person Marian Paździoch    schedule 17.04.2015


Ответы (1)


  1. Имейте ArrayList со всеми геозонами, которые вы хотите отслеживать +100.
  2. Слушайте обновления местоположения.
  3. Когда вы получаете обновление местоположения, если ArrayList всех ваших геозон превышает 100, удалите все отслеживаемые геозоны, а затем рассчитайте 100 ближайших геозон, используя формулу harvesine:

    public static final double R = 6372.8; // In kilometers
    
    public static double haversine(double lat1, double lon1, double lat2, double lon2) {
      double dLat = Math.toRadians(lat2 - lat1);
      double dLon = Math.toRadians(lon2 - lon1);
      lat1 = Math.toRadians(lat1);
      lat2 = Math.toRadians(lat2);
    
      double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
      double c = 2 * Math.asin(Math.sqrt(a));
      return R * c;
    }
    

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

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

Справочник

  1. Начните отслеживать список результатов из 100 ближайших геозон.

Это позволит вам всегда отслеживать 100 ближайших геозон в зависимости от вашего местоположения. Был в состоянии отслеживать более 100, так как он всегда меняет регионы мониторинга геозоны на 100 ближайших регионов геозоны.

person Rendy Del Rosario    schedule 17.04.2015
comment
Вместо использования Haversine вы также можете использовать встроенную функцию Location.distanceBetween(), которая использует алгоритм эллипсоида WGS84. - person skeeve; 21.03.2018
comment
Геозоны сохраняют состояние (это переходы, а не местоположения), настоятельно не рекомендуется наивно удалять все, а затем устанавливать их снова. - person GDanger; 15.03.2021