一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Google Earth API開發(fā)者指南

 sanxuxbr 2010-11-09
第一個小程序——“Hello World”

  記得在學校上編程課時,無論是Basic還是C,課本第一個示 例都是“Hello World”。今天,我們開始學習Google Earth API,仍然以這個最 簡單的小示例開始。下列JavaScript源代碼教您如何創(chuàng)建一個包含Google Earth的網(wǎng) 頁。

<html>
<head>
<title>Hello Google Earth!</title>
<!-- *** Replace the key below below with your own API key, available athttp://code.google.com/apis/maps/signup.html *** -- >
<script src="http://www.google.com/jsapikey=ABCDEF";></script >
<script>
google.load("earth", "1");

var ge = null;

function init() {
google.earth.createInstance("map3d", initCallback, failureCallback);
}

function initCallback(object) {
ge = object;
ge.getWindow().setVisibility(true);
}

function failureCallback(object) {
}

</script>
</head>
<body onload= init() ;

<div>
Hello, Earth!
</div>

<div id= map3d_container 
style= border: 1px solid silver; height: 600px; width: 800px; >
<div id= map3d  style= height: 100%; ></div>
</div>
</body>
</html>

  您可以直接把這段代碼復制下來,把里面的“Key”換成您 自己申請的Key值(詳見序)。如果您不方便申請Key,又想看看這段源代碼的運行效 果,那么也沒關(guān)系,您可以點擊查看這個鏈接(http://www.google.com/earth/plugin/examples/helloearth/)——前提是您必須已安裝了Google Earth插件。

  上面這段代碼中,您需要注意四個方面(上述代碼中已用綠 色粗體字顯示):
  Google Earth API腳本語句必須包含script標簽,即“<script>”。 
  用div標簽把Google Earth窗口框起來。
  用JavaScript函數(shù)來創(chuàng)建Google Earth對象。
  在body標簽的onLoad事件來初始化Google Earth對象。

  下面就對上述要點做一簡單說明:

  加載Google Earth API

  <script src="http://www.google.com/jsapikey=ABCDEF";></script >

  想必大家都已經(jīng)知道,在編寫Google Earth網(wǎng)頁時,必須先 申請key。http://www.google.com/jsapikey=ABCDEF是一個鏈接,鏈接 那一頭包含了您要使用Google Earth API所需要的所有Javascript元件、標簽和定 義文件。此例中key值為假設(shè)值“ABCDEF”。

  DOM

  <div id= map3d_container 
  style= border: 1px solid silver; height: 600px; width: 800px; >
  <div id= map3d  style= height: 100%; ></div>
  </div>

  由于要在網(wǎng)頁上顯示Google Earth窗口,所以必須給它留 些位置。這人“位置”就是用已命名的div標簽來創(chuàng)建,并以此來獲取瀏覽器文檔對 象模型的參考。在這個示例中,div標簽被命名為“map_3d_container”,其長寬均 由相應屬性設(shè)定。

  加載Google Earth

  <body onload= init()  id= body >

  當HTML頁面編譯時,文檔對象模型(DOM)以及所有外部圖 像、腳本均被融合到文檔(document)對象中。為了確保頁面完全加載后地圖能顯示 在指定位置,我們可以單步調(diào)試,當<body>標簽內(nèi)的onLoad事件被觸發(fā)時,僅 執(zhí)行g(shù)e對象的函數(shù),仔細觀察運行效果。這樣做是為了避免不確定因素或人為失誤, 使我們對地圖的繪制與顯示得以掌控。

  創(chuàng)建地標

  地標是Google Earth里最常用的功能之一,它用一顆小圖 釘來表示地標制作/發(fā)布者的指定方位。您可以對地標進行編輯——修改名稱或圖標 ,也可以加入其他地理屬性一。下列代碼創(chuàng)建了一個地標,該地標位于Google位于美 國硅谷總部的園區(qū)。

var placemark = ge.createPlacemark(  );
placemark.setName("You are at Google");
ge.getFeatures().appendChild(placemark);

// Create style map for placemark
var normal = ge.createIcon(  );
normal.setHref( http://maps.google.com/mapfiles/kml/paddle/red- circle.png );
var iconNormal = ge.createStyle(  );
iconNormal.getIconStyle().setIcon(normal);
var highlight = ge.createIcon(  );
highlight.setHref( http://maps.google.com/mapfiles/kml/paddle/red- circle.png );
var iconHighlight = ge.createStyle(  );
iconHighlight.getIconStyle().setIcon(highlight);
var styleMap = ge.createStyleMap(  );
styleMap.setNormalStyle(iconNormal);
styleMap.setHighlightStyle(iconHighlight);
placemark.setStyleSelector(styleMap);

// Create point
var la = ge.getView().copyAsLookAt (ge.ALTITUDE_RELATIVE_TO_GROUND);
var point = ge.createPoint(  );
point.setLatitude(la.getLatitude());
point.setLongitude(la.getLongitude());
placemark.setGeometry(point);

  地標效果如下圖所示

  

  創(chuàng)建地標過程中,您必須指定兩項內(nèi)容:

  地標名稱。上例中,地標名稱為“You are at Google”。

  地標位置。即明確的經(jīng)緯度和任意海撥。上例中,經(jīng)緯度由 “LookAt”指定(“LookAt”用來定義視角,即瀏覽地標的方向、角度、高度)。

  創(chuàng)建氣泡提示

  創(chuàng)建地標之后,您可以添加一個“氣泡提示”,對地標加以 說明。“氣泡提示”完全支持HTML格式,也就是說,說明內(nèi)容可以包含文本、圖片、 表格、超鏈接等。目前“氣泡”有三種類型:

  特征氣泡
  文字氣泡
  DIV氣泡
  下列代碼將創(chuàng)建一個特征氣泡:
  var b = ge.createFeatureBalloon(  );
  b.setFeature(marker);
  b.setMaxWidth(800);
  ge.setBalloon(b);

  下列代碼將創(chuàng)建一個文字氣泡,文字顯示為珠穆朗瑪峰,字 體設(shè)為粗體大號:

  var b = ge.createHtmlStringBalloon(  );
  b.setMaxWidth(300);
  b.setFeature(feature);
  b.setContentString (
   <b.setContentString (
   <img src="http://www.google.com/intl/en_ALL/images/logo.gif";> ;  +
   <font size=20>Mount Everest</font><br><font size=-2>on top of the world   +  window</font> ); 
  ge.setBalloon(b);

  效果如下圖所示:

  

  下列代碼將創(chuàng)建DIV 氣泡:

  var b = ge.createHtmlDivBalloon(  );
  b.setMaxWidth(800);
  b.setFeature(feature);
  var div = document.createElement( DIV );
  div.innerHTML =
 <img src="http://www.google.com/googlegulp/images/logo.gif";> <br> 
+  <a href="http://www.google.com/googlegulp/";>Google Gulp</a> ;
  b.setContentDiv(div);
  ge.setBalloon(b);

  您可以通過改變字體、文字顏色、圖片以及排版格式來進 行自定義。如果要關(guān)閉說明框,可以用下面這條Javascript語句:ge.setBalloon (null);

  如何控制游覽視角

  您可以用LookAt對象來指定Google Earth察看點、察看距離 及角度。下例代碼把察看位置向北移動7度(經(jīng)度),向東移動7度(緯度)。
  var lookAt = ge.getView().copyAsLookAt (ge.ALTITUDE_RELATIVE_TO_GROUND);
  lookAt.setLatitude(lookAt.getLatitude() + 7.0);
  lookAt.setLongitude(lookAt.getLongitude() + 7.0);
  ge.getView().setAbstractView(lookAt);

  創(chuàng)建路徑

  在Google Earth內(nèi)可創(chuàng)建多種類型的路徑,并且可根據(jù)您 的數(shù)據(jù)進行定制。路徑由“lineString”對象創(chuàng)建,可以通過定義一串連續(xù)的線段來 創(chuàng)建彎折路徑。當使用lineString對象時,您必須指定lineString是否與地面相連。 Tessellate屬性可以將直線分割成若干線段。

  var lineString;
  lineString = ge.createLineString(  );
  var lineStringPlacemark = ge.createPlacemark(  );
  lineStringPlacemark.setGeometry(lineString);
  lineString.setTessellate(true);
  ge.getDocument().getFeatures().appendChild(lineStringPlacemark);

  addToLineString(lineString, 0, 0, 0);
  addToLineString(lineString, .1, .05, 0);
  addToLineString(lineString, 0, .10, 0);
  addToLineString(lineString, .1, .15, 0);
  addToLineString(lineString, 0, .20, 0);
  addToLineString(lineString, .1, .25, 0);

  下圖即為Google Earth中創(chuàng)建的路徑:

  

  改變路徑樣式

  可以通過指定顏色和寬度來確定路徑樣式。下列JavaScript 代碼針對上述路徑,增加了線條寬度,并把顏色改為藍色。樣式更改后效果如下圖所 示。
  var lineStyle = lineStringPlacemark.getStyleSelector ().getLineStyle();
  lineStyle.setWidth(lineStyle.getWidth() + 2);
  lineStyle.getColor().set( 66ff0000 );

  

  創(chuàng)建多邊形

  您可以通過多邊形功能來創(chuàng)建房屋或其他形狀。下列代碼, 創(chuàng)建了一個矩形,其內(nèi)外邊框均設(shè)為白色。
  var polygonPlacemark = ge.createPlacemark(  );
  polygonPlacemark.setGeometry(ge.createPolygon(  ));
  var outer = ge.createLinearRing(  );
  polygonPlacemark.getGeometry().setOuterBoundary(outer);
  ge.getDocument().getFeatures().appendChild(polygonPlacemark);

  // Square outer boundary
  var center = ge.createLookAt(  );
  center = ge.getView().copyAsLookAt (ge.ALTITUDE_RELATIVE_TO_GROUND);
  var coords = outer.getCoordinates();
  var lat = center.getLatitude();
  var lon = center.getLongitude();
  coords.pushLatLngAlt(lat - .05, lon - .05, 0); 
  coords.pushLatLngAlt(lat - .05, lon + .05, 0); 
  coords.pushLatLngAlt(lat + .05, lon + .05, 0); 
  coords.pushLatLngAlt(lat + .05, lon - .05, 0); 

  // Create a square inner boundary
  polygonPlacemark.getGeometry().getInnerBoundaries().
  appendChild(ge.createLinearRing(  ));
  coords = polygonPlacemark.getGeometry().getInnerBoundaries ().getFirstChild().
  getCoordinates();
  coords.pushLatLngAlt(lat - .02, lon - .02, 0); 
  coords.pushLatLngAlt(lat - .02, lon + .02, 0); 
  coords.pushLatLngAlt(lat + .02, lon + .02, 0); 
  coords.pushLatLngAlt(lat + .02, lon - .02, 0);

  效果如下圖所示

  

  更改多邊形樣式

  跟路徑一樣,您可以通過改變顏色和邊框?qū)挾龋约涸O(shè)定多邊形樣式。見下例 ,把矩形邊設(shè)為紅色,邊框為藍色。
  var lineStyle = polygonPlacemark.getStyleSelector ().getLineStyle();
  lineStyle.setWidth(lineStyle.getWidth() + 2);
  lineStyle.getColor().set( 66ff0000 );
  polygonPlacemark.getStyleSelector().getPolyStyle().getColor().set ( 660000ff );

  

  使用在線地標

  在線地標,顧名思義,必然有一項屬性超鏈接,該鏈接指向 存放在網(wǎng)絡(luò)上的地標文件,包含以下三類:
  圖標文件、地面疊加圖、屏幕疊加圖。
  模型(SketchUp文件尤佳)。
  KML或KMZ文件。
  鏈接文件可以存放在本地,也可存放在遠程服務器上。在線地標的最大優(yōu)勢就 是可以方便有效地管理、使用大容量或更新頻繁的文件。如果在本地打開大容量地標 文件,那對機器硬件將是一大考驗。

  下列代碼將創(chuàng)建一款在線地標:

  svar networkLink = ge.createNetworkLink("");
  networkLink.setDescription("NetworkLink open to fetched content");
  networkLink.setName("Open NetworkLink");
  networkLink.setFlyToView(true); 
  var link = ge.createLink("");
  link.setHref("http://kml-samples."; +
"/svn/trunk/kml/NetworkLink/placemark.kml");
  networkLink.setLink(link);
  ge.getFeatures().appendChild(networkLink);

  管理事件

  JavaScript語言是基于事件驅(qū)動的,也就是說,事件的產(chǎn)生 將激發(fā)JavaScript作出反應,程序把結(jié)果反饋給用戶。例如,在瀏覽器內(nèi),用戶的鍵 盤、鼠標動作將觸發(fā)文檔對象模型(DOM)內(nèi)的事件。事件內(nèi)的代碼會先將其監(jiān)聽模 塊注冊,當事件激活/產(chǎn)生時,便立即執(zhí)行相關(guān)反饋代碼。

  Google Earth API的事件由GEvent命名空間里的函數(shù)來控制 的。每一個Google Earth API對象都對應若干事件。例如,“KmlPlacemark”對象 有“Click”(單擊),“dblclick”(雙擊),“move”(移動)等事件。每種事件都只 適應特定操作,比如,用戶在Google Earth里移動鼠標就會觸發(fā)“mousemove”事 件。在下列代碼中,您將看到事件是如何被管理的:

  function myEventListener(kmlEvent) {
  var targetType = kmlEvent.getTarget().getType();
  var currentTargetType = kmlEvent.getCurrentTarget().getType();
  var button = kmlEvent.getButton());
  var clientX = kmlEvent.getClientX();
  var clientY = kmlEvent.getClientY();
  var screenX = kmlEvent.getScreenX();
  var screenY = kmlEvent.getScreenY();
  var latitude = kmlEvent.getLatitude();
  var longitude = kmlEvent.getLongitude();
  var altitude = kmlEvent.getAltitude();
  var didHitGlobe = kmlEvent.getDidHitGlobe();
  var altKey = kmlEvent.getAltKey();
  var ctrlKey = kmlEvent.getCtrlKey();
  var shiftKey = kmlEvent.getShiftKey();
  var timeStamp = kmlEvent.getTimeStamp();
  }

  // This will trigger myEventListener() when user clicks on  placemark ,
  // and will pass in a KmlEvent object.
  google.earth.addEventListener(placemark, "mousedown", myEventListener);

  // This will trigger myEventListener() when user clicks on the globe,
  // and will pass in a KmlEvent object.
  google.earth.addEventListener(ge.getGlobe(), "mousedown", myEventListener);

  // This will trigger myEventListener() when user clicks anywhere in the window,
  // and will pass in a KmlEvent object.
  google.earth.addEventListener(ge.getWindow(), "mousedown", myEventListener);

=============================================================================

創(chuàng)建地面覆蓋

地面覆蓋,允許您在Google Earth的地表上放置圖像。其中,圖像源自網(wǎng)絡(luò),圖片的URL包含在“Icon”對象內(nèi)。


var groundOverlay = ge.createGroundOverlay(  );
groundOverlay.setIcon(ge.createIcon(  ))
groundOverlay.getIcon().
setHref("/UploadFiles/JCYY/2008/9/200809021708447490.gif");
groundOverlay.setLatLonBox(ge.createLatLonBox(  ));

var center = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
var north = center.getLatitude() + .85;
var south = center.getLatitude() - .85;
var east = center.getLongitude() + .55;
var west = center.getLongitude() - .55;
var rotation = 0;
var latLonBox = groundOverlay.getLatLonBox();
latLonBox.setBox(north, south, east, west, rotation);

ge.getFeatures().appendChild(groundOverlay);

此例中,Google的logo被疊放在加州總部山景城的位置。

地面覆蓋的特點是始終吸附在地表,無論圖像放在山脈還是河谷,如下圖所示:


創(chuàng)建屏幕覆蓋

屏幕覆蓋是指圖片固定在屏幕上,不像地面覆蓋那樣跟隨地表起伏而變化。屏幕覆蓋通常用來做logo、商標、圖例等,其長寬尺寸由size屬性決定。圖像位置(screenXY屬性)由圖中的安置點(overlayXY屬性)控制,其旋轉(zhuǎn)角度由rotationXY屬性決定。下列代碼將用Google標志圖來創(chuàng)建一個屏幕覆蓋,并傾斜一定角度。


var screenOverlay = ge.createScreenOverlay(  );
screenOverlay.setIcon(ge.createIcon(  ));
screenOverlay.getIcon().
setHref("/UploadFiles/JCYY/2008/9/200809021708447490.gif");

// Set screen position in pixels
screenOverlay.getOverlayXY().setXUnits(ge.UNITS_PIXELS);
screenOverlay.getOverlayXY().setYUnits(ge.UNITS_PIXELS);
screenOverlay.getOverlayXY().setX(400);
screenOverlay.getOverlayXY().setY(200);

// Rotate around object s center point
screenOverlay.getRotationXY().setXUnits(ge.UNITS_FRACTION);
screenOverlay.getRotationXY().setYUnits(ge.UNITS_FRACTION);
screenOverlay.getRotationXY().setX(0.5);
screenOverlay.getRotationXY().setY(0.5);

// Set object s size in pixels
screenOverlay.getSize().setXUnits(ge.UNITS_PIXELS);
screenOverlay.getSize().setYUnits(ge.UNITS_PIXELS);
screenOverlay.getSize().setX(300);
screenOverlay.getSize().setY(75);

// Rotate 45 degrees
screenOverlay.setRotation(45);

ge.getFeatures().appendChild(screenOverlay);

效果如下圖所示:


樣式地圖

樣式地圖在一般情況為地標下提供兩種狀態(tài):普通狀態(tài)和高亮狀態(tài),分別由兩種圖標來表示,當用戶在Google Earth中用鼠標在地標圖案上經(jīng)過時,圖案會自動切換至高亮狀態(tài)。
下例代碼中,地標在普通狀態(tài)時,圖案為三角形,當鼠標在地標上方經(jīng)過時,其圖案變?yōu)榫匦巍?/p>


map = ge.createStyleMap( styleMap  + counter);

// Create icon normal for style map
normal = ge.createIcon(  );
normal.setHref( /UploadFiles/JCYY/2008/9/200809021709148777.png );
iconNormal = ge.createStyle( styleIconNormal  + counter);
iconNormal.getIconStyle().setIcon(normal);

// Create icon highlight for style map
highlight = ge.createIcon(  );
highlight.setHref( /UploadFiles/JCYY/2008/9/200809021709154050.png );
iconHighlight = ge.createStyle( styleIconHighlight  + counter);
iconHighlight.getIconStyle().setIcon(highlight);

// Set normal and highlight for stylemap
map.setNormalStyleUrl( #styleIconNormal  + counter);
map.setHighlightStyleUrl( #styleIconHighlight  + counter);

// Apply to placemark
placemark.setStyleUrl( #styleMap  + counter);
}


管理地形、道路、邊界

當瀏覽器窗口加載Google Earth插件時,地形特征將被作為默認選項被顯示,無需手動干預。并不是所有Google Earth圖層特性被顯示出來,如果要在瀏覽器內(nèi)顯示,那么下列JavaScript代碼將教您怎么做:


顯示建筑三維模型
ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
隱藏建筑三維模型
ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, false);

顯示邊界
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
隱藏邊界
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, false);

顯示地形
ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true);
隱藏地形
ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, false);


KML分析

如果您手上有一段KML代碼,那么就可以讓Google Earth插件對其進行分析——用ge.parseKml對象把KML轉(zhuǎn)換成JavaScript。示例代碼如下:


var pentagon = ge.parseKml(
<?xml version="1.0" encoding="UTF-8"?>  +
<kml xmlns="http://earth.google.com/kml/2.1">  +
<Placemark>  +
<name>The Pentagon</name>  +
<Polygon>  +
<extrude>1</extrude>  +
<altitudeMode>relativeToGround</altitudeMode>  +
<outerBoundaryIs>  +
<LinearRing>  +
<coordinates>  +
-77.05788457660967,38.87253259892824,100   +
-77.05465973756702,38.87291016281703,100   +
-77.05315536854791,38.87053267794386,100   +
-77.05552622493516,38.868757801256,100   +
-77.05844056290393,38.86996206506943,100   +
-77.05788457660967,38.87253259892824,100  +
</coordinates>  +
</LinearRing>  +
</outerBoundaryIs>  +
<innerBoundaryIs>  +
<LinearRing>  +
<coordinates>  +
-77.05668055019126,38.87154239798456,100   +
-77.05542625960818,38.87167890344077,100   +
-77.05485125901024,38.87076535397792,100   +
-77.05577677433152,38.87008686581446,100   +
-77.05691162017543,38.87054446963351,100   +
-77.05668055019126,38.87154239798456,100  +
</coordinates>  +
</LinearRing>  +
</innerBoundaryIs>  +
</Polygon>  +
</Placemark>  +
</kml> );

ge.getFeatures().appendChild(pentagon);

var la = ge.createLookAt(  );
la.set(38.867, -77.0565, 500, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 900);
ge.getView().setAbstractView(la);

上述代碼效果如下圖所示:


察看模型

Google Earth插件支持立體模型(三維場景)。把三維模型導入Google Earth后,會自動轉(zhuǎn)換格式、旋轉(zhuǎn)角度、伸縮大小,以適應Google Earth的坐標系統(tǒng)。
下列代碼將加載一個Collada模型,并將其顯示出來。(注:COLLADA的全名是“COLLAborative Design Activity”,是用來建立3D互動程序的一個文件格式,而此格式就叫做“dae”,全名是“digital asset exchange”。COLLADA主要定義一個開放式的XML Schema標準。也就是說,你在3D軟件所建好的模型,只要透過COLLADA的外掛軟件就可以輸出成「dae」的檔案,而這個檔案所包含的內(nèi)容就是以XML文字數(shù)據(jù)的形式來描述的。)


placemark = ge.createPlacemark(  );
placemark.setName( model );
model = ge.createModel(  );
ge.getFeatures().appendChild(placemark);
loc = ge.createLocation(  );
model.setLocation(loc);
link = ge.createLink(  );

// A textured model created in Sketchup and exported as Collada.
var href = window.location.href;
var pagePath = href.substring(0, href.lastIndexOf( / )) +  / ;
link.setHref(pagePath +  splotchy_box.dae );
model.setLink(link);

la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
loc.setLatitude(la.getLatitude());
loc.setLongitude(la.getLongitude());

placemark.setGeometry(model);

la.setRange(300);
la.setTilt(80);
ge.getView().setAbstractView(la);


察看太空

您可以創(chuàng)建程序來觀察天空——星星、月亮、星座、星系……就像Google Earth里的Sky功能一樣。當程序切換到天空模式時,界面也會自動切換。所有星空數(shù)據(jù)均被放置在虛擬圓形地球的內(nèi)部,我們的視角切換到球形核心,抬頭仰望便可一覽蒼穹。
坐標 
星空坐標由赤經(jīng)和赤緯組成。
赤經(jīng):從春分點沿著天赤道向東到天體時圈與天赤道的交點所夾的角度,成為該天體的赤經(jīng)。赤經(jīng)與時角不同,時角是由天子午圈向西量,而赤經(jīng)是由春分點向東量,兩者方向相反。赤經(jīng)(Right ascension, RA; 符號:希臘字母α),天文學名詞。指赤道坐標系的經(jīng)向坐標,過天球上一點的赤經(jīng)圈與過春分點的二分圈所交的球面角。天球上相當于地球經(jīng)線的線,通過 天球兩極并與天赤道垂直。以時、分、秒表示。
赤緯:從天赤道沿著天體的時圈至天體的角度稱為該天體的赤緯。以天赤道為赤緯0°,向北為正,向南為負,分別從0°到90°。日赤緯的變化范圍在-23°27 ~+23°27 之間,而月赤緯的最大變化范圍為-28°36 ~+-28°36 .赤緯常用δ表示。在第二赤道坐標系中,天體的位置根據(jù)規(guī)定用經(jīng)緯度來表示,稱作赤經(jīng)(α)、 赤緯(δ)。赤緯就是天體的位置與天赤道位置的差,在天赤道以北多少度就為正多少度,反之,在天赤道以南多少度為負多少度。赤緯的取值為-90度到+90度,南天極的赤緯為-90度,北天極的赤緯為+90度,天赤道的赤緯為0度。天球赤道坐標系的緯度規(guī)定與地球緯度類似。只是不稱作“南緯”和“北緯”,天球赤緯以北緯為正,以南為負。

用set方法把地球界面切換至天空:


ge.getOptions().setMapType(ge.MAP_TYPE_SKY);

反之,把界面從天空切換回地球:


ge.getOptions().setMapType(ge.MAP_TYPE_EARTH);

計算LookAt對象里的Range值 
當您使用LookAt對象來處理星空數(shù)據(jù)時,必須用下列公式計算出r的距離。


r = R*(k*sin(β/2) - cos(β/2) + 1)

公式中各參數(shù)說明如下:

r:即range的值,由<LookAt>標簽指定。

R:為假設(shè)星空球體的半徑。在這里,星空球面為地球內(nèi)表面,“ Center of Earth”為地球核心,因此R值實為地球半徑6.378×106。

k:等于1 / tan ( 2 / α),或者用近似數(shù)替代:1.1917536

α:是一個角度范圍(β<α<180°)。當觀察點向地球原點移動時所形成的夾角。

β:用戶所需星空圖像兩邊與地球原點的夾角(單位:秒)。

與Google Maps相結(jié)合

如果您是一位Google Maps開發(fā)者,想把網(wǎng)絡(luò)地圖移植到Google Earth插件里以增強互動效果,現(xiàn)在變得輕而易舉。Google Maps API為Gmap2類增加了一個新方法,為Gmap類型增加了一個新常量,允許你在已有的網(wǎng)絡(luò)地圖中增加Google Earth三維功能。

下例中,網(wǎng)頁中的Google Map新增了一個“Earth”按鈕,可以隨時在Map與Earth之間切換。


當您點擊“Earth”按鈕時,窗口切換至Google Earth,地點未變。


示例代碼如下:

 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www./TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www./1999/xhtml"
xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>Using Google Earth API with the Maps API</title>

<script src="http://maps.google.com/maps?file=api&v=2.x&key=abcdefg"
type="text/javascript"></script>
function initialize() {
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.addMapType(G_SATELLITE_3D_MAP);
map.addControl(new GHierarchicalMapTypeControl());

// Uncomment the following line to start the map with 3D enabled.
// map.setMapType(G_SATELLITE_3D_MAP);

// Obtain a pointer to the Google Earth instance attached to
// your map.
map.getEarthInstance(getEarthInstanceCB);
}

var ge;
function getEarthInstanceCB(object) {
ge = object;
// You can now manipulate ge using the full Google Earth API.
}
</script>

</head>
<body onload="initialize()" onunlaod="GUnload">
<div id="map" class="map" style="width:500px;height:350px"></div>
</body>
</html>

大家從以上代碼可以看出,在已有地圖中添加新類型,只需調(diào)用gMap.addMapType(G_SATELLITE_3D_MAP)。如果您的地圖上有按鈕條,那么上述代碼就會在按鈕條中新增一項“Earth”,當用戶點擊它,地球窗口就會顯示出來,各種標記、圖形、文本等提示框,均能在地球窗口內(nèi)正常顯示。

除了addMapType,您還可以用gMap.setMapType(G_SATELLITE_3D_MAP)直接把地圖切換至Google Earth。同樣,調(diào)用gMapType.setMapType()可以隱藏Google Earth窗口,地圖切換到其他類型。

分享到:        
閱讀(314)| 評論(0)| 引用(0) |舉報

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本不卡在线视频你懂的 | 精品日韩中文字幕视频在线| 国产欧美日韩精品自拍| 91欧美日韩精品在线| 亚洲成人免费天堂诱惑| 婷婷开心五月亚洲综合| 亚洲精品成人综合色在线| 国产成人亚洲综合色就色| 久草热视频这里只有精品| 女同伦理国产精品久久久| 91播色在线免费播放| 亚洲av成人一区二区三区在线| 国产传媒精品视频一区| 操白丝女孩在线观看免费高清| 天堂热东京热男人天堂| 又色又爽又黄的三级视频| 亚洲高清欧美中文字幕| 欧美成人精品一区二区久久| 国产精品亚洲一级av第二区| 色无极东京热男人的天堂| 亚洲最大的中文字幕在线视频| 国产精品伦一区二区三区在线| 美女激情免费在线观看| 亚洲丁香婷婷久久一区| 日本免费一级黄色录像| 国产精品亚洲一区二区| 国产精品免费视频专区| 日韩国产亚洲一区二区三区| 国产情侣激情在线对白| 欧美成人一区二区三区在线| 久久99亚洲小姐精品综合| 欧美日韩国产免费看黄片| 成人日韩在线播放视频| 熟女免费视频一区二区| 91麻豆精品欧美一区| 日韩精品一区二区毛片| 欧美做爰猛烈叫床大尺度| 国产专区亚洲专区久久| 久久三级国外久久久三级| 搡老熟女老女人一区二区| 成人精品欧美一级乱黄|