KML添加自定义数据

摘要:
该信息还可以用于&lt&书信电报;元素;在大多数示例中应使用哪种方法<架构>、&书信电报;数据>Dataname=“string”>元素<&lt,//earth.google.com/kml/2.2“>234<数据名=“holePar”>

KML--添加自定义数据

       kml提供三种方法向一个KML要素中添加自定义数据。你选择的方法依赖于你的数据还有你计划怎样在你的KML表现中来使用。特别地,<ExtendData>元素提供以下机制:

l         <Data>元素允许你向与用户数据相关联的Feature(NetworkLink,Placemark, GroundOverlay, PhotoOverlay, ScreenOverlay, Document, or Folder)中添加弱类型的名值对。这些名值对默认可以在显示在ballon中。这些信息也可以被用于<text>元素的<BallonStyle>

l         <Schema><SchemaData>元素允许你添加类型数据给到一个给定的要素的用户数据。

l         任意的XML数据-允许你在一个KML文件中保存用户数据。Google Earth伴随着文件传递这些数据并保存它,但是不使用它。

注意:这三种机制可以合成在同一个文件中。如果你从不同的数据源中添加不同的类型的数据,对于一些自定义的数据使用类型数据(Schema/SchemaData)是比较合适的,对于其他自定义的数据使用弱类型的数据。

      你应当使用哪种方法    

       在大多数例子中<Data>元素提供了最简单和最有力的机制以将弱类型的数据添加到KML的要素中。这种方法实现起来相对简单,并且提供了一个使用BallonStyle模板的优势,这个模板可应用到KML文件中所有的Placemarks(Entity Replacement for Extended Data Elements)

       <Schema><SchemaData>元素允许你添加强类型的用户数据。这些元素主要用与GIS 数据。如果你有用于外部电脑应用程序强类型数据,你可能需要使用<Schema><SchemaData>元素来添加添加结构数据类型到一个feature中。(Google Earth不支持这种类型数据,但是你的其他应用程序可能需要它)。偶然的用户可能不需要这种机制所提供的更多技术。像<Data><SchemaData>便于BallonStyle的模板使用。

       如果你仅仅需要伴随着KML文件中传递一些数据并且不需要GoogleEarth来处理这些数据,使用随意的XML数据结构,这允许你应用一个XML名空间前缀并在KML文件中传递这些数据。需要更多的信息,看Arbitrary XML Data.这一部分

添加弱类型的名值对

       <Data>元素对于添加弱类型的名值对到一个KML要素中是一种简单然而非常有力的机制。这种元素的语法如下:

<ExtendedData>                       

 <Data name="string">

    <displayName>...</displayName>    <!-- string -->

    <value>...</value>                <!-- string -->

 </Data>
</ExtendedData> 

name属性是对于这片数据唯一ID.当你想以一种用户友好的形式显示这个数据名字时可以使用<displayName>元素。<displayName>元素能够包含CDATA,用于包括空格,URLS和一些链接

这里是一个Placemark包含有关在一个golf课程当中有多少个洞的自定义数据的例子。

<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
 <name>My Golf Course Example</name>
 <Placemark>
    <name>Club house</name>
    <ExtendedData>
      <Data name="holeNumber">
        <value>1</value>
      </Data>
      <Data name="holeYardage">
        <value>234</value>
      </Data>
      <Data name="holePar">
        <value>4</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.956,33.5043</coordinates>
    </Point>

 </Placemark>
 <Placemark>
    <name>By the lake</name>
    <ExtendedData>
      <Data name="holeNumber">
        <value>5</value>
      </Data>
      <Data name="holeYardage">
        <value>523</value>
      </Data>
      <Data name="holePar">
        <value>5</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.95,33.5024</coordinates>
    </Point>

 </Placemark>
</Document>
</kml>

回顾:使用BalloonStyle元素作为一个模板

       KML中,你可以一次定义一个Style并且赋予一个ID给它。在以这种方式定义样式后,你可以在KML文件中使用<StyleUrl>元素多次引用它。一个用这种方式定义的样式被作为共享样式来引用。在<BalloonStyle><text>元素支持实体替换(entity replacement).每一个值都可以使用实体的实例来替换。标准实体替换如下。

$[name]

Replaced with the name of the Placemark

$[description]

Replaced with the description of the Placemark

$[address]

Replaced with the address of the Placemark

$[id]

Replaced with the ID of the Placemark

$[Snippet]

Replaced with the Snippet of the Placemark

$[geDirections]

Replaced with the To/From driving directions of the Placemark

实体替换扩展数据元素

       Google Earth也支持在<BalloonStyle>中的text元素中对于特定扩展数据元素的替换。以下实体可以在<text>元素中引用

       这儿有一个为golf course创建<BalloonStyle>模板的例子。对于每一个Placemark ballonGoogle Earth替换这个Placemark的名字并且写一些关于hole number,par,和对于每一个洞的信息。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
 <name>Data+BalloonStyle</name>
 <Style id="golf-balloon-style">
    <BalloonStyle>
      <text>
        <![CDATA[
          This is $[name]
          This is hole $[holeNumber]
          The par for this hole is $[holePar]
          The yardage is $[holeYardage]
        ]]>
      </text>
    </BalloonStyle>
 </Style>
 <!-- Shared style sample
        Two Placemarks use the same balloon template
 -->
 <Placemark>
    <name>Club house</name>
    <styleUrl>#golf-balloon-style</styleUrl>
    <ExtendedData>
      <Data name="holeNumber">
        <value>1</value>
      </Data>
      <Data name="holeYardage">
        <value>234</value>
      </Data>
      <Data name="holePar">
        <value>4</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.956,33.5043</coordinates>
    </Point>
 </Placemark>
 <Placemark>
    <name>By the lake</name>
    <styleUrl>#golf-balloon-style</styleUrl>
    <ExtendedData>
      <Data name="holeNumber">
       <value>5</value>
      </Data>
      <Data name="holeYardage">
        <value>523</value>
      </Data>
      <Data name="holePar">
        <value>5</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.95,33.5024</coordinates>
    </Point>
 </Placemark>
</Document>
</kml>

这儿有一个更加实际的例子用于使用<displayName>元素。这种技术用于文本的本地化和更多的格式化。

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

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

 <Document>

    <name>Entity-Replacement</name>

    <Style id="displayName-value">

      <BalloonStyle>

        <text>

          <![CDATA[

          This is $[name]<br/>

          $[holeNumber/displayName] $[holeNumber]<br/>

          $[holePar/displayName] $[holePar]<br/>

          $[holeYardage/displayName] $[holeYardage]

            ]]>

        </text>

      </BalloonStyle>

    </Style>

    <!-- Shared style sample

      Two Placemarks use the same balloon template

    -->

    <Placemark>

      <name>Club house</name>

      <styleUrl>#displayName-value</styleUrl>

      <ExtendedData>

        <Data name="holeNumber">

         <displayName><![CDATA[

            <b>This is hole </b>

          ]]></displayName>

          <value>1</value>

        </Data>

        <Data name="holePar">

          <displayName><![CDATA[

            <i>The par for this hole is </i>

          ]]></displayName>

          <value>4</value>

        </Data>

        <Data name="holeYardage">

          <displayName><![CDATA[

            <b><i>The yardage is </i></b>

          ]]></displayName>

          <value>234</value>

        </Data>

      </ExtendedData>

      <Point>

        <coordinates>-111.956,33.5043</coordinates>

      </Point>

    </Placemark>

    <Placemark>

      <name>By the lake</name>

      <styleUrl>#Entity-Replacement</styleUrl>

      <ExtendedData>

        <Data name="holeNumber">

          <displayName><![CDATA[

            <b>This is hole </b>

          ]]></displayName>

          <value>5</value>

        </Data>

        <Data name="holePar">

          <displayName><![CDATA[

            <i>The par for this hole is </i>

          ]]></displayName>

          <value>5</value>

        </Data>

        <Data name="holeYardage">

          <displayName><![CDATA[

            <b><i>The yardage is </i></b>

          ]]></displayName>

          <value>523</value>

        </Data>

      </ExtendedData>

      <Point>

        <coordinates>-111.95,33.5024</coordinates>

      </Point>

    </Placemark>

 </Document>

</kml>

添加一个强类型数据到一个要素中

       <Schema><SchemaData>元素允许你添加强类型数据到一个要素中。特定的GIS和应用程序需要这些要素因为他们可以处理强类型数据。

l       添加强类型数据概况

添加一个自定义类型到KML要素中,你执行两个基本的步骤:

创建<Schema>要素,用于声明你的新类型

使用<SchemaData>元素来创建新类型的实例。

l       声明Schema元素

Sehema元素声明一个结构化类型。<Schema>通常是<Document>的子元素。一个Document可以包含0个或多个Schema元素。

l       id 属性

<Schema>元素通常有一个id属性,当这种类型的实例被创建时可以引用。在KML文件中ID必须是唯一的。

l       name属性

name属性用于实体替换,可选

l         语法

Schema元素有下列语法:

        <Schema name="string" id="ID">   
  <SimpleField type=string" name="string">     
    <displayName>...</displayName>            <!-- string -->   
  </SimpleField> 
</Schema> 
        一个<SimpleField>通常有name和type属性。如果没有这两个属性,这个字段就会忽略。name属性用于指定<BalloonStyle>中<text>元素的实体替换。一个Simplefield类型可以为以下几种:
bool

定义数据的每一个实例

       使用<SchemaData>元素创建一个用户定义类型实例,<SchemaData>元素的语法如下:

<ExtendedData>                   
 <SchemaData schemaUrl="anyURI">
    <SimpleData name=""> ... </SimpleData>       <!-- string -->
 </SchemaData>
</ExtendedData>

schemaUrl属性引用schema(声明了这个类型)id。如果schemaUrl是一个http地址,google earth通过网络去这个文件。对于一个给定的用户类型每一个placemark只能有一个实例。

例子

       下面这个例子声明了一个用户定义的类型叫做ScenicVista.这个类型包含三个字段:TrailHeadName, TrailLength, ElevationGain.TrailHeadName字段包含string类型的值TrailLength字段包含一个double类型的值。ElevationGain字段包含int类型的值。名为Easy trailPlacemark包含这个用户类型的实例。这个实例有一个”Pi in the sky”的值在TrailHeadName字段,3.14159TrailLength字段的值,10ElevationGain字段的值

<kml xmlns="http://earth.google.com/kml/2.2"> 
<Document>   
  <name>ExtendedData+SchemaData</name>   
  <open>1</open>
 
 <!-- Declare the type "TrailHeadType" with 3 fields -->
 <Schema name="TrailHeadType" id="TrailHeadTypeId">     
    <SimpleField type="string" name="TrailHeadName">       
      <displayName><![CDATA[<b>Trail Head Name</b>]]></displayName>     
    </SimpleField>     
    <SimpleField type="double" name="TrailLength">       
      <displayName><![CDATA[<i>Length in miles</i>]]></displayName>     
    </SimpleField>     
    <SimpleField type="int" name="ElevationGain">       
      <displayName><![CDATA[<i>Change in altitude</i>]]></displayName>     
    </SimpleField>   
  </Schema> 
 
<!-- This is analogous to adding three fields to a new element of type TrailHead:
 
 <TrailHeadType>        
    <TrailHeadName>...</TrailHeadName>        
    <TrailLength>...</TrailLength>        
    <ElevationGain>...</ElevationGain>    
 </TrailHeadType>

-->     
 
 <!-- Instantiate some Placemarks extended with TrailHeadType fields -->    
  <Placemark>     
    <name>Easy trail</name>
    <ExtendedData>       
      <SchemaData schemaUrl="#TrailHeadTypeId">        
        <SimpleData name="TrailHeadName">Pi in the sky</SimpleData>         
        <SimpleData name="TrailLength">3.14159</SimpleData>         
        <SimpleData name="ElevationGain">10</SimpleData>       
      </SchemaData>     
    </ExtendedData>     
    <Point>       
      <coordinates>-122.000,37.002</coordinates>     
    </Point>   
  </Placemark>    
  <Placemark>     
    <name>Difficult trail</name>
    <ExtendedData>
      <SchemaData schemaUrl="#TrailHeadTypeId">        
        <SimpleData name="TrailHeadName">Mount Everest</SimpleData>        
        <SimpleData name="TrailLength">347.45</SimpleData>         
        <SimpleData name="ElevationGain">10000</SimpleData>       
      </SchemaData>     
    </ExtendedData>    
    <Point>       
      <coordinates>-121.998,37.0078</coordinates>     
    </Point>   
  </Placemark>   
</Document> 
</kml>

对于displayName的实体代替

       Schema/SchemaData机制也允许在BalloonStyle中的<text>元素中支持实体替换。

       <Schema><displayName>允许你给一个自定义的数据类型一个友好的版本。在<Schema>中改变这个字符串一次就能影响那些包含这种类型的所有要素的<displayName>。在<BalloonStyle>元素中的<text>元素,使用下列语法来限定一个<displayName>

$[TYPENAME/TYPEFIELD/displayName]
下面是使用的一个例子
<kml xmlns="http://earth.google.com/kml/2.2"> 
<Document>   
  <name>ExtendedData+SchemaData</name>   
  <open>1</open>    
  <!-- Create a balloon template referring to the user-defined type -->
 <Style id="trailhead-balloon-template">     
    <BalloonStyle>       
      <text>
        <![CDATA[         
          <h2>My favorite trails!</h2>         
          <br/><br/>         
          The $[TrailHeadType/TrailHeadName/displayName] is <i>$[TrailHeadType/TrailHeadName]</i>.        
          The trail is $[TrailHeadType/TrailLength] miles.         <br/>        
          The climb is $[TrailHeadType/ElevationGain] meters.         <br/><br/>       
        ]]>
      </text>     
    </BalloonStyle>
 </Style>     
 
 <!-- Declare the type "TrailHeadType" with 3 fields -->
 <Schema name="TrailHeadType" id="TrailHeadTypeId">     
    <SimpleField type="string" name="TrailHeadName">       
      <displayName><![CDATA[<b>Trail Head Name</b>]]></displayName>     
    </SimpleField>     
    <SimpleField type="double" name="TrailLength">       
      <displayName><![CDATA[<i>The length in miles</i>]]></displayName>     
    </SimpleField>     
    <SimpleField type="int" name="ElevationGain">       
      <displayName><![CDATA[<i>change in altitude</i>]]></displayName>     
    </SimpleField>   
  </Schema>       
 
 <!-- Instantiate some Placemarks extended with TrailHeadType fields -->    
  <Placemark>     
    <name>Easy trail</name>     
    <styleUrl>#trailhead-balloon-template</styleUrl>     
    <ExtendedData>       
      <SchemaData schemaUrl="#TrailHeadTypeId">        
        <SimpleData name="TrailHeadName">Pi in the sky</SimpleData>         
        <SimpleData name="TrailLength">3.14159</SimpleData>         
        <SimpleData name="ElevationGain">10</SimpleData>       
      </SchemaData>     
    </ExtendedData>     
    <Point>       
      <coordinates>-122.000,37.002</coordinates>     
    </Point>   
  </Placemark>    
  <Placemark>     
    <name>Difficult trail</name>     
    <styleUrl>#trailhead-balloon-template</styleUrl>     
    <ExtendedData>
      <SchemaData schemaUrl="#TrailHeadTypeId">         
        <SimpleData name="TrailHeadName">Mount Everest</SimpleData>        
        <SimpleData name="TrailLength">347.45</SimpleData>         
        <SimpleData name="ElevationGain">10000</SimpleData>       
      </SchemaData>   
    </ExtendedData>    
    <Point>       
      <coordinates>-121.998,37.0078</coordinates>     
    </Point>   
  </Placemark>   
</Document> 
</kml>

添加任意的XML数据到一个要素中

       向一个要素中添加用户数据最简单的方法是作为<ExtendedData>的值直接添加数据。Google Earth保存这个值但是不处理它。

       以这种方式添加的自定义数据元素需要包括一个名空间前缀。这个前缀可以被添加到kml元素中或者<ExtendedData>元素中。外部名空间前缀不需限定用户数据每一个实例,如下面的例子显示:

<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
 <name>ExtendedData Test</name>
 <Placemark>
    <name>CampsiteData</name>
    <!-- Imported schema requires use of namespace prefix -->
    <ExtendedData xmlns:camp="http://campsites.com">
      <camp:number>14</camp:number>
      <camp:parkingSpaces>2</camp:parkingSpaces>
      <camp:tentSites>4</camp:tentSites>
    </ExtendedData>
    <Point>
      <coordinates>-114.041,53.7199</coordinates>
    </Point>
 </Placemark>
</Document>
</kml>此文献为翻译文献,原文地址

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

上篇javascript 高级选择器:querySelector 和 querySelectorAll无限加载 vue用infinite-loading插件和阿波罗请求下篇

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

相关文章

mysql获取当月数据_MySQL中获取天、周、月等数据

MySQL中获取天、周、月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 3.近7天 SELECT * FROM 表名 where...

HTML往div中赋值

HTML中往div赋值 <div id="mazey">content</div>   使用JavaScript: var mazey=document.getElementById("mazey"); mazey.innerHTML=data;  使用jQuery: $("#mazey").html(data);  ...

SQL Server對象的最大容量限制

      SQL Server 数据库引擎对象 最大大小/数量 - SQL Server(32 位) 最大大小/数量 - SQL Server(64 位) 批大小1 65,536 * 网络数据包大小 65,536 * 网络数据包大小 每个短字符串列的字节数 8,000 8,000 每个 GROUP BY、ORDER BY 的字节数 8,0...

Vue教程:组件Component详解(六)

一.什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以表现为用 is 特性进行了扩展的原生 HTML 元素。 所有的 Vue 组件同时也都是 Vue 的实例,所以可接受相同的选项对象...

springboot中使用h2数据库(内存模式)

使用H2的优点,不需要装有服务端和客户端,在项目中包含一个jar即可,加上初始化的SQL就可以使用数据库了 在springboot中引入,我的版本是2.1.4,里面就包含有h2的版本控制 <!-- 集成h2数据库 --> <dependency> <groupId>c...

关于mongodb当中的数据导入到mysql数据。

昨天有人问题mongodb的数据怎么导入到mysql关系型数据库,当时真不知道。今天查询了资料,然后自己实践了一下。在这里记录一下: 这里用到MongoDB的mongoexport,这个功能是将mongodb的数据导成csv文件,然后再讲csv文件当中的数据加载到mysql数据库,实现将mongdb数据库的数据导入到myql当中。 mongoexport...