本段描述了部分必须用文本编辑器编写的 KML 元素,如几何图形的共享样式、地标的突出显示图标和屏幕叠加层。手动编写 KML 比用 Google 地球界面创建和修改地图项略微难一些,但只需稍加练习,多数用户都能自如地编辑 KML 文件以添加这些效果。
在 Google 地球中创建地图项并检查了 Google 地球生成的 KML 代码后,您会注意到样式是您数据显示方式中多么重要的一部分。高级用户可能希望学习如何定义他们自己的样式。
如果您在 KML 文档开始处定义了样式,并定义了它的 ID,就可以在文档其他地方定义的几何图形、地标和叠加层中使用该样式。因为可有多个元素使用同一个样式,以这种方式定义和使用的样式称为共享样式。只需定义给定样式一次,即可用
KML Samples 文件包含许多共享样式,每一个都在文件开始处用 ID 定义。请注意,如果您的 ID 是描述性的字符串,您可以很容易判断其作用,就会很方便。以下是一个样式的示例 ("transBluePoly"),它定义多边形面为透明蓝色,多边形边缘线宽 1.5,使用默认的白色。Google 园区 41 号楼的示例会使用该样式(在 Polygons 文件夹中):
1.5 7dff0000 41 号楼 #transBluePoly 1 relativeToGround -122.0857412771483,37.42227033155257,17 -122.0858169768481,37.42231408832346,17 -122.085852582875,37.42230337469744,17 -122.0858799945639,37.42225686138789,17 -122.0858860101409,37.4222311076138,17 -122.0858069157288,37.42220250173855,17 -122.0858379542653,37.42214027058678,17 -122.0856732640519,37.42208690214408,17 -122.0856022926407,37.42214885429042,17 -122.0855902778436,37.422128290487,17 -122.0855841672237,37.42208171967246,17 -122.0854852065741,37.42210455874995,17 -122.0855067264352,37.42214267949824,17 -122.0854430712915,37.42212783846172,17 -122.0850990714904,37.42251282407603,17 -122.0856769818632,37.42281815323651,17 -122.0860162273783,37.42244918858722,17 -122.0857260327004,37.42229239604253,17 -122.0857412771483,37.42227033155257,17
请注意,
该文档定义两种样式,一种用于 "normalPlacemark",另一种用于 "highlightPlacemark"(光标在图标上滚动时显示)。
这里所示的基本步骤如下:
屏幕叠加层(对屏幕来说的叠加)
作为示例,在 KML Samples 文件中启用“Absolute Positioning: Top left”文件夹,您就会在视图窗口左上角看到屏幕叠加层。它是由以下 KML 代码创建的:
绝对定位:左上角 http://code.google.com/apis/kml/documentation/top_left.jpg
叠加层的定位是通过将用
请检查该文件夹中的其他示例,看看可以如何获取其他固定位置,并创建大小随屏幕大小动态调整的图像。(请注意,xunits 和 yunits 也可以按“像素”指定,以便精确控制。)进一步的详细信息请参见 KML 2.2 参考。
网络链接包含用于加载文件且带有
链接中的
指定的文件可以是本地文件,也可以是远程服务器上的文件。网络链接的最简单形式是将一个大的 KML 文件分割为同一台计算机上较小且更易于管理的多个文件。
到目前为止,我们的所有示例都要求从本地计算机将 KML 代码提供给 Google 地球。网络链接使您能从远程计算机提供内容,并且常用于向大量用户分发数据。用这种方式分发数据,如果需要修改数据,只需在源位置修改,所有用户就会自动收到更新后的数据。
除了指向包含静态数据的文件外,网络链接的
通过网络 CGI 传递 KML 时,有两件事是必须的:
从客户端(Google 地球)调用至服务器时,服务器必须
(1) 返回响应代码 HTTP 200 并且
(2) 设置响应的内容类型为 text/plain
或 application/vnd.google-earth.kml+xml.
响应必须是有效的 KML。对于复杂的应用程序,对错误进行正确的处理非常重要。
提示:处理错误的简单途径是将服务器的错误语法解析为文件夹名称的文本。
例如,您可以让服务器返回
的字符串。这比让连接断开提供了更多信息,对用户也更友好。
以下示例使用 Python,但它们在任何其他脚本语言中也同样有效。
以下 Python 脚本生成纬度和经度的随机整数值,然后将那些值插入
#!/usr/bin/python import random latitude = random.randrange(-90, 90) longitude = random.randrange(-180, 180) kml = ( '\n' '\n' ' ' ) %(longitude, latitude) print 'Content-Type: application/vnd.google-earth.kml+xml\n' print kml\n' ' \n' '随机地标 \n' '\n' ' \n' '%d,%d \n' '
以下是包含加载该 Python 脚本的网络链接的 KML 文件示例:
网络链接 0 0 网络链接示例 1 随机地标 0 0 每次调用时生成新的随机 地标的简单服务器端脚本 0 0 http://您的服务器.com/cgi-bin/randomPlacemark.py
标准网络链接是单向链接:数据只从服务器流向 Google 地球。基于视图的刷新允许进行双向通讯。激活基于视图的刷新时,Google 地球会在指定时间将视图坐标返回给服务器。这一指定时间可以是每 n 秒、分钟、小时或视图停止移动后经过的一段时间。请参见 KML 2.2 参考中的
坐标以如下附加坐标的 HTTP GET 方式返回给服务器(这是默认的边框信息):
GET /path/to/sever/script/query?BBOX=[longitude_west, latitude_south, longitude_east, latitude_north] HTTP/1.1
如果用户俯瞰旧金山时发出请求,坐标可能看上去如下:
GET /path/to/server/script/query?BBOX=-122.497790,37.730385,-122.380087,37.812331 HTTP/1.1
该功能可以有一些很富创意的应用,但是为帮助您入门,下面只提供了一个简单的示例。
以下服务器端 Python 脚本会对 Google 地球发送的返回消息进行语法分析,并用屏幕中心的地标作为响应。每次刷新网络链接时,都会生成新的地标。
#!/usr/bin/python import cgi url = cgi.FieldStorage() bbox = url['BBOX'].value bbox = bbox.split(',') west = float(bbox[0]) south = float(bbox[1]) east = float(bbox[2]) north = float(bbox[3]) center_lng = ((east - west) / 2) + west center_lat = ((north - south) / 2) + south kml = ( '\n' '\n' ' ' ) %(center_lng, center_lat) print 'Content-Type: application/vnd.google-earth.kml+xml\n' print kml\n' ' \n' '视图居中地标 \n' '\n' ' \n' '%.6f,%.6f \n' '
以下是加载 Python 脚本的网络链接的 KML:重点
网络链接 0 0 网络链接示例 2 视图居中地标 0 0 基于视图的刷新允许远程服务器计算 屏幕中心并返回地标。 0 0 http://您的服务器.com/cgi-bin/viewCenteredPlacemark.py 2 onStop 1
该示例中所示原理可用于一些很复杂的应用。例如,如果您有地理信息数据库,可提取观察者坐标,从数据库调用该视图专有数据,以 KML 形式返回给 Google 地球。
响应来自 Google 地球(或任何 Google 地球浏览器)的请求时,KML 服务器必须遵循特定的一组规则,以便 Google 地球能正确解释其响应。
成功后,服务器必须返回响应代码 HTTP 200,并设置响应的内容类型为合适的 MIME 类型,如这里所述。
Google 地球将读取 KML 和 KMZ 文件。
KML 文件的 MIME 类型是
application/vnd.google-earth.kml+xml
KMZ 文件的 MIME 类型是
application/vnd.google-earth.kmz
对 Apache,将以下行添加到 httpd.conf 文件:
AddType application/vnd.google-earth.kml+xml .kml
AddType application/vnd.google-earth.kmz .kmz
关于在 Microsoft 的 IIS 上设置 MIME 类型的详细信息,请参见 Microsoft 文档。
响应的正文必须包含有效的 KML 数据,包括 XML 声明 ()。如果服务器返回无效的 KML,网络链接将停止、停用,并输出错误消息。
请支持原文作者:http://www.cnblogs.com/TerryFeng/archive/2009/03/15/1412574.html