// Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only import QtQuick 2.7 import QtQuick.Window 2.2 import QtQuick.Controls 2.13 as C2 import QtPositioning 5.6 import QtLocation 5.15 Window { id: win visible: true width: 1600 height: 800 title: qsTr("MapPolyline tester") property real initialZL: 4 property var initialCenter: QtPositioning.coordinate(55, -160) property real rotation : 0 Shortcut { sequence: "Ctrl+R" onActivated: { rotation += 30 } } function syncMaps(mFrom, mTo, propName) { if (mTo[propName] !== mFrom[propName]) { mTo[propName] = mFrom[propName] } } Plugin { id: osm // use only one plugin, to avoid messing up the cache name: "osm" } Rectangle { id: mapContainer rotation: win.rotation anchors.fill: parent color: "lightsteelblue" Map { id: map rotation: win.rotation objectName: "map1" anchors { bottom: parent.bottom top: parent.top left: parent.left right: (leftSwitch.checked) ? parent.right : parent.horizontalCenter } onCenterChanged: syncMaps(map, map2, "center") onTiltChanged: syncMaps(map, map2, "tilt") onBearingChanged: syncMaps(map, map2, "bearing") onZoomLevelChanged: syncMaps(map, map2, "zoomLevel") onFieldOfViewChanged: syncMaps(map, map2, "fieldOfView") opacity: 1.0 color: 'transparent' plugin: osm center: initialCenter activeMapType: map.supportedMapTypes[2] zoomLevel: initialZL z : parent.z + 1 copyrightsVisible: false Component.onCompleted: { var o = migComponent.createObject(map) o.glPolylines = Qt.binding(function() {return switchPolylines1.currentText}) map.addMapItemGroup(o); } MouseArea { anchors.fill: parent onClicked: (mouse) => { mouse.accepted = false var crd = map.toCoordinate(Qt.point(mouse.x, mouse.y)) var s = crd.toString(0) console.log("Clicked the map (not an Item) on ",s) } } C2.ComboBox { model: ['Software', 'OpenGL'] id: switchPolylines1 anchors { top: parent.top right: parent.right topMargin: 12 rightMargin: 12 } } } Map { id: map2 rotation: win.rotation objectName: "map2" visible: !leftSwitch.checked anchors { bottom: parent.bottom top: parent.top left: parent.horizontalCenter right: parent.right } onCenterChanged: syncMaps(map2, map, "center") onTiltChanged: syncMaps(map2, map, "tilt") onBearingChanged: syncMaps(map2, map, "bearing") onZoomLevelChanged: syncMaps(map2, map, "zoomLevel") onFieldOfViewChanged: syncMaps(map2, map, "fieldOfView") color: 'transparent' plugin: osm activeMapType: map.supportedMapTypes[2] center: initialCenter zoomLevel: initialZL copyrightsVisible: false Component.onCompleted: { var o = migComponent.createObject(map2) o.glPolylines = Qt.binding(function() {return switchPolylines2.currentText}) map2.addMapItemGroup(o); } C2.ComboBox { model: ['Software', 'OpenGL'] id: switchPolylines2 anchors { top: parent.top right: parent.right topMargin: 12 rightMargin: 12 } onCurrentTextChanged: console.log("CURRENT TEXT CHANGED ",currentText) } } } Component { id: migComponent MapItemGroup { id: polyGroup property bool glPolygons : true property string glPolylines : "Software" property bool glCircles : true property bool glRectangles : true objectName: parent.objectName + "_MIG_" MapPolyline { id: tstPolyLine // to verify the polygon stays where it's supposed to line.color: 'black' objectName: parent.objectName + "black" line.width: 1 opacity: 1.0 path: [ { latitude: 76.9965, longitude: -175.012 }, { latitude: 26.9965, longitude: -175.012 } ] } MapPolyline { id: timeline line.color: "red" objectName: parent.objectName + "timeline" line.width: 4 path: [ { latitude: 90, longitude: 180 }, { latitude: -90, longitude: -180 } ] } MapPolyline { id: poly1 line.color: "pink" line.width: sliWidth.value objectName: parent.objectName + "red" path: [ { latitude: 55, longitude: 170 }, { latitude: 66.9965, longitude: 170 }, { latitude: 66.9965, longitude: -175.012 }, { latitude: 55, longitude: -160 }, { latitude: 40, longitude: -165 }, { latitude: 45, longitude: 174 }, { latitude: 43, longitude: -168 } ] MouseArea { anchors.fill: parent onClicked: console.log("poly1 in "+parent.parent.objectName + "clicked") Rectangle { // this is technically unsupported, but practically works. color: "transparent" border.color: "red" anchors.fill: parent } } } MapPolygon { id: poly2 color: "green" border.color: "black" border.width: 12 objectName: parent.objectName + "green" path: [ { latitude: -45, longitude: -170 }, { latitude: -55, longitude: -155 }, { latitude: -45, longitude: -130 }, { latitude: -35, longitude: -155 } ] MouseArea{ anchors.fill: parent drag.target: parent Rectangle { // this is technically unsupported, but practically works. color: "transparent" border.color: "red" anchors.fill: parent } } } } } C2.Switch { text: qsTr("Left") id: leftSwitch anchors { top: parent.top left: parent.left leftMargin: 12 rightMargin: 12 } checked: false } C2.Slider { id: sliWidth orientation: Qt.Vertical anchors { left: parent.left top: leftSwitch.bottom bottom: parent.bottom topMargin: 10 leftMargin: 10 bottomMargin: 10 } from: 1 to: 50 value: 50 } }