2012-05-30 35 views
1

我正在通过Google地球上的<NetworkControlLink>将新坐标和相关数据点添加到<gx:Track>。我见过很多关于如何在<Point>对象上创建<gx:Track>的示例,<ExtendedData>以及<Update>如何创建对象,但我没有看到很多讨论这两个对象的示例。我能找到的最接近的是这个环节,几乎击中了要害:http://groups.google.com/group/kml-support-advanced/browse_thread/thread/0d2cbefd087d576e?pli=1gx:扩展数据上的跟踪和动态更新

不幸的是,这个环节没有得到任何回应,而原来的海报没有提供他的orig_track.kml文件,否则我因为他声称自己发现了一个解决方案,所以他能够逆向工程。

<Placemark> 
    <name>Target</name> 
    <description>...</description> 
    <gx:Track id="orig_track"> 
     <when>2012-05-29T22:45:00Z</when> 
     <when>2012-05-29T22:45:10Z</when> 
     <gx:coord>-84.396863 33.774566 285</gx:coord> 
     <gx:coord>-84.396917 33.774474 285</gx:coord> 
     <ExtendedData> 
      <SchemaData schemaUrl="#schemaId" id="testID"> 
       <gx:SimpleArrayData name="sig_strength"> 
        <gx:value>60</gx:value> 
        <gx:value>65</gx:value> 
       </gx:SimpleArrayData> 
       <gx:SimpleArrayData name="gps_lock"> 
        <gx:value>true</gx:value> 
        <gx:value>true</gx:value> 
       </gx:SimpleArrayData> 
      </SchemaData> 
     </ExtendedData> 
    </gx:Track> 
</Placemark> 

我试图通过具有<NetworkLinkControl>对象,看起来像这样来更新它:

<NetworkLinkControl> 
    <Update> 
     <targetHref>test.kml<targetHref> 
     <Create> 
      <gx:Track targetId="orig_track_10003"> 
       <when>2012-05-29T22:45:20Z</when> 
       <when>2012-05-29T22:45:30Z</when> 
       <when>2012-05-29T22:45:40Z</when> 
       <when>2012-05-29T22:45:50Z</when> 
       <gx:coord>-84.396992 33.774443 285</gx:coord> 
       <gx:coord>-84.397078 33.774421 285</gx:coord> 
       <gx:coord>-84.397188 33.774363 286</gx:coord> 
       <gx:coord>-84.397316 33.774298 287</gx:coord> 
      </gx:Track> 
      <SchemaData schemaUrl="test.kml#schemaId" targetId="testID"> 
       <gx:SimpleArrayData> 
        <gx:value>60</gx:value> 
        <gx:value>60</gx:value> 
        <gx:value>65</gx:value> 
        <gx:value>65</gx:value> 
       </gx:SimpleArrayData> 
       <gx:SimpleArrayData> 
        <gx:value>true</gx:value> 
        <gx:value>true</gx:value> 
        <gx:value>true</gx:value> 
        <gx:value>true</gx:value> 
       </gx:SimpleArrayData> 
      </SchemaData> 
     </Create> 
    </Update> 
</NetworkLinkControl> 

现在我在一个文件test.kml定义<Placemark>这样我认为我的问题可能在于<SchemaData>的实例是如何引用的。如果我没有弄错,<Schema>定义了数组中的字段,当我定义上面的<Placemark>时,我用<SchemaData>实例化了这个数组。我不确定如何抓取我创建的阵列的实例,并使用<Update><Create>向其添加元素。我<Schema>看起来是这样的:

<Schema name="schema" id="schemaId"> 
    <gx:SimpleArrayField name="sig_strength" type="int"> 
     <displayName>Signal Strength</displayName> 
    </gx:SimpleArrayField> 
    <gx:SimpleArrayField name="gps_lock" type="bool"> 
     <displayName>GPS Lock Status</displayName> 
    </gx:SimpleArrayField> 
</Schema> 

我希望这是不够清楚明白!预先感谢您提供的任何指导。

回答

0

我会建议使用MultiTrack而不是轨道并更新它(添加新的Track子项以扩展GPS路径)。

但是,ExtendedData是另一回事,我还没有测试过更新。如果它不像您期望的那样工作,请在此处留下评论,说明发生了什么情况,如果适用,请更新您的代码。或者,您可以删除ExtendedData,然后重新创建它。

您可能也有兴趣从Sean Askay的博客文章http://www.unchartable.com/2011/05/google-io-high-performance-kml-for.html(相关视频在17分钟左右,并且该帖子有一些演示代码与工作轨道更新示例的链接)。

+0

感谢您的视频链接;这是非常丰富的。 我评论说ExtendedData只是为了让更新工作起作用,但我仍然遇到了麻烦。我模仿了Sean Askay演示的例子。他的NetworkLink似乎只能从网络上运行。例如,我为轨道更新演示(Mt.肯尼亚航班)下拉了所有kml文件,将父级NetworkLink更改为本地文件夹,并试图在本地运行示例。它不会更新。在向本地文件提供链接路径/ URL时是否存在一些细微差别? – nowls007

+0

更新:Google地球将NetworkLinks指向本地文件视为“安全违规”。它只在被引用的文件通过HTTP托管时才有效。我建立了一个小型的本地HTTP服务器并使其工作。 下一步将获得ExtendedData数组的工作和更新! – nowls007