【问题标题】:Storing custom data in KML ExtendedData在 KML ExtendedData 中存储自定义数据
【发布时间】:2015-05-03 11:12:34
【问题描述】:

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

我正在尝试将 ExtendedData 编写为无类型的任意标签,如 namespace_prefix:other 下的 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>

我知道有其他方法可以包含特定于应用程序的数据(即 等)——但对于这个问题,我有兴趣弄清楚为什么 Google 自己的软件将其报告为无效,当它直接来自他们自己的例子时。我是否在 KML 中遗漏了其他内容,还是我误解了文档?

【问题讨论】:

    标签: xml kml google-earth


    【解决方案1】:

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

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

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

    这是一个在 KML 中为扩展数据使用真实命名空间的示例。此示例使用都柏林核心命名空间将元数据转换为 KML: https://productforums.google.com/d/msg/maps/8pbTmPIbj18/J_w2mjRWyQoJ

    如果要验证 KML 中的任意命名空间,您不能使用 Google 地球的验证。您需要一个可识别 XML 模式的验证器,例如独立的注释行工具 XmlValidate。有关 Google 地球验证的进一步讨论,请访问 here

    【讨论】:

    • 太好了,感谢您提供的信息。令人震惊的是,这个问题在 5 多年前就被报道过,但仍未得到解决。我想现在可以安全地假设它永远不会。很遗憾,因为通过在 Google 地球中打开它们(无需互联网连接)来验证 KML 肯定要方便得多。不过,感谢您的彻底回答! :)
    【解决方案2】:

    我也对此有所了解——为问题和答案投票。但我确实想补充一点,您复制的 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。

    【讨论】:

    • 我同意@GerardONeill。即使使用第二个站点的正确示例,我也从 Google 地球中观察到相同的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2018-04-02
    • 2011-02-11
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多