2012-02-17 81 views
0

我試圖使用KML實現區域的層次結構中 KML 2.1 Tutorial顯示標層次結構在谷歌地球

形容,我想有一個功能(多邊形或圖標)表示區域與當區域變爲活動狀態我想顯示代表每個區域直接子項的功能,但不再顯示代表父區域的圖標。

一個例子是如果我有一個代表加拿大的地區和該地區中部的地標。當加拿大地區變得活躍時,我希望加拿大的地標消失,並希望在加拿大各省(卑詩省,艾伯塔省等地區和地標)上顯示地標。然後,當BC區域變得活躍時,我想用bc中的城市地標代替bc地標。

任何幫助將不勝感激。 謝謝。

+0

找到[這個](http://stackoverflow.com/questions/689336/group-features-in-google-earth-to-hide-detail-when-zoomed-out),但仍然在一個樣本如何讓這個工作 – Anark 2012-02-17 15:41:59

回答

0

你是在正確的軌道上,地區是你想要的。看看這個頁面瞭解更多信息關於如何使用它們

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

尤其是,您需要了解詳細的(LOD)的水平。 LOD確定激活和禁用區域的視圖邊界。最後你需要用這種格式創建區域。

<Region> 
    <LatLonAltBox> 
    <north>50</north> 
    <south>45</south> 
    <east>28</east> 
    <west>22</west> 
    </LatLonAltBox> 
    <Lod> 
    <minLodPixels>128</minLodPixels> 
    <maxLodPixels>1024</maxLodPixels> 
    </Lod> 
</Region> 

您可以設置-1因此該地區始終顯示,不管別人怎麼遠縮小,或者如果你使用上面(128)的值,這意味着您所設置的邊框,必須承擔起128×128像素在觀看者屏幕被激活之前(見)。

這是您在放大視圖時用來關閉視圖的方法。或者,在-1時關閉視圖,因此無論用戶放大多大,IN都不會關閉。

對於你的問題,你將有一個地區在加拿大中間包含地標。該區域的微小像素爲-1,與另一個區域的小像素對應的極大像素(顯示各省的地標),我將分別爲每個省製作一個區域。

訣竅正在制定的界限 - 我用一個方形面積4分,然後看看它的代碼提取等

其實,這裏是一個偉大的頁面向您展示如何創建區域 - 確保你下載一個名爲「屏幕疊加尺寸指南」的KML - 它使事情更容易

http://earth.google.ca/intl/en_ca/outreach/tutorial_region.html

0

我試圖做同樣的事情,並與然而一個可行的解決方案想出了它需要很多調用服務器。

在從http://example.com/zones.kml加載你的基地KML你會

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.1"> 
<Document id="base"> 
    <Folder id="1_folder"> 
    //Region responsible for hiding the current (Canada) Placemark when zoomed in and made inactive ALSO responsible for hiding children(BC, Alberta...) Placemarks when active 
    <Region> 
     <LatLonAltBox> 
      <north>74.79903411865234</north> 
      <south>41.508766174316406</south> 
      <east>-52.03630065917969</east> 
      <west>-139.96746826171875</west> 
     </LatLonAltBox> 
     <Lod> 
     <maxLodPixels> 
      1024 
     </maxLodPixels> 
     </Lod> 
    </Region> 

    //NetworkLink that hides children Placemarks when zooming out 
    <NetworkLink> 
     <refreshVisibility>1</refreshVisibility> 
     <Link> 
     <href>http://example.com/1/hide_children.kml</href>    
     <viewRefreshMode>onRegion</viewRefreshMode> 
     </Link> 
    </NetworkLink> 

    //The Canada Placemark 
    <Placemark id="1"> 
     <name>Canada</name> 
     <Point> 
     <coordinates>-96.00188446044922,58.153900146484375</coordinates> 
     </Point> 
    </Placemark> 

    //Networklink for Loading Children While Zooming in 
    <NetworkLink> 
     <refreshVisibility>1</refreshVisibility> 
     // Same Region as above but with minLodPixels instead of maxLodPixels 
     <Region> 
     <LatLonAltBox> 
      <north>74.79903411865234</north> 
      <south>41.508766174316406</south> 
      <east>-52.03630065917969</east> 
      <west>-139.96746826171875</west> 
     </LatLonAltBox> 
     <Lod> 
     <minLodPixels>1024</minLodPixels> 
     </Lod> 
     </Region> 
     <Link> 
     <href>http://example.com/zones/1.kml</href>     
     <viewRefreshMode>onRegion</viewRefreshMode> 
     </Link> 
    </NetworkLink> 
    </Folder> 
</Document> 
</kml> 

這就要求加載到隱藏或顯示特定標的的孩子兩個KML文件。

隱藏的孩子們從http://example.com/1/hide_children.kml被加載,並且包含NetworkLinkControl中隱藏的孩子

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.1"> 
    <NetworkLinkControl> 
    <Update> 
     <targetHref>http://example.com/zones.kml</targetHref> 
     <Change> 
     <Folder targetId="1_children"><visibility>0</visibility></Folder> 
     </Change> 
    </Update> 
    </NetworkLinkControl> 
</kml> 

用於顯示會從http://example.com/1.kml加載孩子的KML和包含NetworkLinkControl中展現孩子們的KML的兒童

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.1"> 
    <NetworkLinkControl> 
    <Update> 
     <targetHref>http://example.com/zones.kml</targetHref> 
     <Create> 
     <Folder targetId="1_folder"> 
      <Folder id='1_children'> 
      //This folder is the same as the original zone 
      <Folder id="2_folder"> 
       //Empty region if the zone has no children 
       <Region></Region> 

       //No need for networklink to hide children if zone has no children 

       //Placemark 
       <Placemark id="2"> 
       <name>BC</name> 
       <Point> 
       <coordinates>-122.95623779296875, 50.06098937988281</coordinates> 
       </Point></Placemark> 
      </Folder> 

      //Same for other Provinces 
      //<Folder id="3_folder"></Folder> 
      //<Folder id="4_folder"></Folder> 

      </Folder> 
     </Folder> 
     </Create> 
    </Update> 
    </NetworkLinkControl> 
</kml> 

這將是最好的,如果你可以定義2個不同的地區之一minLod,一個用於maxLod,所以你沒必要有那麼多的電話服務器和你沒不必調用服務器來加載你已經加載的孩子,但我還沒有想出如何做到這一點呢。

這需要進行相當多的優化。請讓我知道是否有人可以找到更直接的方式來做到這一點。謝謝