Использование функции геопозиционирования в мобильном приложении
«1С:Шина» поддерживает использование функции геопозиционирования для мобильных приложений. Вы можете оп ределять текущие координаты пользователя; отслеживать изменения его местоположения, скорость и направление движения; создавать геозоны и контролировать пересечение их границ.
Чтобы мобильное приложение могло получать данные о местоположении устройства, оно должно отправить пользователю запрос с просьбой предоставить соответствующие разрешения. Для корректной работы c функцией геопозиционирования в «1С:Шина» вам необходимо добавить следующие разрешения:
- получение точных данных о местоположении пользователя;
- доступ к геоданным в фоновом режиме.
Получить координаты пользователя
Для работы с геопозиционированием необходимо включить возможность Геопозиционирование в свойстве Возможности элемента проекта Мобильный Клиент.
Для начала работы с функцией геопозиционирования вызовите метод ПолучитьПоставщика
типа Геопозиционирование
. Этот метод возвращает объект типа ПоставщикГеопозиции
, который содержит основную информацию об используемом провайдере геоданных: является ли он платным, какой вид связи использует для получения данных о местоположении пользователя (сотовую сеть, интернет или спутник), поддерживает ли он определение направления, скорости движения и высоты. Рекомендуем вам выбирать провайдера, который обеспечивает минимальное энергопотребление (ПолучитьСамогоЭнергосберегающегоПоставщика
) и максимальную точность определения координат (ПолучитьСамогоТочногоПоставщика
).
Чтобы получить координаты пользователя, у объекта ПоставщикГеопозиции
вызовите один следующих методов:
ПолучитьПоследнееМестоположение
— возвращает последнее извест ное местоположение пользователя;ПолучитьТекущееМестоположение
— возвращает текущее местоположение пользователя.
Эти методы возвращают объект типа ДанныеМестоположения
, который содержит географические координаты местоположения пользователя, дату и время получения данных о местоположении, скорость и направление движения пользователя. Если пользователь не дал разрешение на доступ к геолокации или его местоположение не удалось отследить, возвращается Неопределено
.
В примере ниже показано, как получить текущие координаты пользователя.
метод ПолучитьТекущееМестоположение()
если Геопозиционирование.ПоддерживаетсяГеопозиционирование()
пер Поставщик = Геопозиционирование.ПолучитьСамогоТочногоПоставщика()
если Поставщик != Неопределено
пер Положение = Поставщик.ПолучитьТекущееМестоположение()
если Положение != Неопределено
// Создайте метод для обработки местоположения пользователя
ОбработкаМестоположения(Положение)
;
;
;
;
метод ОбработкаМестоположения(Положение: ДанныеМестоположения)
// Дата и время обновления координат
пер Дата = Положение.Дата
// Получение координат местоположения пользователя
пер Широта = Положение.Координаты.Широта
пер Долгота = Положение.Координаты.Долгота
// Обработка полученных координат
// ...
;
Отследить изменения местоположения пользователя
Для отслеживания координат в фоновом режиме необходимо включить возможность ГеопозиционированиеВФоновомРежиме в свойстве Возможности элемента проекта Мобильный Клиент.
Если вам необходимо отслеживать местоположение пользователя, используйте метод ПодключитьОбработчикИзмененияМестоположения
типа ПоставщикГеопозиции
. Передайте в него ссылку на обработчик, который должен вызываться при изменении местоположения пользователя, а также укажите время минимального периода обновления координат в секундах и минимальную дистанцию в метрах, на которую должно передвинуться устройство для срабатывания обработчика. Используйте параметр РаботаВФоне
чтобы указать, должно ли приложение отслеживать изменение координат в фоновом режиме.
Например, если вам необходимо получать данные о местоположении пользователя, скорости и направлении его движения каждые пять секунд, используйте следующий код:
метод НачатьОтслеживание()
если Геопозиционирование.ПоддерживаетсяГеопозиционирование()
пер Поставщик = Геопозиционирование.ПолучитьСамогоТочногоПоставщика()
если Поставщик != Неопределено
пер Длительность = 5с
пер Дистанция = 0
пер РаботаВФоне = Истина
если Поставщик.ПодключитьОбработчикИзмененияМестоположения(Длительность, Дистанция,
РаботаВФоне, &ОбработкаМестоположения)
Сообщить("Выполняется отслеживание изменения местоположения.")
иначе
Сообщить("Не удалось подключить обработчик изменения местоположения!")
;
;
;
;
метод ОбработкаМестоположения(Положение: ДанныеМестоположения)
// Дата и время обновления координат
пер Дата = Положение.Дата
// Получение текущих координат местоположения пользователя
пер Широта = Положение.Координаты.Широта
пер Долгота = Положение.Координаты.Долгота
// Направление движения в градусах
пер Направление = Положение.Направление
// Скорость движения (м/с)
пер Скорость = Положение.Скорость
// Обработка полученных данных
// ...
;
Задать геозоны для отслеживания перемещений пользователя
Для работы с геозонами необходимо включить возможность Геозоны в свойстве Возможности элемента проекта Мобильный Клиент.
Геозоны — это ограниченные области на географической карте, которые позволяют вам осуществлять мониторинг передвижения объектов. Вы можете отследить, вошло ли устройство в определенный географический участок или вышло из него. «1С:Шина» поддерживает создание круговых геозон, расположение которых определяется географическими координатами центра круга и числом, задающим радиус круга в метрах. Чтобы создать геозону, используйте конструктор типа Геозона
. При создании геозоны укажите ее уникальный идентификатор. Если идентификатор не задан, он будет сгенерирован автоматически.
После создания необходимых геозон добавьте их к объекту типа Геозоны
, чтобы начать отслеживание. Если при добавлении геозоны окажется, что геозона с таким идентификатором уже существует, старое определение геозоны заменится на новое. Свойство МаксимальноеКоличество
типа Геозоны
позволяет определить максимальное количество геозон, поддерживаемых устройством пользователя (20 для iOS и 100 для Android). Если вы превысите это число, будет выброшено ИсключениеГеозон
.
Используйте метод ПодключитьОбработчикПересечения
типа Геозоны
, чтобы задать обработчик, который будет вызываться при пересечении пользователем отслеживаемых геозон. Обработчик должен иметь два параметра:
Геозона
— определяет геозону, границу которой пересек пользователь;ВидПересеченияГеозоны
— указывает, вошел ли пользователь в текущую геозону или покинул ее.
В примере ниже показано, как задавать геозоны и оповещать пользователя при их пересечении:
метод ДобавитьГеозоны()
пер КоординатыЦентр = новый ГеографическиеКоординаты(55.752706, 37.621439, 0)
пер ГеозонаЦентр = новый Геозона("Москва Центр", КоординатыЦентр, 3000)
пер КоординатыСевер = новый ГеографическиеКоординаты(55.867510, 37.506481, 0)
пер ГеозонаСевер = новый Геозона("Москва Север", КоординатыСевер, 3000)
пер ГеозоныМосква = [ГеозонаЦентр, ГеозонаСевер]
Геозоны.ПодключитьОбработчикПересечения(&ОбработкаГезоны)
попытка
Геозоны.Добавить(ГеозоныМосква)
поймать Исключение: ИсключениеГеозон
Сообщить(Исключение.ВСтроку())
;
;
метод ОбработкаГезоны(Геозона: Геозона, ВидПересечения: ВидПересеченияГеозоны)
если ВидПересечения == ВидПересеченияГеозоны.Вход
Сообщить("Вы вошли в геозону \"${Геозона.Идентификатор}\".")
;
;