gx:对ExtendedData进行跟踪和动态更新

时间:2012-05-30 22:30:28

标签: kml google-earth

我希望在Google地球的<gx:Track>上向<NetworkControlLink>添加新坐标和相关数据点。我已经看到很多关于如何使用<gx:Track>创建<ExtendedData>以及如何在通用<Update>对象上执行<Point>的示例,但我没有看到很多讨论都。我能找到的最接近的东西是这个链接,几乎击中了头上的钉子:http://groups.google.com/group/kml-support-advanced/browse_thread/thread/0d2cbefd087d576e?pli=1

不幸的是,这个链接没有得到任何回复,原始海报没有提供他的orig_track.kml文件,否则我已经能够对他正在做的事情进行逆向工程,因为他声称他发现了解决方案。

现在我在文件<Placemark>中定义test.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>

我认为我的问题可能是如何引用<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>

我希望这清楚到可以理解!提前感谢您提供的任何指导。

1 个答案:

答案 0 :(得分:0)

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

但是,ExtendedData是另一回事,我还没有测试过更新。如果它不能按预期工作,请在此处留下评论,如果适用,请在发生的事情和更新后的代码中留言。或者,您可以删除ExtendedData,然后重新创建它。

您可能也会对http://www.unchartable.com/2011/05/google-io-high-performance-kml-for.html的Sean Askay的博客文章感兴趣(相关视频大约需要17分钟,该帖子中包含一些带有工作曲目更新示例的演示代码的链接)。< / p>