2011-09-09 73 views
4

我正在開發一個應用程序,通過<NetworkLink>(啓動時間間隔刷新)鏈接到其他本地文件的KML文件啓動Google地球。我正在嘗試定義一個將地圖居中(飛到)特定位置的KML文件。KML網絡鏈接 - 飛到

Network Link有一個標籤,它會飛到文件中的第一個地標或FlyTo。但是,只要文件被刷新,這將執行飛行,在我的情況下,是時間間隔到期。有什麼方法可以讓fly-to命令只在鏈接的網絡文件發生更改時執行,而不是每次都執行?有沒有辦法讓Fly To處理一次,直到鏈接的文件被改變了?我的NetworkLink文件定義如下:

<NetworkLink> 
    <name>My Fly To Request</name> 
    <Link> 
     <href>MyFlyTo.kmz</href> 
     <refreshMode>onInterval</refreshMode> 
     <refreshInterval>2</refreshInterval> 
    </Link> 
    </NetworkLink> 

應用程序會經常更新特定的地標,以用戶請求爲中心。它不是一個需要以中心爲中心的靜態地標,而是一個會經常變化的地標。

回答

2

我相信你可以通過在Kml中使用ID屬性和NetworkLinkControlUpdate元素的組合來實現此目的。

MyFlyToRequest.kml文件包含加載數據文件的NetworkLink,其中包含數據,它的flyToView元素設置爲true。通知過的網絡鏈接也有request

MyFlyToRequest.kml

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<NetworkLink id="request"> 
    <name>My Fly To Request</name> 
    <Link> 
     <href>http://www.yourserver.com/MyFlyTo.kmz</href> 
     <refreshMode>onInterval</refreshMode> 
     <refreshInterval>2</refreshInterval> 
    </Link> 
    <flyToView>1</flyToView> 
</NetworkLink> 
</kml> 

第二個文件,MyFlyTo.kmz的ID,是加載的一個。它有你當前的數據,但是,它也會有一個額外的NetworkLink加載一個新的第三個文件。

MyFlyTo.kmz - 編輯

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<Document id="data"> 
    <visibility>1</visibility> 
    <NetworkLink> 
    <name>Update MyFlyToRequest</name> 
    <Link> 
     <href>http://www.yourserver.com/TurnOffFlyTo.kml</href> 
    </Link> 
    </NetworkLink> 
    <Placemark> 
    <name>This is flown to once (hopefully)</name> 
     <Point> 
     <coordinates>52,0,0</coordinates> 
     </Point> 
    </Placemark> 
</Document> 
</kml> 

新的第三個文件是TurnOffFlyTo.kml的關鍵設立的一部分,它包含了NetworkLinkControl爲目標的request網絡鏈接在第一MyFlyToRequest.kml文件。它只是設置flyToView元素爲0

TurnOffFlyTo.kml

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<NetworkLinkControl> 
    <Update> 
    <targetHref>http://www.yourserver.com/MyFlyToRequest.kml#request</targetHref> 
    <Change> 
     <NetworkLink id="request"> 
      <!-- turn off the flyto behaviour --> 
      <flyToView>0</flyToView> 
     </NetworkLink> 
    </Change> 
    </Update> 
</NetworkLinkControl> 
</kml> 

最終文件TurnOnFlyTo.kml只需再次retoggles的一個FlyTo行爲。

TurnOnFlyTo.kml

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<NetworkLinkControl> 
    <Update> 
    <targetHref>http://www.yourserver.com/MyFlyToRequest.kml#request</targetHref> 
    <Change> 
     <NetworkLink id="request"> 
      <!-- turn off the flyto behaviour --> 
      <flyToView>1</flyToView> 
     </NetworkLink> 
    </Change> 
    </Update> 
</NetworkLinkControl> 
</kml> 

的邏輯如下。

  1. MyFlyToRequest.kml負載MyFlyTo.kml
  2. flyto被啓用,因此所述視圖移動第一第一標,等等,在MyFlyTo.kml
  3. 鏈路在MyFlyTo.kml負載TurnOffFlyTo.kml。
  4. Update in TurnOffFlyTo。kml三個在MyFlyToRequest.kml中禁用flyto
  5. 文件之一,刷新,加載文件中的兩個...

如果需要重新啓用一個FlyTo,您只需將裝載文件四強。如果MyFlyTo.kmz中的數據是由您生成的,那麼在TurnOffFlyTo.kml被調用的地方加載TurnOnFlyTo.kml就是一個簡單的例子。

所有這一切說,這是沒有測試,因此可能無法正常工作,雖然原則上我不明白爲什麼它不會。

如果聽起來像你可能嘗試的東西是一些應該幫助的資源。

NetworkLinkControl中參考

http://code.google.com/apis/kml/documentation/kmlreference.html#networklinkcontrol

使用更新

http://code.google.com/apis/kml/documentation/updates.html

+0

這是一個很酷的想法。我沒有詳細介紹OP的一點是,地標數據經常發生變化。我想我可能不需要TurnOnFlyTo.kml,每次我只是重新加載前3個文件,但我不確定GE將執行的執行順序。 –

+0

另外,MyFlyTo.kmz似乎不是有效的kml文檔。我不認爲你可以有一個節點。 –

+0

有一個網絡鏈接和文件是好的,有可能是一個錯字,因爲我只是寫在答案中。嘗試將地點標記和鏈接都放在文檔元素中。 – Fraser