KML-添加自定义数据
2008-04-17 21:17
387 查看
KML--添加自定义数据
kml提供三种方法向一个KML要素中添加自定义数据。你选择的方法依赖于你的数据还有你计划怎样在你的KML表现中来使用。特别地,<ExtendData>元素提供以下机制:
l
<Data>元素允许你向与用户数据相关联的Feature(NetworkLink,Placemark,
GroundOverlay,PhotoOverlay,ScreenOverlay,Document,orFolder)中添加弱类型的名值对。这些名值对默认可以在显示在ballon中。这些信息也可以被用于<text>元素的<BallonStyle>
l
<Schema>和<SchemaData>元素允许你添加类型数据给到一个给定的要素的用户数据。
l
任意的XML数据-允许你在一个KML文件中保存用户数据。GoogleEarth伴随着文件传递这些数据并保存它,但是不使用它。
注意:这三种机制可以合成在同一个文件中。如果你从不同的数据源中添加不同的类型的数据,
对于一些自定义的数据使用类型数据(Schema/SchemaData)是比较合适的,对于其他自定义的数据使用弱类型的数据。
ReplacementforExtendedDataElements)
<Schema>和<SchemaData>元素允许你添加强类型的用户数据。这些元素主要用与GIS数据。如果你有用于外部电脑应用程序强类型数据,你可能需要使用<Schema>和<SchemaData>元素来添加添加结构数据类型到一个feature中。(GoogleEarth不支持这种类型数据,但是你的其他应用程序可能需要它)。偶然的用户可能不需要这种机制所提供的更多技术。像<Data>、<SchemaData>便于BallonStyle的模板使用。
如果你仅仅需要伴随着KML文件中传递一些数据并且不需要GoogleEarth来处理这些数据,使用随意的XML数据结构,这允许你应用一个XML名空间前缀并在KML文件中传递这些数据。需要更多的信息,看Arbitrary
XMLData.这一部分
name属性是对于这片数据唯一ID.当你想以一种用户友好的形式显示这个数据名字时可以使用<displayName>元素。<displayName>元素能够包含CDATA,用于包括空格,URLS和一些链接
这里是一个Placemark包含有关在一个golf课程当中有多少个洞的自定义数据的例子。
$[name]
Replacedwiththename
ofthePlacemark
$[description]
Replacedwiththedescription
ofthePlacemark
$[address]
Replacedwiththeaddress
ofthePlacemark
$[id]
Replacedwiththe
IDofthePlacemark
$[Snippet]
ReplacedwiththeSnippet
ofthePlacemark
$[geDirections]
Replacedwiththe
To/FromdrivingdirectionsofthePlacemark
Earth也支持在<BalloonStyle>中的text元素中对于特定扩展数据元素的替换。以下实体可以在<text>元素中引用
这儿有一个为golfcourse创建<BalloonStyle>模板的例子。对于每一个Placemarkballon,GoogleEarth替换这个Placemark的名字并且写一些关于holenumber,par,和对于每一个洞的信息。
这儿有一个更加实际的例子用于使用<displayName>元素。这种技术用于文本的本地化和更多的格式化。
l
添加强类型数据概况
添加一个自定义类型到KML要素中,你执行两个基本的步骤:
创建<Schema>要素,用于声明你的新类型
使用<SchemaData>元素来创建新类型的实例。
l
声明[b]Schema[/b]元素
Sehema元素声明一个结构化类型。<Schema>通常是<Document>的子元素。一个Document可以包含0个或多个Schema元素。
l
[b]id[/b]属性
<Schema>元素通常有一个id属性,当这种类型的实例被创建时可以引用。在KML文件中ID必须是唯一的。
l
[b]name[/b]属性
name属性用于实体替换,可选
l
语法
Schema元素有下列语法:
schemaUrl属性引用schema(声明了这个类型)的id。如果schemaUrl是一个http地址,googleearth通过网络去这个文件。对于一个给定的用户类型每一个placemark只能有一个实例。
例子
下面这个例子声明了一个用户定义的类型叫做ScenicVista.这个类型包含三个字段:TrailHeadName,TrailLength,和ElevationGain.TrailHeadName字段包含string类型的值TrailLength字段包含一个double类型的值。ElevationGain字段包含int类型的值。名为Easytrail的Placemark包含这个用户类型的实例。这个实例有一个”Piinthesky”的值在TrailHeadName字段,3.14159为TrailLength字段的值,10为ElevationGain字段的值
<Schema>的<displayName>允许你给一个自定义的数据类型一个友好的版本。在<Schema>中改变这个字符串一次就能影响那些包含这种类型的所有要素的<displayName>。在<BalloonStyle>元素中的<text>元素,使用下列语法来限定一个<displayName>
以这种方式添加的自定义数据元素需要包括一个名空间前缀。这个前缀可以被添加到kml元素中或者<ExtendedData>元素中。外部名空间前缀不需限定用户数据每一个实例,如下面的例子显示:
kml提供三种方法向一个KML要素中添加自定义数据。你选择的方法依赖于你的数据还有你计划怎样在你的KML表现中来使用。特别地,<ExtendData>元素提供以下机制:
l
<Data>元素允许你向与用户数据相关联的Feature(NetworkLink,Placemark,
GroundOverlay,PhotoOverlay,ScreenOverlay,Document,orFolder)中添加弱类型的名值对。这些名值对默认可以在显示在ballon中。这些信息也可以被用于<text>元素的<BallonStyle>
l
<Schema>和<SchemaData>元素允许你添加类型数据给到一个给定的要素的用户数据。
l
任意的XML数据-允许你在一个KML文件中保存用户数据。GoogleEarth伴随着文件传递这些数据并保存它,但是不使用它。
注意:这三种机制可以合成在同一个文件中。如果你从不同的数据源中添加不同的类型的数据,
对于一些自定义的数据使用类型数据(Schema/SchemaData)是比较合适的,对于其他自定义的数据使用弱类型的数据。
你应当使用哪种方法
在大多数例子中<Data>元素提供了最简单和最有力的机制以将弱类型的数据添加到KML的要素中。这种方法实现起来相对简单,并且提供了一个使用BallonStyle模板的优势,这个模板可应用到KML文件中所有的Placemarks中(看EntityReplacementforExtendedDataElements)
<Schema>和<SchemaData>元素允许你添加强类型的用户数据。这些元素主要用与GIS数据。如果你有用于外部电脑应用程序强类型数据,你可能需要使用<Schema>和<SchemaData>元素来添加添加结构数据类型到一个feature中。(GoogleEarth不支持这种类型数据,但是你的其他应用程序可能需要它)。偶然的用户可能不需要这种机制所提供的更多技术。像<Data>、<SchemaData>便于BallonStyle的模板使用。
如果你仅仅需要伴随着KML文件中传递一些数据并且不需要GoogleEarth来处理这些数据,使用随意的XML数据结构,这允许你应用一个XML名空间前缀并在KML文件中传递这些数据。需要更多的信息,看Arbitrary
XMLData.这一部分
添加弱类型的名值对
<Data>元素对于添加弱类型的名值对到一个KML要素中是一种简单然而非常有力的机制。这种元素的语法如下:<ExtendedData> <Dataname="string"> <displayName>...</displayName><!--string--> <value>...</value><!--string--> </Data>
</ExtendedData>
name属性是对于这片数据唯一ID.当你想以一种用户友好的形式显示这个数据名字时可以使用<displayName>元素。<displayName>元素能够包含CDATA,用于包括空格,URLS和一些链接
这里是一个Placemark包含有关在一个golf课程当中有多少个洞的自定义数据的例子。
<kmlxmlns="http://earth.google.com/kml/2.2">
<Document>
<name>MyGolfCourseExample</name>
<Placemark>
<name>Clubhouse</name>
<ExtendedData>
<Dataname="holeNumber">
<value>1</value>
</Data>
<Dataname="holeYardage">
<value>234</value>
</Data>
<Dataname="holePar">
<value>4</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.956,33.5043</coordinates>
</Point> </Placemark>
<Placemark>
<name>Bythelake</name>
<ExtendedData>
<Dataname="holeNumber">
<value>5</value>
</Data>
<Dataname="holeYardage">
<value>523</value>
</Data>
<Dataname="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>元素支持实体替换(entityreplacement).每一个值都可以使用实体的实例来替换。标准实体替换如下。$[name]
Replacedwiththename
ofthePlacemark
$[description]
Replacedwiththedescription
ofthePlacemark
$[address]
Replacedwiththeaddress
ofthePlacemark
$[id]
Replacedwiththe
IDofthePlacemark
$[Snippet]
ReplacedwiththeSnippet
ofthePlacemark
$[geDirections]
Replacedwiththe
To/FromdrivingdirectionsofthePlacemark
实体替换扩展数据元素
GoogleEarth也支持在<BalloonStyle>中的text元素中对于特定扩展数据元素的替换。以下实体可以在<text>元素中引用
这儿有一个为golfcourse创建<BalloonStyle>模板的例子。对于每一个Placemarkballon,GoogleEarth替换这个Placemark的名字并且写一些关于holenumber,par,和对于每一个洞的信息。
<?xmlversion="1.0"encoding="UTF-8"?>
<kmlxmlns="http://earth.google.com/kml/2.2">
<Document>
<name>Data+BalloonStyle</name>
<Styleid="golf-balloon-style">
<BalloonStyle>
<text>
<![CDATA[
Thisis$[name]
Thisishole$[holeNumber]
Theparforthisholeis$[holePar]
Theyardageis$[holeYardage]
]]>
</text>
</BalloonStyle>
</Style>
<!--Sharedstylesample
TwoPlacemarksusethesameballoontemplate
-->
<Placemark>
<name>Clubhouse</name>
<styleUrl>#golf-balloon-style</styleUrl>
<ExtendedData>
<Dataname="holeNumber">
<value>1</value>
</Data>
<Dataname="holeYardage">
<value>234</value>
</Data>
<Dataname="holePar">
<value>4</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.956,33.5043</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Bythelake</name>
<styleUrl>#golf-balloon-style</styleUrl>
<ExtendedData>
<Dataname="holeNumber">
<value>5</value>
</Data>
<Dataname="holeYardage">
<value>523</value>
</Data>
<Dataname="holePar">
<value>5</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.95,33.5024</coordinates>
</Point>
</Placemark>
</Document>
</kml>
这儿有一个更加实际的例子用于使用<displayName>元素。这种技术用于文本的本地化和更多的格式化。
<?xmlversion="1.0"encoding="UTF-8"?> <kmlxmlns="http://earth.google.com/kml/2.2"> <Document> <name>Entity-Replacement</name> <Styleid="displayName-value"> <BalloonStyle> <text> <![CDATA[ Thisis$[name]<br/> $[holeNumber/displayName]$[holeNumber]<br/> $[holePar/displayName]$[holePar]<br/> $[holeYardage/displayName]$[holeYardage] ]]> </text> </BalloonStyle> </Style> <!--Sharedstylesample TwoPlacemarksusethesameballoontemplate --> <Placemark> <name>Clubhouse</name> <styleUrl>#displayName-value</styleUrl> <ExtendedData> <Dataname="holeNumber"> <displayName><![CDATA[ <b>Thisishole</b> ]]></displayName> <value>1</value> </Data> <Dataname="holePar"> <displayName><![CDATA[ <i>Theparforthisholeis</i> ]]></displayName> <value>4</value> </Data> <Dataname="holeYardage"> <displayName><![CDATA[ <b><i>Theyardageis</i></b> ]]></displayName> <value>234</value> </Data> </ExtendedData> <Point> <coordinates>-111.956,33.5043</coordinates> </Point> </Placemark> <Placemark> <name>Bythelake</name> <styleUrl>#Entity-Replacement</styleUrl> <ExtendedData> <Dataname="holeNumber"> <displayName><![CDATA[ <b>Thisishole</b> ]]></displayName> <value>5</value> </Data> <Dataname="holePar"> <displayName><![CDATA[ <i>Theparforthisholeis</i> ]]></displayName> <value>5</value> </Data> <Dataname="holeYardage"> <displayName><![CDATA[ <b><i>Theyardageis</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
声明[b]Schema[/b]元素
Sehema元素声明一个结构化类型。<Schema>通常是<Document>的子元素。一个Document可以包含0个或多个Schema元素。
l
[b]id[/b]属性
<Schema>元素通常有一个id属性,当这种类型的实例被创建时可以引用。在KML文件中ID必须是唯一的。
l
[b]name[/b]属性
name属性用于实体替换,可选
l
语法
Schema元素有下列语法:
<Schemaname="string"id="ID">
<SimpleFieldtype=string"name="string">
<displayName>...</displayName><!--string-->
</SimpleField>
</Schema>
一个<SimpleField>通常有name和type属性。如果没有这两个属性,这个字段就会忽略。name属性用于指定<BalloonStyle>中<text>元素的实体替换。一个Simplefield类型可以为以下几种:
bool
定义数据的每一个实例
使用<SchemaData>元素创建一个用户定义类型实例,<SchemaData>元素的语法如下:<ExtendedData>
<SchemaDataschemaUrl="anyURI">
<SimpleDataname="">...</SimpleData><!--string-->
</SchemaData>
</ExtendedData>
schemaUrl属性引用schema(声明了这个类型)的id。如果schemaUrl是一个http地址,googleearth通过网络去这个文件。对于一个给定的用户类型每一个placemark只能有一个实例。
例子
下面这个例子声明了一个用户定义的类型叫做ScenicVista.这个类型包含三个字段:TrailHeadName,TrailLength,和ElevationGain.TrailHeadName字段包含string类型的值TrailLength字段包含一个double类型的值。ElevationGain字段包含int类型的值。名为Easytrail的Placemark包含这个用户类型的实例。这个实例有一个”Piinthesky”的值在TrailHeadName字段,3.14159为TrailLength字段的值,10为ElevationGain字段的值
<kmlxmlns="http://earth.google.com/kml/2.2">
<Document>
<name>ExtendedData+SchemaData</name>
<open>1</open>
<!--Declarethetype"TrailHeadType"with3fields-->
<Schemaname="TrailHeadType"id="TrailHeadTypeId">
<SimpleFieldtype="string"name="TrailHeadName">
<displayName><![CDATA[<b>TrailHeadName</b>]]></displayName>
</SimpleField>
<SimpleFieldtype="double"name="TrailLength">
<displayName><![CDATA[<i>Lengthinmiles</i>]]></displayName>
</SimpleField>
<SimpleFieldtype="int"name="ElevationGain">
<displayName><![CDATA[<i>Changeinaltitude</i>]]></displayName>
</SimpleField>
</Schema>
<!--ThisisanalogoustoaddingthreefieldstoanewelementoftypeTrailHead:
<TrailHeadType>
<TrailHeadName>...</TrailHeadName>
<TrailLength>...</TrailLength>
<ElevationGain>...</ElevationGain>
</TrailHeadType>
-->
<!--InstantiatesomePlacemarksextendedwithTrailHeadTypefields-->
<Placemark>
<name>Easytrail</name>
<ExtendedData>
<SchemaDataschemaUrl="#TrailHeadTypeId">
<SimpleDataname="TrailHeadName">Piinthesky</SimpleData>
<SimpleDataname="TrailLength">3.14159</SimpleData>
<SimpleDataname="ElevationGain">10</SimpleData>
</SchemaData>
</ExtendedData>
<Point>
<coordinates>-122.000,37.002</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Difficulttrail</name>
<ExtendedData>
<SchemaDataschemaUrl="#TrailHeadTypeId">
<SimpleDataname="TrailHeadName">MountEverest</SimpleData>
<SimpleDataname="TrailLength">347.45</SimpleData>
<SimpleDataname="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]
下面是使用的一个例子
<kmlxmlns="http://earth.google.com/kml/2.2">
<Document>
<name>ExtendedData+SchemaData</name>
<open>1</open>
<!--Createaballoontemplatereferringtotheuser-definedtype-->
<Styleid="trailhead-balloon-template">
<BalloonStyle>
<text>
<![CDATA[
<h2>Myfavoritetrails!</h2>
<br/><br/>
The$[TrailHeadType/TrailHeadName/displayName]is<i>$[TrailHeadType/TrailHeadName]</i>.
Thetrailis$[TrailHeadType/TrailLength]miles.<br/>
Theclimbis$[TrailHeadType/ElevationGain]meters.<br/><br/>
]]>
</text>
</BalloonStyle>
</Style>
<!--Declarethetype"TrailHeadType"with3fields-->
<Schemaname="TrailHeadType"id="TrailHeadTypeId">
<SimpleFieldtype="string"name="TrailHeadName">
<displayName><![CDATA[<b>TrailHeadName</b>]]></displayName>
</SimpleField>
<SimpleFieldtype="double"name="TrailLength">
<displayName><![CDATA[<i>Thelengthinmiles</i>]]></displayName>
</SimpleField>
<SimpleFieldtype="int"name="ElevationGain">
<displayName><![CDATA[<i>changeinaltitude</i>]]></displayName>
</SimpleField>
</Schema>
<!--InstantiatesomePlacemarksextendedwithTrailHeadTypefields-->
<Placemark>
<name>Easytrail</name>
<styleUrl>#trailhead-balloon-template</styleUrl>
<ExtendedData>
<SchemaDataschemaUrl="#TrailHeadTypeId">
<SimpleDataname="TrailHeadName">Piinthesky</SimpleData>
<SimpleDataname="TrailLength">3.14159</SimpleData>
<SimpleDataname="ElevationGain">10</SimpleData>
</SchemaData>
</ExtendedData>
<Point>
<coordinates>-122.000,37.002</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Difficulttrail</name>
<styleUrl>#trailhead-balloon-template</styleUrl>
<ExtendedData>
<SchemaDataschemaUrl="#TrailHeadTypeId">
<SimpleDataname="TrailHeadName">MountEverest</SimpleData>
<SimpleDataname="TrailLength">347.45</SimpleData>
<SimpleDataname="ElevationGain">10000</SimpleData>
</SchemaData>
</ExtendedData>
<Point>
<coordinates>-121.998,37.0078</coordinates>
</Point>
</Placemark>
</Document>
</kml>
添加任意的XML数据到一个要素中
向一个要素中添加用户数据最简单的方法是作为<ExtendedData>的值直接添加数据。GoogleEarth保存这个值但是不处理它。以这种方式添加的自定义数据元素需要包括一个名空间前缀。这个前缀可以被添加到kml元素中或者<ExtendedData>元素中。外部名空间前缀不需限定用户数据每一个实例,如下面的例子显示:
<kmlxmlns="http://earth.google.com/kml/2.2">
<Document>
<name>ExtendedDataTest</name>
<Placemark>
<name>CampsiteData</name>
<!--Importedschemarequiresuseofnamespaceprefix-->
<ExtendedDataxmlns: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>此文献为翻译文献,原文地址
相关文章推荐
- 【COCOS2D-X(1.X 2.X) Json(cpp版)及新加字体库篇】在Cocos2dx引擎中封装、解析Json(cpp版)数据以及添加自定义字体库
- 自定义组件—ListView_加头去头,加脚去脚、添加或删除ListView中的数据、
- 在cell.contentView上添加的Btn获取自定义的Cell的NSIndexPath和其他数据
- easyUI 渲染 combobox 加载数据源 && 添加自定义数据
- Discuz添加自定义数据调用模块
- C# 直接创建一个DataTable,并为之添加数据(自定义DataTable)
- @InitBinder添加自定义编辑器转换数据
- CArray使用简单介绍,如何添加标准数据类型,和自定义的类,或者自定义数据类型
- IOS菜鸟的所感所思(四)——自定义UICollectionViewCell以及网络数据的添加。
- 直接创建一个DataTable,并为之添加数据(自定义DataTable)
- 【每天一个demo】在CAD当中添加自定义数据
- 直接创建一个DataTable,并为之添加数据(自定义DataTable)
- 给栅格数据添加RasterFunction--自定义渲染方法
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- eCharts添加自定义geojson数据实现地图展示
- dedecms添加自定义标签显示非dede表数据
- c#(winform)中自定义ListItem类方便ComboBox和ListBox添加项完全解决(DropDownList 和Combox 数据绑定的常用方法)
- C# 直接创建一个DataTable,并为之添加数据(自定义DataTable)
- 如何在内存中自定义表用于添加和删除数据
- Discuz! X2.5 添加自定义数据调用模块(简单方法)