You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.6 KiB
114 lines
3.6 KiB
/**************************************************************************** |
|
* |
|
* (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
|
|
|