|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
|
|
|
*
|
|
|
|
* QGroundControl is licensed according to the terms in the file
|
|
|
|
* COPYING.md in the root of the source code directory.
|
|
|
|
*
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* @brief QGC Map Background
|
|
|
|
* @author Gus Grubba <mavlink@grubba.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
import QtQuick 2.3
|
|
|
|
import QtQuick.Controls 1.2
|
|
|
|
import QtLocation 5.3
|
|
|
|
import QtPositioning 5.3
|
|
|
|
|
|
|
|
import QGroundControl 1.0
|
|
|
|
import QGroundControl.FactSystem 1.0
|
|
|
|
import QGroundControl.Controls 1.0
|
|
|
|
import QGroundControl.FlightMap 1.0
|
|
|
|
import QGroundControl.ScreenTools 1.0
|
|
|
|
import QGroundControl.MultiVehicleManager 1.0
|
|
|
|
import QGroundControl.Vehicle 1.0
|
|
|
|
import QGroundControl.Mavlink 1.0
|
|
|
|
|
|
|
|
Map {
|
|
|
|
id: _map
|
|
|
|
|
|
|
|
property string mapName: 'defaultMap'
|
|
|
|
property bool isSatelliteMap: activeMapType.name.indexOf("Satellite") > -1 || activeMapType.name.indexOf("Hybrid") > -1
|
|
|
|
|
|
|
|
readonly property real maxZoomLevel: 20
|
|
|
|
property variant scaleLengths: [5, 10, 25, 50, 100, 150, 250, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000]
|
|
|
|
|
|
|
|
function formatDistance(meters)
|
|
|
|
{
|
|
|
|
var dist = Math.round(meters)
|
|
|
|
if (dist > 1000 ){
|
|
|
|
if (dist > 100000){
|
|
|
|
dist = Math.round(dist / 1000)
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
dist = Math.round(dist / 100)
|
|
|
|
dist = dist / 10
|
|
|
|
}
|
|
|
|
dist = dist + " km"
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
dist = dist + " m"
|
|
|
|
}
|
|
|
|
return dist
|
|
|
|
}
|
|
|
|
|
|
|
|
function setVisibleRegion(region) {
|
|
|
|
// This works around a bug on Qt where if you set a visibleRegion and then the user moves or zooms the map
|
|
|
|
// and then you set the same visibleRegion the map will not move/scale appropriately since it thinks there
|
|
|
|
// is nothing to do.
|
|
|
|
_map.visibleRegion = QtPositioning.rectangle(QtPositioning.coordinate(0, 0), QtPositioning.coordinate(0, 0))
|
|
|
|
_map.visibleRegion = region
|
|
|
|
}
|
|
|
|
|
|
|
|
zoomLevel: 18
|
|
|
|
center: QGroundControl.lastKnownHomePosition
|
|
|
|
gesture.flickDeceleration: 3000
|
|
|
|
|
|
|
|
plugin: Plugin { name: "QGroundControl" }
|
|
|
|
|
|
|
|
ExclusiveGroup { id: mapTypeGroup }
|
|
|
|
|
|
|
|
property bool _initialMapPositionSet: false
|
|
|
|
|
|
|
|
Connections {
|
|
|
|
target: mainWindow
|
|
|
|
onGcsPositionChanged: {
|
|
|
|
if (!_initialMapPositionSet) {
|
|
|
|
_initialMapPositionSet = true
|
|
|
|
center = mainWindow.gcsPosition
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateActiveMapType() {
|
|
|
|
var fullMapName = QGroundControl.flightMapSettings.mapProvider + " " + QGroundControl.flightMapSettings.mapType
|
|
|
|
for (var i = 0; i < _map.supportedMapTypes.length; i++) {
|
|
|
|
if (fullMapName === _map.supportedMapTypes[i].name) {
|
|
|
|
_map.activeMapType = _map.supportedMapTypes[i]
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Component.onCompleted: updateActiveMapType()
|
|
|
|
|
|
|
|
Connections {
|
|
|
|
target: QGroundControl.flightMapSettings
|
|
|
|
onMapTypeChanged: updateActiveMapType()
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Ground Station location
|
|
|
|
MapQuickItem {
|
|
|
|
anchorPoint.x: sourceItem.anchorPointX
|
|
|
|
anchorPoint.y: sourceItem.anchorPointY
|
|
|
|
visible: mainWindow.gcsPosition.isValid
|
|
|
|
coordinate: mainWindow.gcsPosition
|
|
|
|
sourceItem: MissionItemIndexLabel {
|
|
|
|
label: "Q"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} // Map
|