socujun

Google Earth API开发者指南

原文:https://developers.google.com/earth/documentation/index?hl=zh-CN

Google Earth API开发者指南

  1. 简介
  2. 受众
  3. 安装Google地球插件
  4. 使用Google Earth API
  5. 加载其他数据库
  6. 问题排查
  7. 其他资源

简介

欢迎阅读Google Earth API开发者文档。使用Google地球插件及其JavaScript API,您可以在网页中嵌入功能完备的Google地球及其3D呈现功能。与Google Maps API一样,您可以绘制标记和线条,不过是3D的哦!

如果您阅读完本开发者指南后有任何关于API的问题,请访问Google Earth API开发者论坛

受众

本文档面向熟悉JavaScript编程和面向对象编程概念的用户。Google Earth API是以KML为模型设计的,因此您还应查阅Google的KML文档

Google地球插件

目前,Google地球插件可以在以下平台上使用:

  • Microsoft Windows(XP和Vista)
    • Google Chrome 5.0及以上版本
    • Internet Explorer 7.0及以上版本
    • Firefox 3.0及以上版本
    • Flock 1.0及以上版本
  • Apple Mac OS X 10.5及以上版本(Intel)
    • Google Chrome 5.0及以上版本
    • Safari 3.1及以上版本
    • Firefox 3.0及以上版本

尽管在另外一些支持带有npruntime扩展程序NPAPI的浏览器上,Google地球插件和API也可能会正常运行,但这些浏览器并不属于官方支持范围。

安装

要安装Google地球插件,请访问包含该插件的任意网页(例如 http://code.google.com/apis/ajax/playground/#hello,_earth)。

在为您的浏览器安装插件之前,系统可能会请求许可,请点击以允许安装。安装完毕后,您可能需要刷新网页,插件才能正确显示。

卸载

  • Windows:依次选择开始 > 程序(或所有程序)>Google地球 > 卸载Google地球插件
  • Mac:先删除/Library/Internet Plug-ins/Google Earth Web Plug-in.plugin,然后重新启动浏览器。

使用Google Earth API

要在网页中加载Google地球插件,您需要执行以下操作:

  1. 加载Google Earth API。
  2. 创建用于包含该插件的DIV元素。
  3. 创建用于初始化插件的函数。
  4. 网页加载完毕后,调用该初始化函数。

下文会对这些步骤进行说明。

注意:如果您想使用Google Maps API for Business授权许可的Google Earth API,请参阅Google Maps API for Business开发者指南,了解更多信息。

加载Google Earth API

请将以下标记放置在HTML页面的 <head> 部分:

<scripttype="text/javascript"src="https://www.google.com/jsapi"></script>

该标记的src指向包含一个方法(google.load,用于加载各个Google API)的 JavaScript 文件。在新的<script>标记中调用以下函数:

google.load("earth","1",{"other_params":"sensor=true_or_false"});

该函数用于告知Google将earth模块加载到google.earth命名空间,同时指定使用版本1(API的最新稳定版本)。要指定最新的API测试版本,请指定为"1.x"

该函数必须添加sensor参数,指明此应用否会使用GPS定位器等传感器来确定用户的位置。在此示例中,我们将该参数值设为变量“true_or_false”,用于提醒您必须将该值明确设为truefalse

要详细了解加载机制,请参阅Google AJAX API文档。

为插件创建容器

Google地球插件会加载到具有唯一ID的DIV元素中。将此DIV添加到网页的<body>部分:

<divid="map3d"style="height:400px;width:600px;"></div>

在以上示例中,名为map3d的DIV将会成为插件的目标元素。

创建初始化函数

在此步骤中,您要创建三个函数。它们将按顺序完成以下操作:

  • 第一个函数尝试创建新的插件实例。
  • 在成功创建插件实例后调用第二个函数。
  • 在未能创建实例时调用第三个函数。

第一个函数如下所示:

function init(){
  google
.earth.createInstance(\'map3d\', initCB, failureCB);
}

此处的google.earth.createInstance显示了三个选项:应将实例添加到其中的DIV元素、返回成功时要调用的函数以及返回失败时要调用的函数。除了上述选项以外,您还可以指定一个要建立连接的备用数据库,以便显示火星图像或连接至Google地球企业版数据库。

成功回调函数将包含设置“首次运行”体验所需的全部代码:在浏览器中加载插件实例时将首先显示的所有对象和视图。必须在此函数中添加GEWindow.setVisibility方法,并将窗口显示状态设置为true,这样插件才能显示在对应的DIV中:

function initCB(instance){
   ge
= instance;
   ge
.getWindow().setVisibility(true);
}

失败回调可包含任何用于处理失败以创建插件实例的代码。错误代码将传递到回调函数,并且可根据需要在网页上或作为警告重复显示。在本指南中,错误回调函数均已留空:

function failureCB(errorCode){
}

网页加载完毕后调用初始化函数

Google命名空间包含setOnLoadCallback()函数,用于在HTML网页和请求的API加载完毕后调用指定的函数。使用此函数可确保只有在网页DOM完全扩展后才加载插件。

google.setOnLoadCallback(init);

完整示例

<html>
<head>
 
<title>示例</title>
 
<scripttype="text/javascript"src="https://www.google.com/jsapi"></script>
 
<scripttype="text/javascript">
   
var ge;
    google
.load("earth","1",{"other_params":"sensor=true_or_false"});

   
function init(){
      google
.earth.createInstance(\'map3d\', initCB, failureCB);
   
}

   
function initCB(instance){
      ge
= instance;
      ge
.getWindow().setVisibility(true);
   
}

   
function failureCB(errorCode){
   
}

    google
.setOnLoadCallback(init);
 
</script>

</head>
<body>
 
<divid="map3d"style="height:400px;width:600px;"></div>
</body>
</html>

加载其他数据库

您可以加载自己的数据库,使其显示在Google地球的球体上,方法有两种:一是在初始化过程中指定该数据库,二是针对地球对象调用addSideDatabase()。如果在初始化阶段加载数据库,则系统只会加载此数据库,而不会加载标准的Google地球图像。

要在初始化插件时加载数据库,请使用以下代码:

function init(){
  google
.earth.createInstance(\'map3d\', initCB, failureCB,{
    database
:\'http://khmdb.google.com/?db=moon\',
    username
:\'\',
    password
:\'\'// 如果您的服务器需要这些。
 
});
}

使用 addSideDatabase()

google.earth.addSideDatabase(
  ge
,\'http://khmdb.google.com/?db=mars\',
    sideDatabaseSuccess
,
    sideDatabaseFail
,
   
{
      userName
:\'\',
      password
:\'\'
   
}
);

要详细了解上述示例中显示的火星和月球数据库,请参阅本指南的星空、火星和月球章节。

断开与其他数据库的连接

要断开与其他数据库的连接,请针对其他数据库对象调用logout()

sideDB.logout()

由于必须要有数据库指针,因此用户必须使用addSideDatabase()添加其他数据库:

var sideDB;

google
.earth.addSideDatabase(
  ge
,\'http://khmdb.google.com/?db=mars\',
    sideDatabaseSuccess
,
    sideDatabaseFail
,
   
{
      userName
:\'\',
      password
:\'\'
   
}
);

function sideDatabaseSuccess(db){
  sideDB
= db;  
}

function sideDatabaseDisconnect(){
  sideDB
.logout();
}

Google Maps Engine 地图

请注意:Google Maps Engine使用“地图”一词来指代图像和矢量层的集合;它相当于Google地球企业融合专业版中的“数据库”。有关详情,请参阅针对Google地球企业版用户的提示支持文章的术语部分。

Google Maps Engine地图可以使用上述方法加载到插件中。要获取指向指定地图的网址,您可以在任意已发布地图的详细信息页面上,点击发布的链接部分中的Google地球选项。

google.earth.addSideDatabase(
  ge
,\'https://earthbuilder.google.com/10446176163891957399-13516001307527776624-4/kh/\',
    sideDatabaseSuccess
,
    sideDatabaseFail
,
   
{
      userName
:\'\',
      password
:\'\'
   
}
);

查看示例https://developers.google.com/earth/documentation/samples/addSideDatabase_noauth

如果您的地图是公开显示的,则您无需再执行其他步骤。如果您的地图是私有的,则您需要提供身份验证凭据。

Google Maps Engine地图身份验证

如果您已授予用户访问Maps Engine的权限,那么他们就可以使用自己的Google帐户针对您的地图进行身份验证。上述操作可利用OAuth 2.0令牌完成;有关详情,请参阅OAuth 2.0文档

以下示例展示了如何利用OAuth 2.0令牌加载Earth API。您需要提供以下内容:

  • 应用ID,通过API控制台API访问页面获取。
  • 有效的重定向URI,同样在API控制台中进行配置。在以下示例中,假设重定向URI的设定值与应用URI的值相同(即身份验证完毕后,身份验证流程便会让用户返回到原始页面)。
var ge;

//Google Maps APIfor Business 用户在加载Google Earth API时
// 必须指定自己的客户端 ID
// var params = {"other_params":"client=YOUR_MAPSFORBUSINESS_CLIENTID&sensor=false"};
var params ={"other_params":"sensor=false"};
google
.load("earth","1", params);

function init(){
 
var hash_value = window.location.hash;
 
if(!hash_value){
   
var redirect_url ="https://accounts.google.com/o/oauth2/auth";
   
// 以下client_id值是通过API控制台获取的。
   
// 它不同于Google Maps APIfor Business 客户端 ID。
    redirect_url
+="?client_id=370755043334.apps.googleusercontent.com";
    redirect_url
+="&redirect_uri="+ window.location.href;
    redirect_url
+="&scope=https://www.googleapis.com/auth/earthbuilder.readonly"
                 
+"%20https://www.googleapis.com/auth/userinfo.email";
    redirect_url
+="&response_type=token";
    window
.location = redirect_url;
   
return;
 
}

 
if(hash_value[0]=="#"){
    hash_value
= hash_value.slice(1);
 
}

 
var hash_parts = hash_value.split("&");
 
for(var i =0; i < hash_parts.length;++i){
   
var name_value = hash_parts[i].split("=");
   
if(name_value.length ==2){
     
var name = name_value[0];
     
var value = name_value[1];
     
if(name =="access_token"){
        g_oauth_token_value
= value;
     
}
   
}
 
}

 
if(!g_oauth_token_value){
   
return;
 
}

 
var optArgs ={
    oauth2Info
:{
      oauthToken
: g_oauth_token_value,
      signingUrl
:\'https://earthbuilder.google.com/\'
   
}
 
};
  google
.earth.createInstance(\'map3d\', initCB, failureCB, optArgs);
}

function initCB(instance){
  ge
= instance;
  ge
.getWindow().setVisibility(true);
  ge
.getOptions().setStatusBarVisibility(true);
  ge
.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
  ge
.getLayerRoot().enableLayerById(ge.LAYER_BORDERS,true);
  ge
.getLayerRoot().enableLayerById(ge.LAYER_ROADS,true);

 
var lookAt = ge.createLookAt(\'\');
  lookAt
.setLatitude(41.26);
  lookAt
.setLongitude(-100.00);
  lookAt
.setRange(800000.0);
  ge
.getView().setAbstractView(lookAt);

 
// 使用以下有效的Maps Engine网址进行替换。
 
// 通过点击发布的链接部分(位于详细信息页面上)的Google地球选项
 
// 可以获取该网址。
 
var earthDb =\'https://earthbuilder.google.com/01234-5678-9/kh/\';
  google
.earth.addSideDatabase(
    ge
, earthDb,
    sideDatabaseSuccess
,
    sideDatabaseFail
,
   
{
      userName
:\'\',
      password
:\'\'
   
}
 
);
}

function failureCB(errorCode){
  alert
(errorCode);
}

function sideDatabaseSuccess(db){
  db
.setDrawOrder(2);
}

function sideDatabaseFail(){
  alert
(\'Failed to add side database connection.\');
}

google
.setOnLoadCallback(init);

Google Maps API for Business客户端ID

如果您是Google Maps APIfor Business客户,则必须在加载API时传递客户端ID。

var params ={"other_params":"client=YOUR_MAPSFORBUSINESS_CLIENTID&sensor=false"};
google
.load("earth","1", params);

问题排查

如果您的代码不起作用,则可以参考以下某些方法来解决您遇到的问题:

  • 使用JavaScript调试程序。如需获取详细信息(包括常见应用列表),请参阅本指南的调试部分。
  • 查找拼写错误。请注意,JavaScript语言区分大小写。
  • 搜索开发者论坛。如果您找不到可以解答您问题的帖子,请在该论坛中发帖提问,并在帖子中附上指向能够演示相关问题的网页的链接。
  • 要获取更多开发者资源,请参阅其他资源

其他资源

本指南包含大量工作示例,这些示例链接自相关代码示例上方的资源行。除了本文档中提供的示例以外,以下资源也包含许多示例:

  • AJAX API园地 - 可直接在网页上进行编辑的交互式示例精选。可以导出您的代码,并将其另存为JavaScript或HTML。
  • Earth API演示库 - 一系列Earth API演示和示例,包括社区提供的内容。
  • 基本示例 - 借助这些包含完整HTML的独立示例研究单个API功能。

如果您需要了解有关Google地球、KML或Google地图的详情,请参阅以下内容:

开发者版本

用户可通过以下网址下载开发者版本的插件:http://earth.google.com/plugin/download-dev-plugin.html。在发布常规版本之前,此版本的插件可能会添加一些新功能;但此版本的稳定性不高,随时可能会删除那些仅针对开发者版本推出的功能。

发表于 2014-04-15 15:07  Ansel Song  阅读(2075)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章: