目录

上一个主题

1.4. IV. SLD-图层样式描述

下一个主题

1.6. VI. OWS-OGC Web 服务通用标准


1.5. V. KML-我从 Google 来

1.5.1. 概述

KML(OpenGIS® KML Encoding Standard)从 2.2.0 版本开始由 Google

提交到 OGC 并被接受为标准,当前 OGC KML 的版本也就是 2.2.0。

KML 和 GML 在名称上类似,但是功能有很大不同。GML 主要用于地理数据的交换;而 KML 主要用于地理数据的可规化,它不仅包括地理数据的描述,还包括数据的符号化方式、用户规觇的控制等信息。

1.5.2. KML Schema

KML 的 Schema 可以从 http://schemas.opengis.net/kml/ 访问到。所有

KML 中耳熟能详的 Placemark、LookAt 等名称都可以在这里找到定义,相对 OGC 给出的文档,更好的关于 KML Schema 的参考在 Google Code 上 http://code.google.com/intl/zh-CN/apis/kml/documentation/kml_tut.html ,这里还有关于 Schema 对象的关系,如图 11。

imagea

图 11 KML Schema 对象关系图

注意,在图 11 中的方框中的对象是逡辑上的对象,并不真实存在于

Schema 定义中。还有,红色标注的对象是 Google 对 KML 2.2.0 的扩展,在

Google Earth 5.0以上版本中被支持,因此,对于需要了览KML标准的人来说,这些红色的内容都可以被忽略。

1.5.3. KML 示例

关于地理数据的描述,下面是一个最简单的描述“地标”的 KML,它包吨了一个点要素信息:

<?xml version="1.0" encoding="UTF-8"?>

<kml xmlns="http://www.opengis.net/kml/2.2">

<Placemark>

<name>Simple placemarkname>

<description>Attached to the ground. Intelligently places itself

at the height of the underlying terrain.description>

<Point>

<coordinates>-122.0822035425683,37.42228990140251,0coordinates>

Point>

Placemark>

kml>

下面是另外一个定义了显示样式的多边形数据:

<?xml version="1.0" encoding="UTF-8"?>

<kml xmlns="http://www.opengis.net/kml/2.2">

<Document>

<Style id="transBluePoly">

<LineStyle>

<width>1.5width>

LineStyle>

<PolyStyle>

<color>7dff0000color>

PolyStyle>

Style>

<Placemark>

<name>Building 41name>

<styleUrl>#transBluePolystyleUrl>

<Polygon>

<extrude>1extrude>

<altitudeMode>relativeToGroundaltitudeMode>

<outerBoundaryIs>

<LinearRing>

<coordinates> -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

coordinates>

LinearRing>

outerBoundaryIs>

Polygon>

Placemark>

Document>

kml>

这是一个定义了视点属性的点要素:

<?xml version="1.0" encoding="UTF-8"?>

<kml xmlns="http://www.opengis.net/kml/2.2">

<Placemark>

<name>Machu Picchu, Peruname>

<LookAt>

<longitude>-72.503364longitude>

<latitude>-13.209676latitude>

<altitude>0altitude>

<range>14794.882995range>

<tilt>66.768762tilt>

<heading>71.131493heading>

LookAt>

<Point>

<coordinates>-72.516244,-13.162806,0coordinates>

Point>

Placemark>

kml>

1.5.4. ArcGIS 对 KML 的支持

ArcGIS 10 中支持 KML 2.2.0 版本。

1.5.4.1. 1. ArcToolbox 输出 KML

我们可以通过 ArcToolbox 中的“To Kml”工具箱将地图或图层输出为 KML 格式。比如使用“Map To Kml”工具,如图 12 所示:

image0

图 12 使用 ArcToolbox 导出 KML

这样导出的 KML 为 KMZ 文件,如果在 Google Earth 中直接打开导出的

KMZ 文件,可以看到在 Google Earth 中显示的地图和 MXD 中的基本一致。“基本一致”表示还稍有不同,比如在图 13 中蓝色的多边形对象在导出 KML 并加载到 Google Earth 14 后会被下层的多边形覆盖而导致不可见。不过,这个是

Google Earth 的问题,因为从图层属性中可以看到,这些蓝色多边形所在的

“Lakes”图层数据都存在,可惜没被正确显示,如图 14 的对比效果。

image1

 图 13 ArcMap 中显示的地图效果

image2

 图 14 Google Earth 中显示 KML 的覆盖问题

由于我们选择了导出矢量的数据,因此如果览压缩导出的 KMZ 文件,可以看到其中叧包吨了一个 doc.kml 文件,有兴趣可以自己打开这个 XML 文件对照

KML 标准看一下。如果导出图片格式,KMZ 中将会包吨一个输出的图片,在 doc.xml 则是简单地将这个图片引用进来,这样的 KML 在 Google Earth 中显示并放大后会出现如图 16 的锯齿。

image3

图 15 Google Earth 中显示 ArcGIS 导出的矢量 KML

image4

图 16 导出图片结果的 KML 在 Google Earth 中放大的效果

1.5.4.2. 2. ArcGIS Server 发布 KML 服务

在 ArcGIS Server 中,通过勾选 KML 这个 Capability 可以启用服务的 KML 访问,如图 17。

image5

图 17 ArcGIS Server 发布 KML 服务

当发布完这个 KML 服务后,我们就可以直接向 ArcGIS Server 的 REST 接口发送返回 KMZ 格式的请求,然后将这个请求的地址添加到 Google Earth 的网络链接中。

image6

图 18 将 ArcGIS Server 发布的 KML 服务添加到 Google Earth 的效果

14

版本:5.1