|
|||||||
Некоторые приемы работы с типом Map, PositionSource и прочими геолокационными элементами
Время создания: 08.08.2018 13:12
Текстовые метки: qt, qml, map, PositionSource, карты, картография, геолокация, андроид, android
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Картография в Qt и QML
Запись: xintrea/mytetra_syncro/master/base/15337231377r7rbpokgo/text.html на raw.github.com
|
|||||||
|
|||||||
В: Какие основные типы QML используются при работе с картографией в QML? О: Для отображения карты используется тип Map. Для работы с позиционированием на карте используется Positioning API. Его основные типы:
При работе с этими элементами есть много тонкостей, Например, чтобы начал работать элемент типа PositionSource, его нужно активировать PositionSource.active=true и задать ему свойство updateInterval. В: Как получить географические координаты точки на карте типа Map, в месте, где пользователь коснулся экрана? О: Функция toCoordinate() типа Map переводит экранные координаты объекта в глобальные. Коснулись объекта на экране – получили координаты: onPressed: { console.log('latitude = '+ (map.toCoordinate(Qt.point(mouse.x,mouse.y))).latitude); console.log('longitude = '+ (map.toCoordinate(Qt.point(mouse.x,mouse.y))).longitude); } В: Какие данные можно вытянуть из типа PositionSource? О: Следующий код демонстрирует отладочный вывод о свойствах объекта типа PositionSource: Rectangle { id: page width: 350 height: 350 PositionSource { id: positionSource updateInterval: 1000 active: true // nmeaSource: "nmealog.txt" } Column { Text {text: "<==== PositionSource ====>"} Text {text: "positioningMethod: " + printableMethod(positionSource.positioningMethod)} Text {text: "nmeaSource: " + positionSource.nmeaSource} Text {text: "updateInterval: " + positionSource.updateInterval} Text {text: "active: " + positionSource.active} Text {text: "<==== Position ====>"} Text {text: "latitude: " + positionSource.position.coordinate.latitude} Text {text: "longitude: " + positionSource.position.coordinate.longitude} Text {text: "altitude: " + positionSource.position.coordinate.altitude} Text {text: "speed: " + positionSource.position.speed} Text {text: "timestamp: " + positionSource.position.timestamp} Text {text: "altitudeValid: " + positionSource.position.altitudeValid} Text {text: "longitudeValid: " + positionSource.position.longitudeValid} Text {text: "latitudeValid: " + positionSource.position.latitudeValid} Text {text: "speedValid: " + positionSource.position.speedValid} } function printableMethod(method) { if (method == PositionSource.SatellitePositioningMethod) return "Satellite"; else if (method == PositionSource.NoPositioningMethod) return "Not available" else if (method == PositionSource.NonSatellitePositioningMethod) return "Non-satellite" else if (method == PositionSource.AllPositioningMethods) return "All/multiple" return "source error"; } } В: Как можно добавить на карту дополнительные элементы: кружки, линии, надписи? О: В качестве дочерних сущностей элемента Map на карту могут быть добавлены различные элементы, такие как MapRectangle, MapCircle, MapText, MapImage, MapPolygon, MapPolyline и т.п. Эти элементы будут отображаться автоматически в указанной позиции. Их очень удобно использовать для установки различных меток на карте, отображения маршрутов, областей и всего, чего только может понадобиться. К примеру, вот так можно отобразить текст на карте в нужной нам позиции: MapText { id: texts coordinate: Coordinate {latitude: 54.914; longitude: 73.313} color: "yellow" text: "Samarka" font.pixelSize: 10 } Или, вот так — желтым кружочком можно пометить на карте текущие координаты пользователя: MapCircle { id: userPosition color: "yellow" radius: 10 center: userPositionSource.position.coordinate } В: Какие типы карт указываются в свойстве mapType? О: Доступны следующие типы:
Для корректного отображения тип карты должен, конечно же, поддерживаться провайдером. В более новых версиях QML, имеется отдельный тип MapType, и в его свойстве style заявлена поддержка следующих вариантов:
В: Как заставить передвигаться центр карты вслед за координатами? О: Например, так: Item { id: root // Координаты транспортного средства (в градусах) property double geoTransportLatitude: 0 property double geoTransportLongitude: 0 // Координаты, пригодные для использования совместно с объектом карты Location { id: location coordinate { latitude: root.geoTransportLatitude longitude: root.geoTransportLongitude } } Binding { target: map property: "center" value: location.coordinate when: location.coordinate.isValid } Map { id: map plugin: mapPlugin zoomLevel: 15 width: root.width height: root.height } В: Как можно передвигаться по карте не скачкообразно, а плавно? О: Передвигаться по карте можно не только скачкообразно, но и плавно, используя функцию map.pan(dx, dy). Где dx, dy – смещение влево/вправо и верх/вниз относительно предыдущей позиции. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|