Как автоматически масштабировать карту Qml, чтобы она соответствовала двум элементам MapQuickItems
У меня есть приложение Qt Qml, где мне нужно отобразить карту с двумя MapQuickItems. Один - такси, другой - клиент. Я хочу отобразить их обоих на карте. И я хочу, чтобы карта автоматически увеличивала или уменьшала масштаб при приближении такси к клиенту. Там нет маршрутизации или жестов. Пользователь не должен иметь возможности взаимодействовать с картой.
Я попытался поиграться с свойством map.center. Но это не сработало, когда такси далеко.
import QtQuick 2.12
import QtQuick.Window 2.12
import QtPositioning 5.12
import QtLocation 5.5
Rectangle
{
id: mapWindow
visible: false
property real taxiLatitude: 0
property real taxiLongitude: 0
property real customerLatitude: 0
property real customerLongitude: 0
Plugin
{
id: googleMap
name: "googlemaps"
}
Map
{
id: map
anchors.fill: mapWindow
plugin: googleMap
center: QtPositioning.coordinate(taxiLatitude, taxiLongitude) //positionSource.position.coordinate
zoomLevel: 17
copyrightsVisible: true
MapQuickItem
{
id: markerTaxi
anchorPoint.x: imageHuman.width/4
anchorPoint.y: imageHuman.height
coordinate: QtPositioning.coordinate(customerLatitude, taxiLongitude)
sourceItem: Image
{
id: imageHuman
width: 40
height: 40
source: "qrc:/Images/extrapics/humanIcon.png"
}
}
MapQuickItem
{
id: markerCustomer
anchorPoint.x: image.width/4
anchorPoint.y: image.height
coordinate: QtPositioning.coordinate(taxiLatitude, taxiLongitude)
sourceItem: Image
{
id: image
width: 40
height: 40
source: "qrc:/Images/extrapics/point.png"
}
}
}
}
Мне нужно разместить такси и клиента внутри карты, и карта должна автоматически увеличивать масштаб, когда такси приближается к клиенту.
Я попытался установить видимую область, как показано ниже. Но это не поможет. Это показывает другой регион (Северная Америка). Но регион, который я установил, находится на совершенно другом континенте.
visibleRegion: QtPositioning.rectangle(QtPositioning.coordinate(12.921527, 75.092244), QtPositioning.coordinate(12.726949, 75.014545))
1 ответ
Используйте таймер для обновления карты с помощью fitViewportToMapItems()
import QtQuick 2.12
import QtQuick.Window 2.12
import QtPositioning 5.12
import QtLocation 5.5
Rectangle
{
id: mapWindow
visible: false
property real taxiLatitude: 0
property real taxiLongitude: 0
property real customerLatitude: 0
property real customerLongitude: 0
Plugin
{
id: googleMap
name: "googlemaps"
}
Timer
{
id: mapRefreshtimer
running: true
interval: 2000
repeat: true
onTriggered:
{
map.fitViewportToMapItems()
}
}
Map
{
id: map
anchors.fill: mapWindow
plugin: googleMap
MapQuickItem
{
id: markerTaxi
anchorPoint.x: imageHuman.width/4
anchorPoint.y: imageHuman.height
coordinate: QtPositioning.coordinate(customerLatitude, taxiLongitude)
visible: true
sourceItem: Image
{
id: imageHuman
width: 40
height: 40
source: "qrc:/Images/extrapics/humanIcon.png"
}
}
MapQuickItem
{
id: markerCustomer
anchorPoint.x: image.width/4
anchorPoint.y: image.height
coordinate: QtPositioning.coordinate(taxiLatitude, taxiLongitude)
visible: true
sourceItem: Image
{
id: image
width: 40
height: 40
source: "qrc:/Images/extrapics/point.png"
}
}
}
}