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.
222 lines
5.5 KiB
222 lines
5.5 KiB
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" |
|
|
|
<html> |
|
<head> |
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> |
|
<!-- <head> --> |
|
<!-- QGroundControl --> |
|
<title>QGroundControl Google Earth View</title> |
|
<!-- *** Replace the key below below with your own API key, available at http://code.google.com/apis/maps/signup.html *** --> |
|
<script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAwbkbZLyhsmTCWXbTcjbgbRSzHs7K5SvaUdm8ua-Xxy_-2dYwMxQMhnagaawTo7L1FE1-amhuQxIlXw"></script> |
|
<script type="text/javascript"> |
|
google.load("earth", "1", { 'language': 'en'}); |
|
|
|
var ge = null; |
|
var initialized = false; |
|
var aircraft = new Array(); |
|
var currAircraft = 220; |
|
var followAircraft = false; |
|
var currLat = 47.3769; |
|
var currLon = 8.549444; |
|
var currAlt = 470; |
|
|
|
var homeLat = 0; |
|
var homeLon = 0; |
|
var homeAlt = 0; |
|
var homeViewRange = 500; |
|
var homeLocation = null; |
|
var homeGroundLevel = 0; |
|
|
|
var currViewRange = 3.0; ///<< The current viewing range from this position (in meters) |
|
var currTilt = 40.0; ///<< The tilt angle (in degrees) |
|
var currFollowTilt = 40.0; |
|
var currView = null; |
|
|
|
|
|
|
|
var planeOrient; |
|
var planeLoc; |
|
|
|
|
|
// Aircraft class |
|
|
|
|
|
function isInitialized() |
|
{ |
|
return initialized; |
|
} |
|
|
|
|
|
function init() { |
|
google.earth.createInstance("map3d", initCallback, failureCallback); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
function setGCSHome(lat, lon, alt) |
|
{ |
|
homeLat = lat; |
|
homeLon = lon; |
|
homeAlt = alt; |
|
|
|
|
|
|
|
var placemark = ge.createPlacemark(''); |
|
var icon = ge.createIcon(''); |
|
icon.setHref('http://google-maps-icons.googlecode.com/files/blackH.png'); |
|
var style = ge.createStyle(''); |
|
style.getIconStyle().setIcon(icon); |
|
//style.getIconStyle().setScale(0.5); |
|
placemark.setStyleSelector(style); |
|
|
|
// Set the placemark's location. |
|
homeLocation = ge.createPoint(''); |
|
homeLocation.setLatitude(lat); |
|
homeLocation.setLongitude(lon); |
|
homeLocation.setAltitude(alt); |
|
placemark.setGeometry(homeLocation); |
|
|
|
// Add the placemark to Earth. |
|
ge.getFeatures().appendChild(placemark); |
|
|
|
homeGroundLevel = ge.getGlobe().getGroundAltitude(lat,lon); |
|
if (homeGroundLevel == 0) |
|
{ |
|
homeGroundLevel = alt; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
goHome(); |
|
} |
|
|
|
function initCallback(object) |
|
{ |
|
ge = object; |
|
ge.getWindow().setVisibility(true); |
|
ge.getOptions().setStatusBarVisibility(true); |
|
ge.getOptions().setScaleLegendVisibility(true); |
|
ge.getOptions().setFlyToSpeed(ge.SPEED_TELEPORT); |
|
ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO); |
|
|
|
ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true); |
|
ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true); |
|
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true); |
|
ge.getLayerRoot().enableLayerById(ge.LAYER_TREES, true); |
|
|
|
// Now after the Google Earth initialization, initialize the GCS view |
|
setGCSHome(currLat, currLon, currAlt); |
|
|
|
|
|
// Create the first aircraft model |
|
// Load 3D model |
|
var planePlacemark = ge.createPlacemark(''); |
|
planePlacemark.setName('aircraft'); |
|
planeModel = ge.createModel(''); |
|
ge.getFeatures().appendChild(planePlacemark); |
|
planeLoc = ge.createLocation(''); |
|
planeModel.setLocation(planeLoc); |
|
planeLink = ge.createLink(''); |
|
planeOrient = ge.createOrientation(''); |
|
planeModel.setOrientation(planeOrient); |
|
|
|
planeLink.setHref('http://qgroundcontrol.org/_media/users/models/multiplex-twinstar.dae'); |
|
planeModel.setLink(planeLink); |
|
planeModel.setAltitudeMode (ge.ALTITUDE_ABSOLUTE); |
|
|
|
planeLoc.setLatitude(currLat); |
|
planeLoc.setLongitude(currLon); |
|
planeLoc.setAltitude(currAlt); |
|
|
|
planePlacemark.setGeometry(planeModel); |
|
|
|
setAircraftPositionAttitude(220, 47.3772, currLon, currAlt+50, 20, 15, 50); |
|
enableFollowing(true); |
|
updateFollowAircraft(); |
|
initialized = true; |
|
|
|
|
|
} |
|
|
|
function setAircraftPositionAttitude(id, lat, lon, alt, roll, pitch, yaw) |
|
{ |
|
if (id == currAircraft) |
|
{ |
|
currLat = lat; |
|
currLon = lon; |
|
currAlt = alt; |
|
} |
|
|
|
planeOrient.setRoll(roll); |
|
planeOrient.setTilt(pitch); |
|
planeOrient.setHeading(yaw); |
|
|
|
|
|
|
|
planeLoc.setLatitude(lat); |
|
planeLoc.setLongitude(lon); |
|
planeLoc.setAltitude(alt); |
|
|
|
} |
|
|
|
function goHome() |
|
{ |
|
var currView = ge.getView().copyAsLookAt(ge.ALTITUDE_ABSOLUTE); |
|
currView.setLatitude(homeLat); |
|
currView.setLongitude(homeLon); |
|
currView.setAltitude(homeAlt); |
|
currView.setRange(homeViewRange); |
|
currView.setTilt(currTilt); |
|
ge.getView().setAbstractView(currView); |
|
} |
|
|
|
function setCurrentAircraft(id) |
|
{ |
|
currAircraft = id; |
|
} |
|
|
|
function enableFollowing(follow) |
|
{ |
|
followEnabled = follow; |
|
} |
|
|
|
|
|
function updateFollowAircraft() |
|
{ |
|
if (followEnabled) |
|
{ |
|
currView = ge.getView().copyAsLookAt(ge.ALTITUDE_ABSOLUTE); |
|
currView.setLatitude(currLat); |
|
currView.setLongitude(currLon); |
|
currView.setAltitude(currAlt); |
|
currView.setRange(currViewRange); |
|
currView.setTilt(currFollowTilt); |
|
ge.getView().setAbstractView(currView); |
|
} |
|
} |
|
|
|
function failureCallback(object) |
|
{ |
|
} |
|
</script> |
|
|
|
|
|
<style type="text/css"> |
|
html, body { |
|
margin: 0; |
|
width: 100%; |
|
height: 100%; |
|
} |
|
</style> |
|
</head> |
|
<body onload='init()' id='body'> |
|
<center> |
|
<div id='map3d' style='margin: 0; spacing: 0; height: 100%; width: 100%'></div> |
|
</center> |
|
</body> |
|
</html>
|
|
|