2012-05-30 64 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