diff options
-rw-r--r-- | examples/location/mapviewer/map/MiniMap.qml | 58 |
1 files changed, 47 insertions, 11 deletions
diff --git a/examples/location/mapviewer/map/MiniMap.qml b/examples/location/mapviewer/map/MiniMap.qml index 821879f2..78d2b01e 100644 --- a/examples/location/mapviewer/map/MiniMap.qml +++ b/examples/location/mapviewer/map/MiniMap.qml @@ -49,12 +49,33 @@ ****************************************************************************/ import QtQuick 2.5 +import QtPositioning 5.3 import QtLocation 5.6 Rectangle{ + + function clamp(num, min, max) + { + return num < min ? min : num > max ? max : num; + } + + function minimumScaleFactor() + { + var hscalefactor = (400.0 / Math.max(Math.min(map.width, 1000), 400)) * 0.5 + var vscalefactor = (400.0 / Math.max(Math.min(map.height, 1000), 400)) * 0.5 + return Math.min(hscalefactor,vscalefactor) + } + + function avgScaleFactor() + { + var hscalefactor = (400.0 / Math.max(Math.min(map.width, 1000), 400)) * 0.5 + var vscalefactor = (400.0 / Math.max(Math.min(map.height, 1000), 400)) * 0.5 + return (hscalefactor+vscalefactor) * 0.5 + } + id: miniMapRect - width: 152 - height: 152 + width: Math.floor(map.width * avgScaleFactor()) + 2 + height: Math.floor(map.height * avgScaleFactor()) + 2 anchors.right: (parent) ? parent.right : undefined anchors.rightMargin: 10 anchors.top: (parent) ? parent.top : undefined @@ -66,25 +87,40 @@ Rectangle{ anchors.topMargin: 1 anchors.left: parent.left anchors.leftMargin: 1 - width: 150 - height: 150 - zoomLevel: (map.zoomLevel > minimumZoomLevel + 3) ? minimumZoomLevel + 3 : 2.5 + width: Math.floor(map.width * avgScaleFactor()) + height: Math.floor(map.height * avgScaleFactor()) + zoomLevel: clamp(map.zoomLevel - 4.5, 2.0, 5.0) //(map.zoomLevel > minimumZoomLevel + 3) ? minimumZoomLevel + 3 : 1.5 center: map.center plugin: map.plugin gesture.enabled: false copyrightsVisible: false + property double mapZoomLevel : map.zoomLevel + + // cannot use property bindings on map.visibleRegion in MapRectangle because it's non-NOTIFYable + onCenterChanged: miniMapRectangle.updateCoordinates() + onMapZoomLevelChanged: miniMapRectangle.updateCoordinates() + onWidthChanged: miniMapRectangle.updateCoordinates() + onHeightChanged: miniMapRectangle.updateCoordinates() MapRectangle { + id: miniMapRectangle color: "#44ff0000" border.width: 1 border.color: "red" - topLeft { - latitude: miniMap.center.latitude + 5 - longitude: miniMap.center.longitude - 5 + + function getMapVisibleRegion() + { + return QtPositioning.shapeToRectangle(map.visibleRegion) } - bottomRight { - latitude: miniMap.center.latitude - 5 - longitude: miniMap.center.longitude + 5 + + function updateCoordinates() + { + topLeft.latitude = getMapVisibleRegion().topLeft.latitude + topLeft.longitude= getMapVisibleRegion().topLeft.longitude + bottomRight.latitude = getMapVisibleRegion().bottomRight.latitude + bottomRight.longitude= getMapVisibleRegion().bottomRight.longitude + console.log("TopLeft: " + topLeft) + console.log("BotRigh: " + bottomRight) } } } |