使用visibleRegion(),QML Map插件“itemsoverlay”不会剪切到大型缩放的基本地图

时间:2018-05-07 20:08:52

标签: qt qml qtlocation qtpositioning

我有一个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)
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我正在玩一些参数并偶然发现了一个修复:替换

Map {
    id: map
    // ...
    maximumZoomLevel: mapBase.maximumZoomLevel
    // ...
}

Map {
    id: map
    // ...
    maximumZoomLevel: 30
    // ...
}

然而,我不明白为什么后者与前者形成对比,如果它甚至只是一个错误呢?