kml gx:Track ExtendedData显示是否适用于Google Earth Plugin?

时间:2012-03-14 20:44:30

标签: kml google-earth-plugin

正如您可能猜到的那样,它对我不起作用,而且我一直在寻找明确的答案或解决方法。我知道地图不支持它。

以下是kml:

示例
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
  <name>Track</name>
  <open>1</open>
  <Schema name="Info" id="InfoId">
    <gx:SimpleArrayField kml:type="string" kml:name="MyField">
      <displayName>Value</displayName>
    </gx:SimpleArrayField>
  </Schema>
  <Folder>
    <name>Track History</name>
    <open>1</open>
    <Placemark>
      <name>Track</name>
      <gx:Track>
        <extrude>1</extrude>
        <altitudeMode>absolute</altitudeMode>
        <when>2012-03-12T05:59:09Z</when>
        <when>2012-03-12T05:59:11Z</when>
        <when>2012-03-12T05:59:13Z</when>
        <gx:coord>-76.1558297472738 43.02432853192255 1544.41929539293</gx:coord>
        <gx:coord>-76.136216188444 43.07112543504023 1454.468177223578</gx:coord>
        <gx:coord>-76.1190908056531 43.10944870095626 1456.513482289223</gx:coord>
        <ExtendedData>
          <SchemaData schemaUrl="#InfoId">
            <gx:SimpleArrayData kml:name="MyField">
              <gx:value>one</gx:value>
              <gx:value>two</gx:value>
              <gx:value>three</gx:value>
            </gx:SimpleArrayData>
          </SchemaData>
        </ExtendedData>
      </gx:Track>
    </Placemark>
  </Folder>
</Document>
</kml>

这将在地球桌面客户端中按预期显示。但是,当使用插件加载到基于浏览器的应用中时,MyField ExtendedData(与InfoId架构相关联)不会出现在与跟踪点关联的气球中。

我认为它可能与scrubbing有关,所以尝试将事件处理程序附加到balloonopening事件并使用getBalloonHtmlUnsafe()获取气球内容,希望我可以创建一个新的气球与轨迹点的未刷新内容,但它不存在。当使用getKml()获取时, 以原始形式存在。

除了创建这个简单的基本案例之外,我还尝试使用ge.parseKml()而不是网络链接或google.earth.fetchKml()从字符串文字中加载它。

因此,在插件中不支持使用suggested ExtendedData技术gx:Track,或者至少不起作用。有人可以证实这一点,或者告诉我我错了什么?

或者,我可以在上面提到的气球事件处理程序中检索一个地标,该地标可用于在所选的轨道位置正确放置气球,但无法找到一种方法来检索我的轨道的数组索引可能会用来从kml DOM中自己选择数据。对象看起来是宿主对象,因此任何特殊的apis都不能枚举到gx:Track Placemark中。但是我的真实数据集很大(为什么我要尝试使用gx:Track!)而且我不想在JavaScript中操纵所有这些数据。

哦,而且我主要使用的是Win7和:

Google Chrome version: 17.0.963.79 m
Google Earth plugin version: 6.2.1.6014
Google Earth API version: 1.010

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

简短答案是否定的,Google地球插件仅支持Kml和GX扩展程序的子集(例如<gx:Tour><gx:LatLonQuad>等)。

擦洗是一个红色鲱鱼,它只剥离可能是恶意代码(iframe,对象等)的元素,它不会剥离任何Kml或扩展元素(因为你的getKml()测试确认)...

答案很长,您可以显示数据,但您需要自己解析和格式化。即使对于具有一些支持的gx元素(即<gx:Tour>),仍然必须进行一些homespun解析来访问数据。

总而言之,扩展数据支持在api中非常弱,即使最基本的未键入名称/值对也不是真正支持。

虽然有一个开放的功能请求可以添加此功能,但在线程中讨论了一些可能对您有用的解决方法。

http://code.google.com/p/earth-api-samples/issues/detail?id=16