KML 入门

摘要:
所有这些标记都区分大小写,必须完全显示在KML2.2参考中。本参考手册说明了哪些标签是可选的。

KML向导

     KML是一种在Earth Browser(比如Google Earth,Google MapsGoogle Maps for mobile)用于显示地理数据的文件格式。KML用使用一种可以嵌套元素和标记的结构并且基于XML标准。所有的这些标签都是大小写敏感的并且必须精确的出现在KML2.2Reference.这个参考手册指出哪些标记是可选的。在一个给定的元素中,标记必须按照Reference显示的顺序出现。

     如果你是一个KML新手,可以阅读这篇文档并且使用这些例子来开始学习KML文件基本结构。第一部分描述了使用Google Earth软件来创建的特性。这些特征包括placemarks,descripttions,ground overlays,pathspolygons。第二部分描述了使用一个text editor来创建的特性。当一个文件存储使用kml或者kmz扩展名,google earth浏览器知道怎样来显示它。

     目录

         基本的KML 文档

             Placemarks

             Descriptive HTML in Placemarks

             Ground Overlays

             Paths

             Polygons

         高级的KML文档

             对于Geometrystyles

             对于高亮的iconsstyles

             对于屏幕的覆盖图层

             网络连接

         KML MIME Types

     一、基本KML文档

         KML最简单的文档是那些可以直接在Google Earth发布的。也就是说,你不必在一个text editor中编辑或创建任何KML,像这些PlacemarksDescriptive HTML in PlacemarksGround OverlaysPathsPolygons元素可以直接在Google Earth中创建。

         1.1 Placemarks

             一个Placemarkgoogle earth中最普遍的特征。他标记真地球上表面的位置,使用一个黄色的图钉作为图标。最简单的placemark仅包括一个point元素,用于指定placemark的位置。你可以指定这个placemark的名字和图标,你也可以增加其他的几何元素在上面。

            Google Earth 打开KML Samples文件并且扩展placemarks子文件夹,这个文件夹包括三种placemark类型:simplefloatingextruded.对于KML code的一个简单的placemark如下:  

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">

 <Placemark>
    <name>Simple placemark</name>
    <description>Attached to the ground. Intelligently places itself

       at the height of the underlying terrain.</description>
    <Point>
      <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
    </Point>
 </Placemark>

</kml>

     这份文件结构的分解结构如下:

一个xml头。这是在每一个KML文件中第一行。在这行之前不能出现任何空格和字符。

一个KML名空间声明。这是每个KML2.2文件的第2

一个Placemark对象包含下列元素:

    • a name用于Placemark的文本标签
    • a description用于附在placemark的注释信息
    • a point用于指定地球表面的placemark的位置(经度,纬度和可选的海拔)

如果你想知道这个Placemark在哪里,他正是google41号建筑,在那里开发的google earth.

         google earth中用户通常认为placemark是一个带有point元素的placemark的元素。一个point placemarkgoogle earth3d viewer用于绘制一个icon 和标签。默认,这个图标是大家熟悉的黄色图钉。在KML中,一个placemark可以包含一个或者多个几何元素,如linestring,polygon,model.但是一个带有pointplacemark能有一个icon和标签。这个点用于放置icon,但是本身这个点没有图形表现。

1.2、在placemarks中放置具有描述性的HTML

       KML Samples中有一个你可以使用placemark text来处理任何事情的例子。你可以增加链接,字体颜色,样式和颜色还有指定文字对齐方式和表格。如果你想要看这些代码,可以将”Descriptive HTML”placemark 的例子粘贴到文本编辑器中。

l         Google Earth中的自动链接标记(4.0和之后的发布版本)

Google Earth4.0有一个自动链接的特性,这个特性用于自动将像www.google.com这样的文本转换成用户可以点击的链接。在<description>,<Snippet><BallonStyle><text>的标签中的文字全都自动转换成标准的HTTP链接。你不必自己添加<a href=…>标签。

l         使用CDATA元素

如果你想在在一个<description>标记写标准的HTML,你可以在里面添加CDATA标签。如果你不这么做,尖括号需要用实体字符来写以防止google earth不正确的转换政协HTML.例如,符号>别写成&gt;符号<别写成&lt;这是一个标准的xml特性并不是指对Google Earth

比较在HTML标记使用CDATA标签和不使用CDATA的区别。首先,这儿是一段带有CDATA标签的<description>

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

<kml xmlns="http://earth.google.com/kml/2.2">
 <Document>
    <Placemark>
      <name>CDATA example</name>
      <description>
        <![CDATA[
          <h1>CDATA Tags are useful!</h1>
          <p><font color="red">Text is <i>more readable</i> and 
          <b>easier to write</b> when you can avoid using entity 
          references.</font></p>
        ]]>
      </description>
      <Point>
        <coordinates>102.595626,14.996729</coordinates>
      </Point>
    </Placemark>
 </Document>
</kml>

这儿是一段没有CDATA标签的<description>.所以特殊字符必须使用实体字符。

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

<kml xmlns="http://earth.google.com/kml/2.2">
 <Document>
    <Placemark>
      <name>Entity references example</name>
      <description>
                &lt;h1&gt;Entity references are hard to type!&lt;/h1&gt;
                &lt;p&gt;&lt;font color="green"&gt;Text is 
          &lt;i&gt;more readable&lt;/i&gt; 
          and &lt;b&gt;easier to write&lt;/b&gt; 
          when you can avoid using entity references.&lt;/font&gt;&lt;/p&gt;
      </description>
      <Point>
        <coordinates>102.594411,14.998518</coordinates>
      </Point>
    </Placemark>
 </Document>
</kml>

1.3Ground Overlay

       ground overlay可以使你将一个图片覆盖在Earth的地表上。这个<Icon>元素用于包含这个jpg文件的链接。这个在KML Samples文件的ground overlay例子,用于显示在2001Mount Etna 火山爆发的

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

<kml xmlns="http://earth.google.com/kml/2.2">
 <Folder>

    <name>Ground Overlays</name>

    <description>Examples of ground overlays</description>

    <GroundOverlay>

      <name>Large-scale overlay on terrain</name>

      <description>Overlay shows Mount Etna erupting
          on July 13th, 2001.</description>

      <Icon>

        <href>http://code.google.com/apis/kml/documentation/etna.jpg</href>

      </Icon>

      <LatLonBox>

        <north>37.91904192681665</north>

        <south>37.46543388598137</south>

        <east>15.35832653742206</east>

        <west>14.60128369746704</west>

        <rotation>-0.1556640799496235</rotation>

      </LatLonBox>

    </GroundOverlay>

 </Folder>
</kml>

注意这个文件使用第一个例子中的同样的两行:XML头和KML名空间按声明。

这个例子使用Folder来组织和标记它的内容。当你装载一个KML Samples文件到Googel Earth中注意在Places PanelFolder是怎么显示的。

       一个gournd overlay的位置使用<LatLonBox>标签控制。边界值为南北的纬度和东西的经度。此外,对于给定的图像的y-asixrotation 值不能和grid north 冲突。这个例子使用一个JPEG图像覆盖。Google Earth也支持BMP,GIF,TIFF,TGAPNG格式。

1.4Path

       Google Earth中可以创建许多不同的path类型,在你的数据中赋有创新型是非常容易的。在KML中,a path是使用<LineString>元素来创建。看一下在Path folder中的”Absolute Starndard”例子,并且你能看到下列代码能产生多少个shape.

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

<kml xmlns="http://earth.google.com/kml/2.2">
 <Document>

    <name>Paths</name>

    <description>Examples of paths. Note that the tessellate tag is by default

      set to 0. If you want to create tessellated lines, they must be authored

      (or edited) directly in KML.</description>
    <Style id="yellowLineGreenPoly">

      <LineStyle>

        <color>7f00ffff</color>

        <width>4</width>

      </LineStyle>

      <PolyStyle>

        <color>7f00ff00</color>

      </PolyStyle>

    </Style>
    <Placemark>

      <name>Absolute Extruded</name>

      <description>Transparent green wall with yellow outlines</description>

      <styleUrl>#yellowLineGreenPoly</styleUrl>

      <LineString>

        <extrude>1</extrude>

        <tessellate>1</tessellate>


        <altitudeMode>absolute</altitudeMode>

        <coordinates> -112.2550785337791,36.07954952145647,2357

          -112.2549277039738,36.08117083492122,2357

          -112.2552505069063,36.08260761307279,2357

          -112.2564540158376,36.08395660588506,2357

          -112.2580238976449,36.08511401044813,2357

          -112.2595218489022,36.08584355239394,2357

          -112.2608216347552,36.08612634548589,2357

          -112.262073428656,36.08626019085147,2357

          -112.2633204928495,36.08621519860091,2357

          -112.2644963846444,36.08627897945274,2357

          -112.2656969554589,36.08649599090644,2357
        </coordinates>

      </LineString>
    </Placemark>

 </Document>
</kml>

注意在地面上一条线是怎么绘制的。<tessellate>标记标记将线分成小段,<extrude>标签扩展地上的线。
1.5Polygons

      你可以使用Polygons来创建简单的buildings和其他的形状。查看KML Samples文件的Polygon文件夹下的例子。

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

<kml xmlns="http://earth.google.com/kml/2.2">
 <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>

二、高级KML文档

       这一部分讲述一些不需使用一个文本编辑器来编辑的KML元素,像对于一个geometry,对于placemark高亮的icons和屏幕覆盖层的共享styles。手动的编写KML比使用google earth来创建和修改features更加高级,但是用一点实践,大多数用户习惯于编写KML文件来增加效果。

      2.1、对于几何实体的Styles

       一旦你使用Google Eeath来创建features并且检查Google Earth产生的code,你就会注意到样式对于你的数据怎样显示是多么重要的一部分。用户会想学怎么样定义自己的样式。

如果你在一个KML文档的开头定义一个样式并且给它赋予一个ID号,你就可以在你的geometryplacemarkoverlay中使用这个样式。因为一个元素可以使用同一样式。这种方式定义和使用的样式被称作共享样式。你一次定义一个给定的样式,然后你就可以多次引用它(使用<styleurl>元素),如果这个样式定义在同一文件中,在styleid中加上#符号。如果这个style定义是一个外部文件,在<styleurl>元素中包含整个url地址

       KML Samples文件包含了许多共享的样式,每一个在文件的开头都赋予了一个ID。注意如果你的IDS是描述性的字符串是最简单的,这样就可以很容易的分辨效果。这个有一个style的例子(transBluePoly),其定义了给一个多边形定义了一个蓝色的透明色和给这个多边形的边界定义了1.5宽度的线。这个样式用于google campus 例子的Building 41(Polygons folder)

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

<kml xmlns="http://earth.google.com/kml/2.2">

 <Document>

    <Style id="transBluePoly">

      <LineStyle>

        <width>1.5</width>

      </LineStyle>

      <PolyStyle>

        <color>7dff0000</color>

      </PolyStyle>

    </Style>
    <Placemark>

      <name>Building 41</name>

      <styleUrl>#transBluePoly</styleUrl>

      <Polygon>

        <extrude>1</extrude>

        <altitudeMode>relativeToGround</altitudeMode>

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

2.2、对于高亮的Icon的样式

       Styles and Markup文件夹中”Highlighed Icon”显示怎样使用KML创建一个roll-over效果。这个文档定义了两个样式,一个是为了”normalPlacemark”和一个”highlightPlacemark”(当这个鼠标经过这个图标时)<StyleMap>元素有两个key/value对,用来映射每一个icon状态的style。有两个icon 状态:normalhighligth.

下面是基本的步骤:

为一个placemark的正常图标定义<style>并且赋予他一个id(这里是”normalPlacemark”).这个样式包含一个<icon>标签,当中<href>标签为这个实际的图片位置。

定义一个placemarkhightlight样式并且赋予一个ID给他(这里是”highlightPlacemark”)

创建一个<StyleMap>元素并且赋予一个ID给它(“exampleStyleMap”).这个placemark将引用这个id.

StyleMap元素中指定”#normalPlacemark”为正常状态。

StyleMap元素中指定”#highlightPlacemark”higthlight状态。

在一个placemark中,增加一个<styleurl>元素指定”#exampleStyleMap”

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

<kml xmlns="http://earth.google.com/kml/2.2">

 <Document>

    <name>Highlighted Icon</name>

    <description>Place your mouse over the icon to see it display the new icon</description>

    <Style id="highlightPlacemark">

      <IconStyle>

        <Icon>

          <href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>

        </Icon>

      </IconStyle>

    </Style>

    <Style id="normalPlacemark">

      <IconStyle>

        <Icon>

          <href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>

        </Icon>

      </IconStyle>

    </Style>

    <StyleMap id="exampleStyleMap">

      <Pair>

        <key>normal</key>

        <styleUrl>#normalPlacemark</styleUrl>

      </Pair>

      <Pair>

        <key>highlight</key>

        <styleUrl>#highlightPlacemark</styleUrl>

      </Pair>

    </StyleMap>

    <Placemark>

      <name>Roll over this icon</name>

      <styleUrl>#exampleStyleMap</styleUrl>

      <Point>

        <coordinates>-122.0856545755255,37.42243077405461,0</coordinates>

      </Point>

    </Placemark>

 </Document>

</kml>

2.3 覆盖图层

       覆盖图层不能直接在Google Earth中编辑,这样创建地面覆盖图层就更加困难了。一个综合性例子可以在Screen Overlays 文件夹中找到。

       作为一个例子,在KML Sample文件中激活”Absolute Positioning:Top left”文件夹并且你可以看到在窗口试图的左上角一个覆盖层。这可以使用下面这段KML code来创建

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

<kml xmlns="http://earth.google.com/kml/2.2">

 <ScreenOverlay>

    <name>Absolute Positioning: Top left</name>

    <Icon>

      <href>http://code.google.com/apis/kml/documentation/top_left.jpg</href>

    </Icon>

    <overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>

    <screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>

    <rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>

    <size x="0" y="0" xunits="fraction" yunits="fraction"/>

 </ScreenOverlay>

</kml>

免责声明:文章转载自《KML 入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Use Eclipse to develop groovy[docs.codehaus.org]前端json数据格式化显示下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

正则表达式---用户验证

一:正则表达式:        是一种特殊的字符串模式,用于匹配一组字符串,定义一种规则去匹配一组符合规格的字符; 常用的正则匹配工具       在线匹配工具:   1 http://www.regexpal.com/        2 http://rubular.com/       正则匹配软件       McTracer  正则字符:     ...

tinyhttpd源码分析

  我们经常使用网页,作为开发人员我们也部署过httpd服务器,比如开源的apache,也开发过httpd后台服务,比如fastcgi程序,不过对于httpd服务器内部的运行机制,却不是非常了解,前几天看见tinyhttpd,只有短短500行左右的代码,就实现了一个简单的httpd服务器的基本功能,这种tiny程序,其实对于我们了解基本核心有一定的帮助,可...

Scala 学习之 aggregate函数

fold和reduce都要求函数的返回值类型需要和我们所操作的RDD类型相同,但是我们有时确实需要一个不同类型的返回值。eg: 在计算平均值时,需要记录便利过程中的计数以及元素的数量,这就需要我们返回一个二元组。可以先对数据使用map操作,来把元素转移为改元素和1的二元组,也就是我们希望的返回类型。这样reduce就可以以二元组的形式进行归约。 aggre...

html2canvas + jsPDF 导出PDF,解决一半文字在上一页一半文字在下一页的问题

html页面转pdf下载 两个js文件可供使用,地址如下: https://github.com/linwalker/render-html-to-pdf 唯一的缺点是图片跨页不好解决,最终的pdf文件如下:   解决下载pdf文件背景是黑色的问题,将div添加背景色为白色,未解决图片跨页问题,解决思路: 通过控制页面html页面元素,控制元素位置,当...

MyBatis:条件构造器QueryWrapper方法详解

QueryWrapper 说明:      继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取. 测试用表: 1. eq、ne 说明: eq:等于,ne:不等于 测试: @Test pub...

WPF 冒泡路由事件

    在WPF中,例如,可以构建一个包含图形的按钮,创建一个具有文本和图片混合内容的标签,或者为了实现滚动或折叠的显示效果在一个特定的容器中放置内容。甚至可以多此重复嵌套,直到达到您所希望的层次深度。     这种可以任意嵌套的能力也带来了一个有趣的问题。例如,假设有一个标签,它包含一个StackPanel面板,该面板又包含了两块文本图像: <La...