Использование функции геопозиционирования в мобильном приложении

поддерживает использование функции геопозиционирования для мобильных приложений. Вы можете определять текущие координаты пользователя; отслеживать изменения его местоположения, скорость и направление движения; создавать геозоны и контролировать пересечение их границ.

Чтобы мобильное приложение могло получать данные о местоположении устройства, оно должно отправить пользователю запрос с просьбой предоставить соответствующие разрешения. Для корректной работы c функцией геопозиционирования в вам необходимо добавить следующие разрешения:
  • получение точных данных о местоположении пользователя;
  • доступ к геоданным в фоновом режиме.

Получить координаты пользователя

Важно: Для работы с геопозиционированием необходимо включить возможность Геопозиционирование в свойстве Возможности элемента проекта Мобильный Клиент.

Для начала работы с функцией геопозиционирования вызовите метод ПолучитьПоставщика типа Геопозиционирование. Этот метод возвращает объект типа ПоставщикГеопозиции, который содержит основную информацию об используемом провайдере геоданных: является ли он платным, какой вид связи использует для получения данных о местоположении пользователя (сотовую сеть, интернет или спутник), поддерживает ли он определение направления, скорости движения и высоты. Рекомендуем вам выбирать провайдера, который обеспечивает минимальное энергопотребление (ПолучитьСамогоЭнергосберегающегоПоставщика) и максимальную точность определения координат (ПолучитьСамогоТочногоПоставщика).

Чтобы получить координаты пользователя, у объекта ПоставщикГеопозиции вызовите один следующих методов:
  • ПолучитьПоследнееМестоположение — возвращает последнее известное местоположение пользователя;
  • ПолучитьТекущееМестоположение — возвращает текущее местоположение пользователя.

Эти методы возвращают объект типа ДанныеМестоположения, который содержит географические координаты местоположения пользователя, дату и время получения данных о местоположении, скорость и направление движения пользователя. Если пользователь не дал разрешение на доступ к геолокации или его местоположение не удалось отследить, возвращается Неопределено.

В примере ниже показано, как получить текущие координаты пользователя.

метод ПолучитьТекущееМестоположение()
    если Геопозиционирование.ПоддерживаетсяГеопозиционирование() 
        пер Поставщик = Геопозиционирование.ПолучитьСамогоТочногоПоставщика()
        если Поставщик != Неопределено
            пер Положение = Поставщик.ПолучитьТекущееМестоположение()
            если Положение != Неопределено
                // Создайте метод для обработки местоположения пользователя
                ОбработкаМестоположения(Положение)
            ;
        ;
    ;
;

метод ОбработкаМестоположения(Положение: ДанныеМестоположения)
    // Дата и время обновления координат
    пер Дата = Положение.Дата
    // Получение координат местоположения пользователя
    пер Широта = Положение.Координаты.Широта
    пер Долгота = Положение.Координаты.Долгота
    // Обработка полученных координат
    // ...
;

Отследить изменения местоположения пользователя

Важно: Для отслеживания координат в фоновом режиме необходимо включить возможность ГеопозиционированиеВФоновомРежиме в свойстве Возможности элемента проекта Мобильный Клиент.

Если вам необходимо отслеживать местоположение пользователя, используйте метод ПодключитьОбработчикИзмененияМестоположения типа ПоставщикГеопозиции. Передайте в него ссылку на обработчик, который должен вызываться при изменении местоположения пользователя, а также укажите время минимального периода обновления координат в секундах и минимальную дистанцию в метрах, на которую должно передвинуться устройство для срабатывания обработчика. Используйте параметр РаботаВФоне чтобы указать, должно ли приложение отслеживать изменение координат в фоновом режиме.

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

метод НачатьОтслеживание()
    если Геопозиционирование.ПоддерживаетсяГеопозиционирование()
        пер Поставщик = Геопозиционирование.ПолучитьСамогоТочногоПоставщика()
        
        если Поставщик != Неопределено
            пер Длительность = 5с
            пер Дистанция = 0
            пер РаботаВФоне = Истина
            
            если Поставщик.ПодключитьОбработчикИзмененияМестоположения(Длительность, Дистанция, 
                                                            РаботаВФоне, &ОбработкаМестоположения)
                Сообщить("Выполняется отслеживание изменения местоположения.")
            иначе
                Сообщить("Не удалось подключить обработчик изменения местоположения!")
            ;
        ;
    ;
;

метод ОбработкаМестоположения(Положение: ДанныеМестоположения)
    // Дата и время обновления координат
    пер Дата = Положение.Дата
    // Получение текущих координат местоположения пользователя
    пер Широта = Положение.Координаты.Широта
    пер Долгота = Положение.Координаты.Долгота
    // Направление движения в градусах
    пер Направление = Положение.Направление
    // Скорость движения (м/с)
    пер Скорость = Положение.Скорость
    // Обработка полученных данных
    // ...
;

Задать геозоны для отслеживания перемещений пользователя

Важно: Для работы с геозонами необходимо включить возможность Геозоны в свойстве Возможности элемента проекта Мобильный Клиент.

Геозоны — это ограниченные области на географической карте, которые позволяют вам осуществлять мониторинг передвижения объектов. Вы можете отследить, вошло ли устройство в определенный географический участок или вышло из него. поддерживает создание круговых геозон, расположение которых определяется географическими координатами центра круга и числом, задающим радиус круга в метрах. Чтобы создать геозону, используйте конструктор типа Геозона. При создании геозоны укажите ее уникальный идентификатор. Если идентификатор не задан, он будет сгенерирован автоматически.

После создания необходимых геозон добавьте их к объекту типа Геозоны, чтобы начать отслеживание. Если при добавлении геозоны окажется, что геозона с таким идентификатором уже существует, старое определение геозоны заменится на новое. Свойство МаксимальноеКоличество типа Геозоны позволяет определить максимальное количество геозон, поддерживаемых устройством пользователя (20 для iOS и 100 для Android). Если вы превысите это число, будет выброшено ИсключениеГеозон.

Используйте метод ПодключитьОбработчикПересечения типа Геозоны, чтобы задать обработчик, который будет вызываться при пересечении пользователем отслеживаемых геозон. Обработчик должен иметь два параметра:
  • Геозона — определяет геозону, границу которой пересек пользователь;
  • ВидПересеченияГеозоны — указывает, вошел ли пользователь в текущую геозону или покинул ее.
В примере ниже показано, как задавать геозоны и оповещать пользователя при их пересечении:
метод ДобавитьГеозоны()
    пер КоординатыЦентр = новый ГеографическиеКоординаты(55.752706, 37.621439, 0)
    пер ГеозонаЦентр = новый Геозона("Москва Центр", КоординатыЦентр, 3000)
    
    пер КоординатыСевер = новый ГеографическиеКоординаты(55.867510, 37.506481, 0)
    пер ГеозонаСевер = новый Геозона("Москва Север", КоординатыСевер, 3000)

    пер ГеозоныМосква = [ГеозонаЦентр, ГеозонаСевер]

    Геозоны.ПодключитьОбработчикПересечения(&ОбработкаГезоны)

    попытка 
        Геозоны.Добавить(ГеозоныМосква)  
    поймать Исключение: ИсключениеГеозон 
        Сообщить(Исключение.ВСтроку())
    ;
;

метод ОбработкаГезоны(Геозона: Геозона, ВидПересечения: ВидПересеченияГеозоны)
    если ВидПересечения == ВидПересеченияГеозоны.Вход
        Сообщить("Вы вошли в геозону \"${Геозона.Идентификатор}\".")
    ;
;