在KML ExtendedData中存储自定义数据

时间:2015-03-02 22:57:37

标签: xml kml google-earth

我正在编写一些代码来输出KML文件,其中某些特定于应用程序的信息存储在ExtendedData节点中。作为调试KML有效性的一种简单方法,我使用Google地球时显示了所有错误的提示"选项已启用(http://screencast.com/t/UDkJc6Nv5G4)。

我尝试将ExtendedData编写为无类型的任意标记,如 namespace_prefix:其他下的KML参考中所述(请参阅:https://developers.google.com/kml/documentation/kmlreference?csw=1#extendeddata)问题是,即使我复制了他们的示例代码正好,Google地球抱怨一个未知元素:http://screencast.com/t/bCMgaDiDYdWt

这是完整的KML:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
    <name>Sample KML.kml</name>
    <Placemark>
        <name>Test KML</name>
        <Point>
            <coordinates>-118.405022621,33.943893977,0</coordinates>
        </Point>
        <ExtendedData xmlns:prefix="camp">
            <camp:number>14</camp:number>
            <camp:parkingSpaces>2</camp:parkingSpaces>
            <camp:tentSites>4</camp:tentSites>
        </ExtendedData>
    </Placemark>
</Document>
</kml>

我知道有其他方法可以包含特定于应用程序的数据(例如&lt; Data&gt;,&lt; SchemaData&gt;等) - 但对于这个问题,我有兴趣找出原因谷歌自己的软件报告这是无效的,直接来自他们自己的例子。我是否从KML中遗漏了其他内容,或者我是否误解了文档?

2 个答案:

答案 0 :(得分:4)

这个例子是正确的。但是,如果在Google地球中启用了“显示所有错误提示”选项,则扩展数据的任意命名空间始终显示为错误。

这在2009年被报道为一个问题,但尚未修复。 https://code.google.com/p/earth-issues/issues/detail?id=438

对扩展数据使用任意名称空间是KML 2.2规范定义的KML的有效用法,因此它实际上不是错误。谷歌地球只是报告它不知道如何处理该元素是正确的,因为adding arbitrary XML data to a Feature谷歌地球保留此数据但不处理它。 应报告为错误。

以下是在KML中使用真实命名空间扩展数据的示例。此示例使用Dublin Core名称空间将元数据用于KML: https://productforums.google.com/d/msg/maps/8pbTmPIbj18/J_w2mjRWyQoJ

如果要在KML中验证任意名称空间,则无法使用Google地球的验证。您需要一个支持XML Schema的验证器,例如独立的注释行工具XmlValidate。有关Google地球验证的进一步讨论,请参见here

答案 1 :(得分:1)

我也对此感到满意 - 对问答的支持。但我确实想补充一点,你复制的XML在技术上并不正确。你来自:

https://developers.google.com/kml/documentation/kmlreference#extendeddata

而更好的解释和正确的xml位于:

https://developers.google.com/kml/documentation/extendeddata

如上所述 - 它对这些错误没有帮助。如果您的版本完全正常,那是因为您直接使用命名空间,而不是前缀。

以下是第二个网站的示例:

<ExtendedData xmlns:camp="http://campsites.com">
  <camp:number>14</camp:number>
  <camp:parkingSpaces>2</camp:parkingSpaces>
  <camp:tentSites>4</camp:tentSites>
</ExtendedData>

请注意,“prefix”替换为实际前缀(“camp”),命名空间用于定义前缀,但不使用。

只是2c。