Геопозиционирование

Sailfish OS позволяет получать информацию со спутников GPS и ГЛОНАСС, включая информацию о текущей позиции, последнее известное положение, точность, расстояние и скорость.

Информация о местоположении является строго конфиденциальной, и Sailfish OS поддерживает данную политику, которая позволяет пользователю заблокировать возможность позиционирования.

Определение местоположения является составной частью общей архитектуры сотовой телефонии.

Архитектура определения местоположения

API QtPositioning используется для получения информации о местоположении и обновления спутниковой информации, а API QtLocation для доступа к службам определения местоположения (например, запрос на близлежащие объекты, доступ к фрагментам карты, а также расчет навигационных маршрутов между двумя точками). Все нативные компоненты API являются полностью открытым исходным кодом.

В качестве серверного модуля позиционирования в Sailfish OS применяется провайдер GeoClue, который использует oFono, чтобы получать MCC (мобильный код страны), MNC (мобильный сетевой код), LAC (код зоны местоположения), CID (идентификатор соты) и SS (мощность сигнала) о соседних вышках сотовой связи, затем применяет эту информацию вместе с информацией о публичном домене, полученной от службы определения местоположения Mozilla для определения приблизительного расположения устройства. Также существует онлайн-режим, при котором могут выполняться запросы API к веб-серверам службы определения местоположения Mozilla, для получения более точной информации о местоположении, используя информацию о соседних беспроводных сетях.

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

На данный момент в Sailfish OS используются некоторые специфичные плагины провайдера GeoClue, которые определяют местоположение и обновляют информацию со спутников, а также плагин для ConnMan, который позволяет пользователям управлять технологией GPS в зависимости от режима энергосбережения устройства, используя API ConnMan. Реализуется через вызовы D-Bus к основному плагину провайдера GeoClue.

Плагинами провайдера GeoClue являются следующие компоненты:

  • geoclue-provider-hybris — основной плагин провайдера GeoClue, использующий интерфейсы libhybris для управления GPS;
  • geoclue-provider-mlsdb — дополнительный плагин провайдера GeoClue, использующий службу определения местоположения Mozilla для обеспечения обновлений местоположения с помощью GPS;
  • connman-plugin-jollagps, определяющий для ConnMan режим энергосбережения устройства, с помощью которого возможно управление состоянием GPS;
  • проприетарные плагины позиционирования, имеющие закрытый исходный код.

Данные позиционирования могут быть предоставлены приложениям только при согласии пользователя. Данные включают в себя информацию об обновленных позициях, предоставленных устройством GPS (если он включен), а также информацию о спутниках, которая используется GPS.

Большинство компонентов имеют открытый исходный код, и разработчики компонентов активно просматривают проблемы, поднятые в рамках проекта Mer в gitlab и баг-трекера проекта Mer, а также в IRC (#jollamobile@freenode) и по электронной почте.

В качестве альтернативы существующим провайдерам определения местоположения может быть использован плагин geoclue-gsmloc. GeoClue имеет соту GSM на основе провайдера определения местоположения (gsmloc), использующий oFono для получения информации о MCC, MNC, LAC и CID, которые он затем сопоставляет с данными, предоставленными веб-сервисом через таблицу поиска. Веб-сервис используется для получения широты и долготы текущей соты. Таблица поиска используется, чтобы отобразить код страны MCC по ISO (международная организация по стандартизации). Например, MCC 244 равняется коду из двух букв Финляндии FI ISO  3166-1 alpha-2. В настоящее время этот плагин не включен в Sailfish OS, но он может быть добавлен позднее.