СредстваГеопозиционирования.ОбновитьМестоположение

Методы · UpdateLocation

Выполняет попытку получения от провайдера актуального местоположения.

Синтаксис

ОбновитьМестоположение(<ИмяПровайдера>, <Таймаут>)
Полное описание, параметры и ограничения

СредстваГеопозиционирования.ОбновитьМестоположение (LocationTools.UpdateLocation)

СредстваГеопозиционирования (LocationTools)

ОбновитьМестоположение (UpdateLocation)

Доступен, начиная с версии 8.3.3.

Синтаксис:
ОбновитьМестоположение(<ИмяПровайдера>, <Таймаут>)
Параметры:

<ИмяПровайдера> (обязательный)
Тип: Строка.
Содержит имя провайдера.

<Таймаут> (необязательный)
Тип: Число.
Определяет предельное время ожидания ответа от провайдера (в секундах).
0 - не устанавливать таймаут (время ожидания не ограничено).
Возвращаемое значение:
Тип: Булево.
Ложь - за выделенное время не был получен ответ от провайдера.
Описание:

Выполняет попытку получения от провайдера актуального местоположения.

Доступность:

Мобильный клиент, мобильное приложение (клиент).

Использование в версии:

Доступен, начиная с версии 8.3.3.

Методическая информация

Практические примеры

Запросить обновление с конечным временем ожидания

Ждём ответ провайдера не более 15 секунд, затем отдельно читаем последнее измерение. Ответ провайдера не выдаём за гарантированно новую точку.

Где и как запускать

Полный клиентский модуль собственной мобильной управляемой формы. Назначьте команды указанным процедурам; функции/экспортные обработчики разместите на уровне модуля.

Подготовка

  1. Используйте собственное отдельное учебное мобильное приложение и собственный телефон. Эти методы доступны в мобильном клиенте/мобильном приложении (клиент), не в серверном общем модуле и не в тонком клиенте Windows.

  2. Создайте собственную управляемую форму с указанными в уроке командами и вставьте полный модуль одного урока. Для реального чтения/отслеживания вручную разрешите геопозиционирование приложению в ОС; проверьте требуемые разрешения и возможности в настройках собственного мобильного приложения.

  3. Включённая геолокация устройства не равна разрешению конкретному приложению. Провайдер может использовать сеть, быть платным, расходовать батарею или не поддерживать отдельное поле. Отказ в доступе не обходите.

  4. Последнее измерение не обязательно свежее. Точные координаты не выводятся в сообщения, не записываются в файл и не отправляются на ваш сервер. Геопровайдер ОС сам может использовать сеть согласно своим настройкам.

  5. В уроках отслеживания сначала изучите команду остановки. Не закрывайте форму до отключения собственных обработчиков/геозоны. Не используйте чужое приложение или приложение с рабочими геозонами.

&НаКлиенте
Процедура ВыполнитьПример(Команда)
    Если Не СредстваГеопозиционирования.ИспользованиеДанныхГеопозиционированияВключено() Тогда
        Сообщить("Геолокация отключена в настройках устройства");
        Возврат;
    КонецЕсли;
    Провайдер = СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера(Истина);
    Если Провайдер = Неопределено Тогда
        Сообщить("Подходящий провайдер сейчас недоступен");
        Возврат;
    КонецЕсли;
    ДоОбновления = СредстваГеопозиционирования.ПолучитьПоследнееМестоположение(Провайдер.Имя);
    ОтветПолучен = СредстваГеопозиционирования.ОбновитьМестоположение(Провайдер.Имя, 15);
    Если Не ОтветПолучен Тогда
        Сообщить("За 15 секунд ответ не получен; старый кэш не выдаём за новое измерение");
        Возврат;
    КонецЕсли;
    ПослеОбновления = СредстваГеопозиционирования.ПолучитьПоследнееМестоположение(Провайдер.Имя);
    Если ПослеОбновления = Неопределено Тогда
        Сообщить("Ответ был получен, но последнее измерение отсутствует");
        Возврат;
    КонецЕсли;
    Если ДоОбновления <> Неопределено Тогда
        Сообщить("Момент измерения изменился: " + Строка(ПослеОбновления.Дата <> ДоОбновления.Дата));
    КонецЕсли;
    ПоказатьУчебныеХарактеристикиИзмерения(ПослеОбновления);
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьУчебныеХарактеристикиИзмерения(Измерение)
    Если Измерение = Неопределено Тогда
        Сообщить("Последнего измерения нет");
        Возврат;
    КонецЕсли;
    Сообщить("Момент измерения: " + Строка(Измерение.Дата));
    Точка = Измерение.Координаты;
    Сообщить(Точка.Широта >= -90 И Точка.Широта <= 90);
    Сообщить(Точка.Долгота >= -180 И Точка.Долгота <= 180);
    Сообщить("Высота определена числом: " + Строка(ТипЗнч(Точка.Высота) = Тип("Число")));
    Если Измерение.ГоризонтальнаяТочность = Неопределено Тогда
        Сообщить("Горизонтальная точность не определена");
    Иначе
        Сообщить("Горизонтальная точность, м: " + Строка(Измерение.ГоризонтальнаяТочность));
    КонецЕсли;
    Если Измерение.ВертикальнаяТочность = Неопределено Тогда
        Сообщить("Вертикальная точность не определена");
    Иначе
        Сообщить("Вертикальная точность, м: " + Строка(Измерение.ВертикальнаяТочность));
    КонецЕсли;
    Если Измерение.Скорость = Неопределено Тогда
        Сообщить("Скорость не определена");
    Иначе
        Сообщить("Скорость, км/ч: " + Строка(Измерение.Скорость * 3.6));
    КонецЕсли;
    Если Измерение.Направление = Неопределено Тогда
        Сообщить("Направление не определено");
    Иначе
        Сообщить("Направление, градусов: " + Строка(Измерение.Направление));
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. ОбновитьМестоположение имеет таймаут в секундах. 0 означает отсутствие ограничения, поэтому для учебной команды задано 15, не 0.

  2. Это синхронное ожидание: интерфейс может ждать до ответа/таймаута. Не вызывайте этот метод циклом в обработчике формы.

  3. Ложь означает, что за время не получен ответ; не продолжаем старым кэшем, выдавая его за свежий.

  4. После ответа отдельно читаем последнее измерение и проверяем Неопределено. Сравнение дат показывает только изменение момента, не географическое перемещение.

  5. Ни ответ, ни изменение даты не доказывают высокую точность или фактическое движение: характеристики измерения проверяются отдельно.

Как проверить результат

  1. При недоступном провайдере/выключенной геолокации команда заканчивается понятным сообщением.

  2. При таймауте не показывается старое значение как обновлённое; при ответе выводятся реальные доступные характеристики.

Ожидаемый результат

Показан ограниченный запрос измерения с раздельной обработкой таймаута, кэша и результата.

На что обратить внимание

  1. Не оставляйте таймаут 0 для ожидания в учебной форме.

  2. Включённая геолокация не заменяет разрешение ОС приложению; отказ может вызвать исключение.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.