Есть ли способ генерировать геозоны, используя открытую карту улиц на Android? - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу создать простое приложение карты, которое будет отправлять push-уведомления всякий раз, когда геолокация устройства входит в геозону.Я пытался найти способ отображения геозон на osmdroid.Хотя я продолжаю видеть примеры Google Map.Однако я не пользуюсь Google Maps.Нужно ли мне использовать связанные с Google реализации (GoogleApiClient и т. Д.) Или есть способ генерировать геозоны без Google?Как насчет прослушивания переходов геозоны (вход и выход из геозоны), а затем отправка push-уведомлений?

1 Ответ

2 голосов
/ 17 апреля 2019

Самое важное, что нужно понять, это то, что GeoFencing вообще не связан с картами. Google представляет его как часть своего Map API, потому что это тот же домен, и это имеет смысл с этой точки зрения.

Но технически это просто так:

  1. Просмотр местоположения устройства с использованием служб определения местоположения во времени
  2. Сравните местоположение с набором "геозон" (предположим, это просто очки + расстояние).
  3. Если местоположение попадает в геозону, сделайте что-нибудь - например, отобразить уведомление.

Osmdroid предлагает вам способ отображения графических карт в приложении и некоторые наложения на эти карты. Существуют некоторые расширения, которые позволяют вам включать другие вещи (например, текущее местоположение устройства, маршрутизацию), но в большинстве случаев это просто вещи, которые вы хотите отображать в первую очередь на карте. Если вы хотите просто геозону, вам вообще не нужно использовать Osmdroid. Если вам нужна карта в вашем приложении, вы можете использовать библиотеку Osmdroid и самостоятельно внедрять геозоны.

Относительно реализации goefencing: технически вы могли бы сделать это без Google.

1) Наблюдение за местоположением

Вы можете использовать LocationManager и requestLocationUpdates и самостоятельно наблюдать за положением устройства. Если вы ожидаете, что ваше приложение будет на переднем плане, когда произойдет геозонирование, это должно быть довольно просто. Но если вам нужно смотреть местоположение устройства, когда ваше приложение находится в фоновом режиме, это становится сложно. Google ограничивает возможности приложений для выполнения задач в фоновом режиме с каждым выпуском, и они делают это не зря - батарея.

Предлагаемый подход в таком случае (ну, на самом деле, Google предлагает этот подход для каждого случая, когда вам нужно работать с местоположением устройства), это использовать FusedLocationProvider , который является частью Google Библиотека Play Services. Это имеет некоторые последствия (оно будет работать только на устройствах с установленным Google Play Store, но также экономит батарею и ресурсы).

2) Наличие списка геозон и сравнение с ними собранных локаций

Это просто, и есть несколько способов реализации такой функциональности. Если вы ограничите свое определение «геозоны» только максимальным расстоянием от заданной точки, также легко реализовать кусок кода, который проверяет, находится ли местоположение в геозоне или нет - вы просто вычислите расстояние до центра геозону и сравнить с ее диаметром.

3) Показать уведомление

Отображение уведомлений легко на Android . Вам даже не нужны push-уведомления, они не будут иметь смысла в этом случае. Приложение знает, что оно хочет отобразить уведомление, поэтому нет никакой причины подключать какой-либо сервер в облаке, который бы отправлял уведомление на устройство.

Если вы используете реализацию от Google?

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

API является частью библиотеки сервисов Google Play - так же, как API FusedLocationProvider, о котором я упоминал ранее. Итак, если вы решили сделать свою собственную реализацию, но решили использовать FusedLocationProvider, у вас были бы все последствия использования библиотеки сервисов Google Play, но также больше кода для написания и больше возможностей для ошибок. Такой подход просто не имеет смысла.

...