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