在KML ExtendedData中存储自定义数据

3
我正在编写一些代码来输出KML文件,并在ExtendedData节点中存储某些特定应用程序信息。为了轻松调试我的KML文件的有效性,我启用了Google Earth的“显示所有错误提示”选项 (http://screencast.com/t/UDkJc6Nv5G4)。
我正在尝试将ExtendedData编写为未命名的任意标签,正如KML参考文档中的namespace_prefix:other所述(见: https://developers.google.com/kml/documentation/kmlreference?csw=1#extendeddata)。问题是,即使我精确复制他们的示例代码,Google Earth也会抱怨未知元素: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>

我知道有其他的方法可以包含应用程序特定的数据(例如<Data>, <SchemaData>等),但是对于这个问题,我想弄清楚为什么谷歌自己的软件报告这是无效的,因为它直接来自他们自己的示例。我是否遗漏了KML中的其他内容,或者我是否误解了文档?

2个回答

4
这个例子是正确的。然而,在Google Earth中启用“显示所有错误提示”选项时,扩展数据的任意命名空间总是显示为错误。这在2009年被报告为一个问题,但至今未得到解决。 https://code.google.com/p/earth-issues/issues/detail?id=438 在KML 2.2规范中,对于扩展数据使用任意命名空间是有效的用法,因此这并不是一个真正的错误。Google Earth只是报告它不知道如何处理该元素,这是正确的,因为当向要素添加任意XML数据时,Google Earth会保留此数据,但不会处理它。它不应被报告为错误。
这是一个使用真实命名空间扩展KML中数据的示例。此示例使用Dublin Core命名空间来提供KML元数据: https://productforums.google.com/d/msg/maps/8pbTmPIbj18/J_w2mjRWyQoJ 如果想要验证KML中的任意命名空间,则无法使用Google Earth的验证。您需要使用XML Schema感知验证器,例如独立的命令行工具XmlValidate。有关在Google Earth中进行验证的进一步讨论,请参见here

太好了,感谢提供这些信息。令人惊讶的是,这个问题在半个多世纪前就被报告了,但仍未得到解决。我想现在可以安全地假设它永远不会被解决了。很遗憾,因为通过在Google Earth中打开KML文件(无需互联网连接)来验证它们肯定更方便。不过还是非常感谢你详细的回答! :) - J23

1
我也遇到了这个问题,感谢提问者和回答者。但是我想补充一点,你复制的 XML 技术上并不正确。你的 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”)替换,命名空间用于定义前缀,但不会被使用。
只是两分钱。

我同意@GerardONeill的观点。我发现即使使用第二个网站上的正确示例,Google Earth 仍然存在相同的错误。 - Mike Finch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接