Как ни странно, трудно найти какую-либо документацию по доступу к информации о геолокации для Ubuntu Touch в частности и даже для Qt5 в целом. API Qt Mobility предоставили это в Qt4, и, похоже, они были разделены на отдельные библиотеки в Qt5 . Эти библиотеки, по-видимому, были удалены из дистрибутива Qt 5 и теперь считаются необязательными дополнительными модулями . Поскольку они теперь являются «дополнениями», веб-сайт Qt, похоже, больше не публикует их документацию. Для них есть пакеты Ubuntu, но установка SDK на самом деле их не вытягивает. Поэтому неясно, будут ли они доступны на телефоне или нет.
Правильный пакет выглядит как qtdeclarative5-qtlocation-plugin , к которому можно обратиться в Qml с помощью import QtLocation 5.0
Попытка просто получить широту и долготу было бесполезным упражнением. Глядя на старые документы Qt4, я попытался:
import QtQuick 2.0
import QtLocation 5.0
PositionSource {
id: src
updateInterval: 1000
active: true
onPositionChanged: {
var coord = src.position.coordinate;
console.log("Coordinate:", coord.longitude, coord.latitude);
}
}
К сожалению, это всего лишь ошибки segfaults ...
Итак, мой простой вопрос: как получить доступ к информации о геолокации в Ubuntu Touch в Qml?
Я думаю, что это не сработало из-за того, что на устройстве не был включен GPS. Следующий пример кода работал без segfaulting на моем ноутбуке. На устройстве для блокировки GPS требуется около 1-2 минут, поскольку AGPS еще не приземлился.
import QtQuick 2.2
import Ubuntu.Components 1.1.
import QtPositioning 5.2
MainView {
id: mainView
applicationName: "me.nik90.gpsapp"
useDeprecatedToolbar: false
width: units.gu(100)
height: units.gu(75)
Page {
id: page
title: "GPS"
PositionSource {
id: src
updateInterval: 1000
active: true
onPositionChanged: {
var coord = src.position.coordinate;
console.log("Coordinate: " + coord.longitude + ":" + coord.latitude);
}
}
Label {
text: "Coordinate: " + src.coord.longtitude + ":" + src.coord.latitude;
}
}
}