第三章 Google地图服务技术——KML 尹章才
3.2 KML 描述性标记语言大量应用于空间数据的存储、传输、交换和表达,其中有代表性的有GML、SVG、KML,从本质上看,它们都与将空间要素的非拓扑几何结构和属性信息存储在数据集中的shapefile文件差不多,仅仅是不同的地理数据文件格式而已。
这三种描述语言之间并非简单的取代关系,GML主要是为了描述地理信息,不负责地理信息的表示;KML除了能够描述地理信息,还能很好地表示地理信息。 但是由于GML和SVG在兼容方面没有得到很好的支持,所以它们始终没有真正流行起来,而KML在GE上运用却取得了比较大的成功,并也成为国际规范(杜英俊 2010)。
KML,是 Keyhole 标记语言(Keyhole Markup Language)的缩写,是一种采用 XML 语法与格式的语言,用于描述和保存地理信息(如点、线、图像、多边形和模型等),可以被 Google Earth 和 Google Maps 识别并显示 因而,可以使用 KML 来与其他 Google Earth 或 Google Maps 用户分享地标与信息
Google Earth 和 Google Maps 处理 KML 文件的方式与网页浏览器处理 HTML和 XML 文件的方式类似。 像 HTML一样,KML使用包含名称、属性的标签来确定显示方式。 因此,可将 Google Earth 和 Google Maps 视为 KML 文件浏览器。2008年,KML在被OGC宣布为国际标准。
Keyhole是一家卫星图像公司,总部位于美国加州山景城(Mountain View),成立于2001年,从事数字地图测绘等业务,它提供的Keyhole软件允许网络用户浏览通过卫星及飞机拍摄的地理图像,这一技术依赖于数以TB计的海量卫星影像信息数据库--而这正是GE的前身。
2004年10月27日Google宣布收购了Keyhole公司,并于05年6月推出了GE系列软件。在GE上,大量的地理信息通过地标的形式集成,采用这种技术,客户端和服务器之间不是直接传输空间数据,而是影像图片和KML文档(杜英俊 2010)。
3.2.1 KML基础 KML是一种文件格式,用于在地球浏览器(例如 Google 地球、Google 地图和谷歌手机地图)中显示地理数据。 KML 使用含有嵌套的元素和属性的基于标记的结构,并符合 XML 标准。
所有标记都区分大小写,而且完全如 KML 参考中列出的那样显示。 该参考指出了哪些标记是可选的。在指定元素内,标记必须按照参考中显示的顺序显示。
一、创建和共享 KML 文件 你可以使用 Google 地球用户界面创建 KML 文件,也可以使用 XML 或简单的文本编辑器从头输入“原始”KML。 可以使用 ZIP 格式将 KML 文件及其相关图像(如果有)压缩成 KMZ 档案。
要共享 KML 和 KMZ 文件,可以通过电子邮件发送这些文件,可以在本地托管以在专有互联网内共享,也可以在 Web 服务器上公开托管。 正确配置服务器并共享您的 KML 文件的网址(地址)后,安装了 Google 地球的所有用户均可查看公共网络服务器上托管的 KML 文件。
许多应用程序都可显示 KML,包括 Google 地球、Google 地图、谷歌手机地图、NASA WorldWind、ESRI ArcGIS Explorer、Adobe PhotoShop、AutoCAD 和 Yahoo! Pipe。
二、基本 KML 文档 最简单的 KML 文档类型就是可直接在 Google 地球中编写的文档,也就是说您无需在文本编辑器中编辑或创建任何 KML。Placemark、GroundOverlay、Path 和 Polygon 都可以直接在 Google 地球中编写。
1)地标 地标是 Google 地球中最常用的地图项之一。它使用黄色图钉作为图标,在地球表面标记出位置。最简单的地标只包含一个 <Point> 元素,它指定地标的位置。 你可以指定地标的名称和自定义图标,还可以为地标添加其他几何元素。
简单地标的 KML 代码如下:
该文件的结构分解如下: XML 标头。这是每个 KML 文件的第 1 行。该行前面不能有空格或其他字符。 KML 名称空间声明。这是每个 KML 2.2 文件的第 2 行。 包含以下元素的地标对象: (1)用于标识地标的“名称” (2)附着到地标的“气泡框”中显示的“说明” (3)指定地标在地球表面位置的“点”、“经度”、“纬度”及“高度”
用户通常认为的 Google 地球中的“地标”,实际上是 KML 中的 <Placemark> 元素,包含一个 <Point> 子元素。 在 KML 中,<Placemark> 可包含一个或多个几何元素,例如 LineString、Polygon 或 Model。但只有具有点的 <Placemark> 可以有图标和标签。点用于放置图标,但点本身并无图形表示。
2)地标中的描述性 HTML 在地标中可以添加链接、字体大小、样式和颜色,并指定文本对齐方式和表。
3)地面叠加层 通过地面叠加层,可在 Google 地球的地形上“叠加”图像。 <Icon> 元素包含了指向叠加图像“.jpg”文件的链接。地面叠加层的定位由 <LatLonBox> 标签控制。边框值以南纬、北纬和东经、西经形式给出。
4)路径 在 Google 地球中可以创建多种不同类型的路径,并且可轻松地利用你的数据充分发挥创造力。在 KML 中,路径是用 <LineString> 元素创建的。
5)多边形 你可以使用多边形来创建简单的建筑物及其他形状。
三、高级 KML 文档 本部分介绍了某些必须用文本编辑器编写的 KML 元素,如几何图形的共享样式、地标的突出显示图标和屏幕叠加层。
1)几何图形样式 如果在 KML 文档开头定义了样式,并定义了它的 ID,就可以在文档其他地方定义的几何图形、地标和叠加层中使用该样式。 因为可有多个元素使用同一个样式,因此以这种方式定义和使用的样式称为“共享样式”。只需定义指定样式一次,即可用<styleUrl>元素多次引用它。
2)突出显示图标的样式,如光标移动到图标上时显示 3)屏幕叠加层 屏幕叠加层无法直接在 Google 地球中编写,因此比地面叠加层更难以创建。 叠加层的定位是通过将 <overlayXY> 指定的图像中的点映射到 <screenXY> 指定的屏幕上的点来控制的。 在这种情况下,图像左上角 (0,1) 与屏幕上的这一点重合。
3.2.2 KML应用 GE与ArcGIS、MapGIS、MapInfo等专业的GIS软件相比,在功能和数据图形处理上有很多不足,但其海量的数据和全球范围的网络数据发布平台却是一些专业GIS所望尘莫及的(王莲玉 2009)。
一、KML与GIS数据格式的转换策略 目前主流的GIS软件,如MapInfo,AutoCAD和ArcGIS等,都有将对应格式的矢量数据转换为KML的模块。 这些模块采用的转换方法的基本原理相同,包括三部分(刘祥磊 2009):
1)空间信息的转换 空间信息的转换从本质上讲就是坐标数据的转换,将非WGS-84的坐标系统下的坐标数据直接转换为WGS-84坐标系统(GE采用WGS-84)下的坐标数据,然后再将坐标数据信息写入KML文件。
2)样式的控制 GE没有自带的符号库,对点、线、面的显示样式的控制是通过KML的标签实现的,由于涉及的标签众多,难以控制。
3)属性信息的转换 属性信息的转换是指将GIS的属性信息用KML的各种标签通过多种表达方式显现。
上述的转换方法存在一定的缺陷,主要包括两个方面(刘祥磊 2009):
1)精度不够 这主要是针对中国而言,在我国矢量数据通常采用的是北京54坐标系或西安80坐标系,二者向WGS 84坐标系转换的七参数(七参数布尔莎模型:X平移,Y平移,Z平移,X旋转(WX),Y旋转(WY),Z旋转(WY),尺度变化(DM))尚未对外公开,所以利用上述模块转换后的KML数据叠加到Google Earth上都存在几十米的偏移。
2)KML中点、线、面的表现形式混乱 对KML中的点、线、面的控制没有统一的标准,所以同一矢量数据进行多次转换,得到的KML数据的显示样式是不相同的。
二、KML与GIS格式转换的实例 MapInfo的MIF外部数据交换格式与KML格式均有各自的特定样式,故不可能完全一一对应(表3.1.1),且对应格式也不一定完全匹配(王莲玉 2009)。
2)与ArcGIS数据格式的转换 ESRI Shapefile(shp),或简称shapefile,是ESRI开发的一种空间数据开放格式。 Shapefile在九十年代初的ArcView GIS的第二个版本被首次应用。
Geodatabase是ArcInfo 8引入的一个全新的空间数据模型,是建立在DBMS之上的统一的、智能化的空间数据库。 Geodatabase要素类虽然将空间对象划分为7类,即点、线、多边形、注记、维度、多点和Multipatches,但可以归为KML的5种基本空间对象模型:点、线、面、复合体和对象属性。
其中:点类型和多点类型划为点对象; 线类型划为线对象; 多边形类型划为面对象; Multipatches类型和以上3个类型的组合几何体划分为复合几何体; 注记类型和维度类型划分为对象属性。 另外,Geodatabase的属性表可划为对象属性(杜钢虎 2010)。
这意味着,基于点、线、面、复合体和对象属性这5种类型,可以建立起KML与Geodatabase的映射关系(图3.1.1)。
KML有存储格式简单明了,利于网络传输的优点,Geodatabase则在管理海量数据、维护数据完整、建立空间关系上有很大优势。 将二者结合起来进行商业开发具有很强的现实意义。 在实际应用当中,应结合项目环境,发挥两者优点,才能做到事半功倍(杜钢虎 2010)。
三、KML与GML的转换 作为XML格式的标记语言,KML拥有XML的所有优点和特性。 与GML专注于地理信息的结构与内容不同,KML关注于地理信息的显示和表达。 KML是以位置为中心的,而GML是以要素为中心的;GML应用模式中定义的要素对象可以没有几何属性,而KML则必须有。
KML是一种面向客户端设计的数据形式,它以超文本的方式标记属性数据,更便于客户端的表现(王志红 2010),而GML将属性数据存储为Element,便于数据的存储、建模、传输和交换。
这意味着,GML与KML两者各有所长,一方面KML不能取代GML的地位,另一方面KML在GE和很多地图应用上远强于GML(曾建刚 2009)。
在GML与KML的集成应用中,GML与KML之间的数据转换意义显著:GML作为数据源,需将其转换为KML并在Google Earth等客户端软件中显示;客户端更新后的KML数据需要转换为GML在服务器端进行存储。 鉴于GML、KML都是基于XML的标记语言,采用XSLT可有效而直接地实现二者之间的转换(王志红 2010)。
四、与WMS的集成 若在 GE中加载显示 WMS,需要以 KML 文件作为桥梁。 KML中有一种“地面贴图”(GroundOverlay)的节点类型,只要为该节点指定地图来源 (如一张地图的网络地址)和该地图的地理范围 (Bounding Box),就可以将该地图渲染到 GE的准确位置上。
因此,只需将地图网络地址替换成 WMS服务器的GetMap的请求字符串,同时将地理范围的4个值替换成请求字符串中相应的坐标值,就可以在GE中显示GetMap请求所得的地图。
问 题?