СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера

Методы · GetMostAccurateProvider

Получает информацию о самом точном провайдере геопозиционирования. Если параметр <ТолькоДоступно> содержит значение Истина, информация о самом точном провайдере будет возвращена только в случае, если провайдер доступен. Если параметр <ТолькоДоступно> содержит значение Ложь, информация о самом точном провайдере будет возвращена независимо от доступности провайдера.

Синтаксис

ПолучитьСамогоТочногоПровайдера(<ТолькоДоступного>)
Полное описание, параметры и ограничения

СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера (LocationTools.GetMostAccurateProvider)

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

ПолучитьСамогоТочногоПровайдера (GetMostAccurateProvider)

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

Синтаксис:
ПолучитьСамогоТочногоПровайдера(<ТолькоДоступного>)
Параметры:

<ТолькоДоступного> (необязательный)
Тип: Булево.
Если параметр содержит Истина, то информация о самом точном провайдере будет возращена только если провайдер является доступным. Если самый точный провайдер недоступен, будет возвращено Неопределено.
Если параметр содержит Ложь, то будет возвращена информация о самом точном провайдере на устройстве.
Значение по умолчанию: Истина.
Возвращаемое значение:
Тип: ИнформацияПровайдераГеопозиционирования, Неопределено.
Неопределено - ни один провайдер не найден, или если параметр <ТолькоДоступно> содержал значение Истина, а самый точный провайдер не доступен.
Описание:

Получает информацию о самом точном провайдере геопозиционирования.
Если параметр <ТолькоДоступно> содержит значение Истина, информация о самом точном провайдере будет возвращена только в случае, если провайдер доступен.
Если параметр <ТолькоДоступно> содержит значение Ложь, информация о самом точном провайдере будет возвращена независимо от доступности провайдера.

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

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

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

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

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

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

Прочитать последнее измерение и не подменить неизвестное нулём

Получаем настоящий ДанныеМестоположения из менеджера, проверяем дату, координаты и необязательные характеристики, не печатая точный адрес пользователя.

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

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

Подготовка

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

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

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

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

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

&НаКлиенте
Процедура ВыполнитьПример(Команда)
    Провайдер = СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера(Истина);
    Если Провайдер = Неопределено Тогда
        Сообщить("Самый точный провайдер недоступен");
        Возврат;
    КонецЕсли;
    Измерение = СредстваГеопозиционирования.ПолучитьПоследнееМестоположение(Провайдер.Имя);
    ПоказатьУчебныеХарактеристикиИзмерения(Измерение);
КонецПроцедуры

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

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

  1. ДанныеМестоположения не имеет конструктора. Получаем его штатно из геопозиционирования, не заменяем структурой с похожими полями.

  2. ПолучитьПоследнееМестоположение может вернуть Неопределено. В этом случае helper выводит понятное отсутствие и не читает свойства.

  3. Дата относится к моменту измерения, не к времени вызова команды. Здесь не объявляем её UTC и не вычитаем из ТекущаяДата универсальную «давность» без контракта часового пояса.

  4. Координаты — настоящий ГеографическиеКоординаты. Выводим только проверки диапазонов широты/долготы и наличие числовой высоты, не их точные значения.

  5. Горизонтальная/вертикальная точность — метры, скорость — м/с. Для отображения км/ч умножаем известную скорость на 3.6; Неопределено не означает 0.

  6. Направление — градусы, а не градусы широты. Все шесть свойств измерения только для чтения.

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

  1. Для полученного измерения диапазоны координат дают Истина. Недоступные характеристики выводятся отдельными сообщениями, не нулями.

  2. При отсутствии кэша выводится Последнего измерения нет; обновление и постоянное отслеживание не выполняются.

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

Разобран настоящий результат измерения с единицами, необязательными полями и ограничениями приватности.

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

  1. Кэш может быть старым; наличие объекта не доказывает текущее местоположение.

  2. Даже дата/скорость могут относиться к личным данным. Диагностируйте только собственный телефон.

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

Выбрать провайдер геопозиционирования с учётом точности и батареи

Сравниваем все реальные провайдеры устройства и два варианта выбора. Пока не запрашиваем координаты и не включаем отслеживание.

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

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

Подготовка

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

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

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

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

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

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

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

  1. ПолучитьПровайдеров(Ложь) включает присутствующие, но недоступные провайдеры; Истина оставляет доступные сейчас. Порядок массива не является ранжированием качества.

  2. Все 11 свойств информации провайдера только для чтения. Точность указана в метрах, энергопотребление — в баллах 0–10, а не в ваттах или процентах батареи.

  3. ПолучитьПровайдера ищет по реально полученному имени. Не угадываем фиксированное имя gps, одинаковое для всех ОС.

  4. Самый точный/экономичный при Истина может вернуть Неопределено, если именно этот провайдер недоступен. Это не обещание выбрать следующий доступный из списка.

  5. ИспользованиеДанныхГеопозиционированияВключено показывает настройку устройства, не пользовательское согласие приложению и не успешное измерение.

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

  1. Числа, имена и свойства соответствуют собственному устройству; пустой список обрабатывается без индекса 0.

  2. В сообщениях нет широты/долготы и не зарегистрированы обработчики изменения положения.

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

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

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

  1. Заявленная точность провайдера не равна точности конкретного измерения.

  2. ПоддерживаетСкорость не гарантирует, что каждое измерение содержит скорость.

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

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

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

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

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