У меня есть несколько минимальный пример карты QML (плагин OSM) и соответствующее наложение карты с плагином itemsoverlay
.
Следующий код обрезает наложение на карту, независимо от того, какое движение или увеличение масштаба карты происходит.
Однако я могу увеличить базовую карту ближе, чем максимальный уровень масштабирования OSM (в результате чего получится некоторый уровень масштабирования 21,07), например, используя mapBase.visibleRegion = rect
(см. ниже). Но наложение не будет увеличивать масштаб ближе, чем этот, масштаб останется на уровне 19.
Вы можете проверить это, нажав на красный кружок.
Есть идеи, как сделать так, чтобы наложение имело тот же уровень масштабирования, что и базовая карта?
import QtQuick.Window 2.2
import QtQuick 2.7
import QtLocation 5.8
import QtPositioning 5.8
import QtQuick.Controls 2.2
Window {
width: 512
height: 512
visible: true
Map {
id: mapBase
anchors.fill: parent
gesture.enabled: true
plugin: Plugin { name: "osm" }
z: parent.z + 1
maximumZoomLevel: 30
center: QtPositioning.coordinate(51.51939, -0.11832)
Component.onCompleted: {
mapBase.zoomLevel = 19
}
}
Map {
id: map
anchors.fill: parent
plugin: Plugin { name: "itemsoverlay" }
gesture.enabled: false
center: mapBase.center
color: 'transparent'
minimumFieldOfView: mapBase.minimumFieldOfView
maximumFieldOfView: mapBase.maximumFieldOfView
minimumTilt: mapBase.minimumTilt
maximumTilt: mapBase.maximumTilt
minimumZoomLevel: mapBase.minimumZoomLevel
maximumZoomLevel: mapBase.maximumZoomLevel
zoomLevel: mapBase.zoomLevel
tilt: mapBase.tilt;
bearing: mapBase.bearing
fieldOfView: mapBase.fieldOfView
z: mapBase.z + 1
// visibleRegion: mapBase.visibleRegion
anchors.centerIn: parent
MapCircle {
center: QtPositioning.coordinate(51.51939, -0.11832)
radius: 10
color: "red"
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: {
var rect = QtPositioning.rectangle(
QtPositioning.coordinate(51.51949, -0.11842),
QtPositioning.coordinate(51.51929, -0.11822))
mapBase.visibleRegion = rect
parent.color = 'green'
console.log(map.zoomLevel, mapBase.zoomLevel)
}
}
}
}
}