diff options
author | 2018-11-07 11:06:42 +0900 | |
---|---|---|
committer | 2019-02-13 11:00:20 +0900 | |
commit | 0ed2885ececf079f16b42fec60a4dc86285b5101 (patch) | |
tree | b07075ffbebf9680ad4d5d2d6a4fa99a4ceee06c /app/map/MapComponent.qml | |
parent | ae47635e56c4af4d816a76e5186e945768543679 (diff) |
add tbtnavi source
Diffstat (limited to 'app/map/MapComponent.qml')
-rw-r--r-- | app/map/MapComponent.qml | 693 |
1 files changed, 0 insertions, 693 deletions
diff --git a/app/map/MapComponent.qml b/app/map/MapComponent.qml deleted file mode 100644 index 161038c..0000000 --- a/app/map/MapComponent.qml +++ /dev/null @@ -1,693 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick 2.5 -import QtQuick.Layouts 1.3 -import QtQuick.Controls 1.4 -import QtQuick.Extras 1.4 -import QtLocation 5.6 -import QtPositioning 5.5 -import "../helper.js" as Helper - -//! [top] -Map { - id: map -//! [top] - property variant markers - property variant mapItems - property variant location - property int markerCounter: 0 // counter for total amount of markers. Resets to 0 when number of markers = 0 - property int currentMarker - property int lastX : -1 - property int lastY : -1 - property int pressX : -1 - property int pressY : -1 - property int jitterThreshold : 30 - property bool followme: true - property variant scaleLengths: [5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000] - property alias routeQuery: routeQuery - property alias routeModel: routeModel - property alias geocodeModel: geocodeModel - - signal showGeocodeInfo() - signal geocodeFinished() - signal routeError() - signal coordinatesCaptured(double latitude, double longitude) - signal showMainMenu(variant coordinate) - signal showMarkerMenu(variant coordinate) - signal showRouteMenu(variant coordinate) - signal showPointMenu(variant coordinate) - signal showRouteList() - - - center { - // null island - latitude: 0 - longitude: 0 - } - - function geocodeMessage() - { - var street, district, city, county, state, countryCode, country, postalCode, latitude, longitude, text - latitude = Math.round(geocodeModel.get(0).coordinate.latitude * 10000) / 10000 - longitude =Math.round(geocodeModel.get(0).coordinate.longitude * 10000) / 10000 - street = geocodeModel.get(0).address.street - district = geocodeModel.get(0).address.district - city = geocodeModel.get(0).address.city - county = geocodeModel.get(0).address.county - state = geocodeModel.get(0).address.state - countryCode = geocodeModel.get(0).address.countryCode - country = geocodeModel.get(0).address.country - postalCode = geocodeModel.get(0).address.postalCode - - text = "<b>Latitude:</b> " + latitude + "<br/>" - text +="<b>Longitude:</b> " + longitude + "<br/>" + "<br/>" - if (street) text +="<b>Street: </b>"+ street + " <br/>" - if (district) text +="<b>District: </b>"+ district +" <br/>" - if (city) text +="<b>City: </b>"+ city + " <br/>" - if (county) text +="<b>County: </b>"+ county + " <br/>" - if (state) text +="<b>State: </b>"+ state + " <br/>" - if (countryCode) text +="<b>Country code: </b>"+ countryCode + " <br/>" - if (country) text +="<b>Country: </b>"+ country + " <br/>" - if (postalCode) text +="<b>PostalCode: </b>"+ postalCode + " <br/>" - return text - } - - function calculateScale() - { - var coord1, coord2, dist, text, f - f = 0 - coord1 = map.toCoordinate(Qt.point(0,scale.y)) - coord2 = map.toCoordinate(Qt.point(0+scaleImage.sourceSize.width,scale.y)) - dist = Math.round(coord1.distanceTo(coord2)) - - if (dist === 0) { - // not visible - } else { - for (var i = 0; i < scaleLengths.length-1; i++) { - if (dist < (scaleLengths[i] + scaleLengths[i+1]) / 2 ) { - f = scaleLengths[i] / dist - dist = scaleLengths[i] - break; - } - } - if (f === 0) { - f = dist / scaleLengths[i] - dist = scaleLengths[i] - } - } - - text = Helper.formatDistance(dist) - scaleImage.width = (scaleImage.sourceSize.width * f) - 2 * scaleImageLeft.sourceSize.width - scaleText.text = text - } - - function deleteMarkers() - { - var count = map.markers.length - for (var i = 0; i<count; i++){ - map.removeMapItem(map.markers[i]) - map.markers[i].destroy() - } - map.markers = [] - markerCounter = 0 - } - - function deleteMapItems() - { - var count = map.mapItems.length - for (var i = 0; i<count; i++){ - map.removeMapItem(map.mapItems[i]) - map.mapItems[i].destroy() - } - map.mapItems = [] - } - - function addMarker() - { - var count = map.markers.length - markerCounter++ - var marker = Qt.createQmlObject ('Marker {}', map) - map.addMapItem(marker) - marker.z = map.z+1 - marker.coordinate = mouseArea.lastCoordinate - - //update list of markers - var myArray = new Array() - for (var i = 0; i<count; i++){ - myArray.push(markers[i]) - } - myArray.push(marker) - markers = myArray - } - - function addGeoItem(item) - { - var count = map.mapItems.length - var co = Qt.createComponent(item+'.qml') - if (co.status == Component.Ready) { - var o = co.createObject(map) - o.setGeometry(map.markers, currentMarker) - map.addMapItem(o) - //update list of items - var myArray = new Array() - for (var i = 0; i<count; i++){ - myArray.push(mapItems[i]) - } - myArray.push(o) - mapItems = myArray - - } else { - console.log(item + " is not supported right now, please call us later.") - } - } - - function deleteMarker(index) - { - //update list of markers - var myArray = new Array() - var count = map.markers.length - for (var i = 0; i<count; i++){ - if (index != i) myArray.push(map.markers[i]) - } - - map.removeMapItem(map.markers[index]) - map.markers[index].destroy() - map.markers = myArray - if (markers.length == 0) markerCounter = 0 - } - - function calculateMarkerRoute() - { - routeQuery.clearWaypoints(); - for (var i = currentMarker; i< map.markers.length; i++){ - routeQuery.addWaypoint(markers[i].coordinate) - } - routeQuery.travelModes = RouteQuery.CarTravel - routeQuery.routeOptimizations = RouteQuery.ShortestRoute - routeQuery.setFeatureWeight(0, 0) - routeModel.update(); - } - - function calculateCoordinateRoute(startCoordinate, endCoordinate) - { - //! [routerequest0] - // clear away any old data in the query - routeQuery.clearWaypoints(); - - // add the start and end coords as waypoints on the route - routeQuery.addWaypoint(startCoordinate) - routeQuery.addWaypoint(endCoordinate) - routeQuery.travelModes = RouteQuery.CarTravel - routeQuery.routeOptimizations = RouteQuery.FastestRoute - - //! [routerequest0] - - //! [routerequest0 feature weight] - for (var i=0; i<9; i++) { - routeQuery.setFeatureWeight(i, 0) - } - //for (var i=0; i<routeDialog.features.length; i++) { - // map.routeQuery.setFeatureWeight(routeDialog.features[i], RouteQuery.AvoidFeatureWeight) - //} - //! [routerequest0 feature weight] - - //! [routerequest1] - routeModel.update(); - - //! [routerequest1] - //! [routerequest2] - // center the map on the start coord - map.center = startCoordinate; - //! [routerequest2] - } - - function geocode(fromAddress) - { - //! [geocode1] - // send the geocode request - geocodeModel.query = fromAddress - geocodeModel.update() - //! [geocode1] - } - - function updateCompass(heading) - { - compass.rotation = heading - 90 - } - -//! [coord] - zoomLevel: (maximumZoomLevel - minimumZoomLevel)/2 -//! [coord] - -//! [mapnavigation] - // Enable pan, flick, and pinch gestures to zoom in and out - gesture.acceptedGestures: MapGestureArea.PanGesture | MapGestureArea.FlickGesture | MapGestureArea.PinchGesture - gesture.flickDeceleration: 3000 - gesture.enabled: !map.followme -//! [mapnavigation] - focus: true - onCopyrightLinkActivated: Qt.openUrlExternally(link) - - onCenterChanged:{ - scaleTimer.restart() - } - - onZoomLevelChanged:{ - scaleTimer.restart() - } - - onWidthChanged:{ - scaleTimer.restart() - } - - onHeightChanged:{ - scaleTimer.restart() - } - - Component.onCompleted: { - markers = new Array(); - mapItems = new Array(); - } - - Keys.onPressed: { - if (event.key === Qt.Key_Plus) { - map.zoomLevel++; - } else if (event.key === Qt.Key_Minus) { - map.zoomLevel--; - } else if (event.key === Qt.Key_Left || event.key === Qt.Key_Right || - event.key === Qt.Key_Up || event.key === Qt.Key_Down) { - var dx = 0; - var dy = 0; - - switch (event.key) { - - case Qt.Key_Left: dx = map.width / 4; break; - case Qt.Key_Right: dx = -map.width / 4; break; - case Qt.Key_Up: dy = map.height / 4; break; - case Qt.Key_Down: dy = -map.height / 4; break; - - } - - var mapCenterPoint = Qt.point(map.width / 2.0 - dx, map.height / 2.0 - dy); - map.center = map.toCoordinate(mapCenterPoint); - } - } - - /* @todo - Binding { - target: map - property: 'center' - when: followme - }*/ - - MapQuickItem { - id: locationPoint - sourceItem: Image { - id: compass - width: 100 * (map.zoomLevel / map.maximumZoomLevel) - height: 50 * (map.zoomLevel / map.maximumZoomLevel) - source: "../resources/car.png" - } - coordinate: location - opacity: 1.0 - anchorPoint: Qt.point(sourceItem.width/2, sourceItem.height/2) - } - - Slider { - id: zoomSlider; - z: map.z + 3 - minimumValue: map.minimumZoomLevel; - maximumValue: map.maximumZoomLevel; - anchors.margins: 10 - anchors.bottom: scale.top - anchors.top: parent.top - anchors.right: parent.right - orientation : Qt.Vertical - value: map.zoomLevel - onValueChanged: { - if (value >= 0) - map.zoomLevel = value - } - } - - GridLayout { - z: map.z + 3 - columns: 1 - width: 300 - height: 300 - - ToggleButton { - id: followme - text: "GeoLocation Pan" - checked: map.followme - Layout.fillWidth: true - Layout.fillHeight: true - onClicked: { - map.followme = !map.followme - } - } - - Button { - text: "Lookup Route" - Layout.fillWidth: true - Layout.fillHeight: true - onClicked: { - stackView.pop({item:page, immediate: true}) - stackView.push(Qt.resolvedUrl("../forms/RouteAddress.qml"), - { "plugin": map.plugin, - "toAddress": toAddress, - "fromCoordinate": map.location}) - stackView.currentItem.showRoute.connect(map.calculateCoordinateRoute) - stackView.currentItem.showMessage.connect(stackView.showMessage) - stackView.currentItem.closeForm.connect(stackView.closeForm) - } - } - - Button { - text: "Reverse GeoCode" - Layout.fillWidth: true - Layout.fillHeight: true - onClicked: { - stackView.pop({item:page, immediate: true}) - stackView.push(Qt.resolvedUrl("../forms/ReverseGeocode.qml"), - { "coordinate": map.location}) - stackView.currentItem.showPlace.connect(map.geocode) - stackView.currentItem.closeForm.connect(stackView.closeForm) - } - } - - Button { - text: "Show Route List" - Layout.fillWidth: true - Layout.fillHeight: true - onClicked: { - stackView.showRouteListPage() - } - } - - Button { - text: "Clear Route" - Layout.fillWidth: true - Layout.fillHeight: true - enabled: map.routeModel.count - onClicked: { - map.routeModel.reset(); - map.zoomLevel = map.maximumZoomLevel - map.center = map.location - } - } - } - - Item { - id: scale - z: map.z + 3 - visible: scaleText.text != "0 m" - anchors.bottom: parent.bottom; - anchors.right: parent.right - anchors.margins: 20 - height: scaleText.height * 2 - width: scaleImage.width - - Image { - id: scaleImageLeft - source: "../resources/scale_end.png" - anchors.bottom: parent.bottom - anchors.right: scaleImage.left - } - Image { - id: scaleImage - source: "../resources/scale.png" - anchors.bottom: parent.bottom - anchors.right: scaleImageRight.left - } - Image { - id: scaleImageRight - source: "../resources/scale_end.png" - anchors.bottom: parent.bottom - anchors.right: parent.right - } - Label { - id: scaleText - color: "#004EAE" - anchors.centerIn: parent - text: "0 m" - } - Component.onCompleted: { - map.calculateScale(); - } - } - - //! [routemodel0] - RouteModel { - id: routeModel - plugin : map.plugin - query: RouteQuery { - id: routeQuery - } - onStatusChanged: { - if (status == RouteModel.Ready) { - switch (count) { - case 0: - // technically not an error - map.routeError() - break - case 1: - map.showRouteList() - break - } - } else if (status == RouteModel.Error) { - map.routeError() - } - } - } - //! [routemodel0] - - //! [routedelegate0] - Component { - id: routeDelegate - - MapRoute { - id: route - route: routeData - line.color: "#46a2da" - line.width: 5 - smooth: true - opacity: 0.8 - //! [routedelegate0] - MouseArea { - id: routeMouseArea - anchors.fill: parent - hoverEnabled: false - property variant lastCoordinate - - onPressed : { - map.lastX = mouse.x + parent.x - map.lastY = mouse.y + parent.y - map.pressX = mouse.x + parent.x - map.pressY = mouse.y + parent.y - lastCoordinate = map.toCoordinate(Qt.point(mouse.x, mouse.y)) - } - - onPositionChanged: { - if (mouse.button == Qt.LeftButton) { - map.lastX = mouse.x + parent.x - map.lastY = mouse.y + parent.y - } - } - - onPressAndHold:{ - if (Math.abs(map.pressX - parent.x- mouse.x ) < map.jitterThreshold - && Math.abs(map.pressY - parent.y - mouse.y ) < map.jitterThreshold) { - showRouteMenu(lastCoordinate); - } - } - - } - //! [routedelegate1] - } - } - //! [routedelegate1] - - //! [geocodemodel0] - GeocodeModel { - id: geocodeModel - plugin: map.plugin - onStatusChanged: { - if ((status == GeocodeModel.Ready) || (status == GeocodeModel.Error)) - map.geocodeFinished() - } - onLocationsChanged: - { - if (count == 1) { - map.center.latitude = get(0).coordinate.latitude - map.center.longitude = get(0).coordinate.longitude - } - } - } - //! [geocodemodel0] - - //! [pointdel0] - Component { - id: pointDelegate - - MapCircle { - id: point - color: "#46a2da" - border.color: "#190a33" - border.width: 2 - smooth: true - opacity: 0.25 - center: locationData.coordinate - //! [pointdel0] - MouseArea { - anchors.fill:parent - id: circleMouseArea - hoverEnabled: false - property variant lastCoordinate - - onPressed : { - map.lastX = mouse.x + parent.x - map.lastY = mouse.y + parent.y - map.pressX = mouse.x + parent.x - map.pressY = mouse.y + parent.y - lastCoordinate = map.toCoordinate(Qt.point(mouse.x, mouse.y)) - } - - onPositionChanged: { - if (Math.abs(map.pressX - parent.x- mouse.x ) > map.jitterThreshold || - Math.abs(map.pressY - parent.y -mouse.y ) > map.jitterThreshold) { - if (pressed) parent.radius = parent.center.distanceTo( - map.toCoordinate(Qt.point(mouse.x, mouse.y))) - } - if (mouse.button == Qt.LeftButton) { - map.lastX = mouse.x + parent.x - map.lastY = mouse.y + parent.y - } - } - - onPressAndHold:{ - if (Math.abs(map.pressX - parent.x- mouse.x ) < map.jitterThreshold - && Math.abs(map.pressY - parent.y - mouse.y ) < map.jitterThreshold) { - showPointMenu(lastCoordinate); - } - } - } - //! [pointdel1] - } - } - //! [pointdel1] - - //! [routeview0] - MapItemView { - model: routeModel - delegate: routeDelegate - //! [routeview0] - autoFitViewport: true - //! [routeview1] - } - //! [routeview1] - - //! [geocodeview] - MapItemView { - model: geocodeModel - delegate: pointDelegate - } - //! [geocodeview] - - Timer { - id: scaleTimer - interval: 100 - running: false - repeat: false - onTriggered: { - map.calculateScale() - } - } - - MouseArea { - id: mouseArea - property variant lastCoordinate - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - - onPressed : { - map.lastX = mouse.x - map.lastY = mouse.y - map.pressX = mouse.x - map.pressY = mouse.y - lastCoordinate = map.toCoordinate(Qt.point(mouse.x, mouse.y)) - } - - onPositionChanged: { - if (mouse.button == Qt.LeftButton) { - map.lastX = mouse.x - map.lastY = mouse.y - } - } - - onDoubleClicked: { - var mouseGeoPos = map.toCoordinate(Qt.point(mouse.x, mouse.y)); - var preZoomPoint = map.fromCoordinate(mouseGeoPos, false); - if (mouse.button === Qt.LeftButton) { - map.zoomLevel++; - } else if (mouse.button === Qt.RightButton) { - map.zoomLevel--; - } - var postZoomPoint = map.fromCoordinate(mouseGeoPos, false); - var dx = postZoomPoint.x - preZoomPoint.x; - var dy = postZoomPoint.y - preZoomPoint.y; - - var mapCenterPoint = Qt.point(map.width / 2.0 + dx, map.height / 2.0 + dy); - map.center = map.toCoordinate(mapCenterPoint); - - lastX = -1; - lastY = -1; - } - - onPressAndHold:{ - if (Math.abs(map.pressX - mouse.x ) < map.jitterThreshold - && Math.abs(map.pressY - mouse.y ) < map.jitterThreshold) { - showMainMenu(lastCoordinate); - } - } - } -//! [end] -} -//! [end] |