本教學課程旨在協助您熟悉 KML 2.1 中有哪些令人期待的新功能。如果您有興趣參加「Google 地球」的快速導覽,請按一下連結,以查看「Google 地球」的樣本。如果您想進一步瞭解新版 KML 元素,請深入查閱相關文字,然後研究相關圖表,瞭解這些功能如何為新版 Google 地球增加靈活彈性與功能。我們很期待看到您對這些工具的創新簡報和導覽。
如要進一步瞭解本文討論的元素,請參閱 KML 2.1 參考資料和 KML 2.1 架構。 |
KML 2.1 的重要功能
- 地區 - 「區域」可提供精度和詳細程度的行為,可讓您調整在 Google 地球中呈現資料的方式。地區搭配 NetworkLinks 使用時,可串流傳輸非常大型的資料集,並以不同解析度解析度「智慧」載入資料 (請參閱超大型疊加層一節)。您也可以使用「區域」模擬 Google 地球的圖層。
- 紋理 3D 模型 - 在 3D 模型中,您可以輕鬆地在其座標空間建立模型,然後匯出成 COLLADATM 檔案,然後匯入 Google 地球,然後放到地球表面上。
- 漸進式更新 - 現在您可以逐步更新由 NetworkLinks 載入的資料,例如變更、新增及刪除之前載入至「Google 地球」的 KML 資料。
- 到期日/時間 - 您可以指定 dateTime 重新整理資料,讓快取清除且資料保持最新狀態。
- 圓形按鈕資料夾 - 為了讓使用者一次只能選取資料夾中的一個項目,請使用新的 ListStyle 元素指定圓形按鈕資料夾。
冷樣
- 簡易區域示範
- 匯入歷史圖像:Mountain View DOQQ,1991 年 (極大型資料集,分割為載入 NetworkLinks 的子區域)
- 大學大學地標 (採用紋理的 3D COLLADA 模型;採用 JPEG 的模型)
- 網路連結動態更新
- 在指定的日期/時間強制重新整理資料 (使用新的到期時間功能)
- 收音機資料夾
查看規格!
以下是 KML 2.1 中引入的一些主要新元素:
使用地區
地區是功能強大的全新 KML 功能,可讓您在不犧牲效能的情況下,在 Google 地球中新增超大型資料集。只有在使用者檢視並佔據畫面的某些部分時,系統才會載入及繪製資料。透過「區域」,您可以為資料提供個別的細節等級,這樣一來,只有在資料填滿螢幕空間足以顯示詳細資料的部分時,系統才會載入精細的細節。
注意:在 KML 中,部分類別衍生自「父項」類別。衍生的「子項」類別會繼承父項類別的所有元素,並新增自己的特定元素。(這是物件導向系統的常見技術)。為了方便起見,本節將參照父項類別,而非列出所有衍生的子項類別。例如:
- 地圖項目是指任何衍生自特徵的 KML 元素:「文件」、「資料夾」、「區域疊加層」、「網路連結」、「地點標記」和「螢幕疊加層」。
- 幾何圖形是指 KML 中的任何幾何圖形元素:點、多邊形、線性 Ring、LineString、Model、MultiGeometry。
- 疊加層是指衍生自疊加層:區域疊加層和螢幕疊加層的元素。
請參閱 KML 參考資料,瞭解在 KML 元素中繼承的圖表。
重要概念
任何特徵都可以包含地區。區域會影響地標的幾何圖形或疊加層圖像的顯示設定。區域可定義受影響幾何圖形或疊加層的破壞和詳細程度行為。地區會沿用 KML 階層,並影響階層中較低層級的功能顯示設定。
本節說明瞭解地區所需的重要概念:
定界框
區域具有 <LatLonAltBox>,可定義資料的定界框。定界框是指包含一組物件或資料點的磁碟區。區域中的 <LatLonBox> 與區域疊加層中的 <LatLonBox> 類似,具有北、南、東、西的邊界。如果地區包含的資料為 3D 或高度為 2D,則地區的 <LatLonAltBox> 還需包含最小高度 <minAltitude> 和最高海拔 <maxAltitude>。
當 (1) 區域出現在檢視畫面中,且 (2) 的 <LatLonAltBox> 投影畫面大小落在該區域的指定像素範圍內時,系統會繪製與此定界框相關聯的物件,如細節層級 (LOD) 中所述。同時符合這兩項條件時,地區會說是「有效」。
細節層級 (LOD)
與區域相關的第二個重要概念是詳細程度,或簡稱 LOD。由於電腦螢幕的空間有限,所以最好將設定方式設為在有足夠像素顯示充分資料的情況下,才載入大量資料。當區域佔用螢幕上相對小的部分 (可能是使用者從遠處檢視,或是視角明顯可見),LOD 機制可讓您 (KML 作者) 指定解析度較低的資料集,以取代全解析度資料。此解析度較低的資料集載入速度較快,而且由於其佔據了一小部分的螢幕,所以使用者可能不知道差異。
在地區,您可以使用 <minLodPixels> 和 <maxLodPixels> 元素來指定螢幕面積 (單位為正方形像素)。當資料投影到螢幕上時,其畫面必須大於 <minLodPixels> 且小於 <maxLodPixels>,才能顯示在畫面上。一旦區域的預計大小超出這些限制,系統就不會再顯示該區域,而且區域也會變成無效狀態。
如果您希望資料發揮無限大大小,請在該情況下,為 <maxLodPixels> 指定 -1 (預設值)。
範例 1:區域疊加層的區域
首先,讓我們來看看一個簡單的範例,在區域中建立一個 2D 疊加層的區域。此範例使用包含 1991 年加州山景城歷史資料的地面疊加層。當使用者放大該區域時,系統就會顯示重疊。疊加層在第一次顯示時看起來會像這樣 (範例檔案也包含一個白色的 LineString,能讓疊加層更顯眼):
在這個範例中,<minLodPixels> 為 128,這表示當區域佔據 128 平方像素時,GroundOverlay 會進入檢視畫面。(此範例使用 <maxLodPixels> 的預設值 -1,表示當使用者以這個角度放大時,螢幕仍保持可見)。用於此疊加層的圖片為 256 平方像素。
使用者放大圖片時的外觀如下:
以下是傾斜圖片在顯示之前看不像的樣子,因為其畫面空間少於 <minLodPixels> 值:
這項資料的 <LatLonAltBox> 不需要包含 <minAltitude> 與 <maxAltitude> 元素,因為資料是保持平面的,而且是地面。區域 <LatLonAltBox> 中資料的定界框與區域疊加層 <LatLonBox> 的界線相同,如下方 KML 檔案所示:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>Flat Region</name>
<Region>
<LatLonAltBox>
<north>37.430419921875</north>
<south>37.41943359375</south>
<east>-122.080078125</east>
<west>-122.091064453125</west>
</LatLonAltBox>
<Lod>
<minLodPixels>128</minLodPixels>
</Lod>
</Region>
<GroundOverlay>
<name>Mountain View DOQQ</name>
<Icon>
<href>files/image.JPEG</href>
</Icon>
<LatLonBox>
<north>37.430419921875</north>
<south>37.41943359375</south>
<east>-122.080078125</east>
<west>-122.091064453125</west>
</LatLonBox>
</GroundOverlay> <Document> </kml>
此外,在 KML 檔案中,「地區」是圖片 (或幾何圖形) 的同層級,其能見度將受到影響。
現在您已經檢查了 KML 檔案,請按一下以下連結,將疊加層載入「Google 地球」。接著,嘗試使用不同的視角,觀察「區域」的檢視和檢視範圍,以根據所需的螢幕區大小而定。請注意,如果您讓檢視畫面的視角夠寬,或是拉近一點,則重疊空間會佔用 <minLodPixels> 需求,但螢幕空間太少,因此會消失。
在 Google 地球中查看範例 (historicOverlay.kmz)
高度
範例 2:3D 模型的區域
以下範例說明如何建構包含地面 3D 物件的區域。此區域的 <LatLonAltBox> 包含 300 公尺的 <maxAltitude>,因為這是建築物的高度。您可能認為這些建築物在紐約市中稱為聯合國大樓。
請注意,區域 <LatLonAltBox> 的界線不一定與「模型」的經度和緯度邊界完全一致。模型的相對座標是以其本身當地起點為基準,可能會與模型在地球上的實際位置相差。
<?xml version='1.0' encoding='UTF-8'?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>3D Region on ground</name>
<Placemark>
<name>United Nations Headquarters</name>
<visibility>0</visibility>
<Region>
<Lod>
<minLodPixels>128</minLodPixels>
</Lod>
<LatLonAltBox>
<north>40.750683130314</north>
<south>40.748162385230</south>
<east>-73.966608428427</east>
<west>-73.969476624071</west>
<minAltitude>0</minAltitude>
<maxAltitude>300</maxAltitude>
<altitudeMode>absolute</altitudeMode>
</LatLonAltBox>
</Region>
<Model>
<altitudeMode>absolute</altitudeMode>
<Location>
<longitude>-73.967763927199</longitude>
<latitude>40.749458312255</latitude>
<altitude>0.406173708576</altitude>
</Location>
<Link>
<href>models/un.dae</href>
</Link>
</Model>
</Placemark>
</Document>
</kml>
按下方連結,即可將檔案載入「Google 地球」。再嘗試不同的視角,查看建築物的顯示時間和移除時間。
查看 Google 地球的範例 (unitedNations.kmz)
範例 3:高度的 2D 疊加層區域
這個範例說明如何新增 2D 疊加層,以顯示在指定高度的地球表面上方。這項技術對於顯示天氣正面和空氣流量模式的資料非常實用。在本例中,這個範例顯示海拔為 100,000 公尺的小小雲層。
該區域的 <LatLonAltBox> 可以指定 <minAltitude> 與 <maxAltitude> 元素的值 100,000 公尺。(這兩個元素的值相同,因為「疊加層」為 2D 且沒有厚度)。<ElevationMode> 為「絕對」,也就是這個值是相對於海平面的數值。
請注意,GroundOverlay 的 <海拔高度> 值也是 100,000 (也就是與地區邊界方塊的高度值相符),且 GroundOverlay 的 <ElevationMode> 與地區 <ElevationMode> 的值相符。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>Flat Region at altitude</name>
<GroundOverlay>
<name>Cloud overlay</name>
<Region>
<LatLonAltBox>
<north>33.75</north>
<south>22.5</south>
<east>-45</east>
<west>-56.25</west>
<minAltitude>100000</minAltitude>
<maxAltitude>100000</maxAltitude>
<altitudeMode>absolute</altitudeMode>
</LatLonAltBox>
<Lod>
<minLodPixels>128</minLodPixels>
</Lod>
</Region>
<Icon>
<href>files/image.PNG</href>
</Icon>
<altitude>100000</altitude>
<altitudeMode>absolute</altitudeMode>
<LatLonBox>
<north>33.75</north>
<south>22.5</south>
<east>-45</east>
<west>-56.25</west>
</LatLonBox>
</GroundOverlay>
</Document>
</kml>
在 Google 地球中查看範例 (cloudRegion.kmz)
淡出式
您也可以為區域指定淡出範圍,讓物件從透明效果不透明,然後再往回透明。Google 地球使用 maxFadeExtent 來判斷當區域在可見區域的最大可見大小時,對於完全透明或不透明的坡度是多少,而當區域在最小可見大小時,則會使用 minFadeExtent 來判斷淡出的斜坡。漸層範圍是選擇性的,但可以防止不同解析度的 LineString 或多邊形之間「彈出」效果。處理效能方面的成本相當高昂,不應該與圖像搭配使用。
注意:淡出範圍適用於所有物體,但地標圖示除外。當淡出範圍大於 0.5 時,系統會繪製這些圖示。
以下範例說明淡出範圍對 LineString 的影響。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>Region in Placemark LineString</name>
<description>
The LineString corners mark the extent
of the Region LatLonAltBox.
The LineString minFadeExtent (at greatest range)
is 1/4 of the maxFadeExtent (at closest range)..
</description>
<Placemark>
<name>Region LineString</name>
<LineString>
<coordinates>
22,50,0
28,50,0
28,45,0
22,45,0
22,50,0
</coordinates>
</LineString>
<Region>
<LatLonAltBox>
<north>50</north>
<south>45</south>
<east>28</east>
<west>22</west>
</LatLonAltBox>
<Lod>
<minLodPixels>128</minLodPixels>
<maxLodPixels>1024</maxLodPixels>
<minFadeExtent>128</minFadeExtent>
<maxFadeExtent>512</maxFadeExtent>
</Lod>
</Region>
</Placemark>
</Document>
</kml>
在 Google 地球中查看範例 (fadeLineString.KML)
巢狀區域
「區域」的常見用途是利用巢狀結構來形成巢狀區域,其中較大型的「區域」與粗略解析度有關,而「區域」越小,與更精細的細節相關。在下圖中,每個區域都有一組 LOD 限制,用來指定關聯區域的預定螢幕大小 (以像素為單位)。使用者的視角越接近位置,因此由於區域會佔據更多螢幕空間,因此精細的細節 (LOD) 區域將生效。LOD 更精細的區域會取代先前載入的區域,粗略 LOD。
當連續巢狀區域變成作用中時,即可
- 累積與各區域相關聯的資料 (如下方超級疊加層範例所示)
- 使用先前的資料取代先前載入的地區資料 (如上圖所示)
子區域內的 <LatLonAltBox> 應完全納入其父項區域的 <LatLonAltBox>。地區會透過資料夾與 NetworkLink 階層繼承而來。在本機定義的區域,優先順序高於在資料夾階層中定義的區域。以下範例說明區域的本機範圍如何覆寫階層中定義較高的區域。在這個範例中,地標「ukraineRegion」會沿用父項文件中的「區域」。「romaniaFolder」資料夾指定了自己的「Region」(區域),由「romaniaRegion」地標使用。如需更多有關如何在 NetworkLinks 中使用地區來達到最佳效率的範例,請參閱「以地區為基礎的網路連結載入智慧型功能」一節。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>Nested Regions</name> <Region> <LatLonAltBox> <north>56.25</north> <south>45</south> <east>33.75</east> <west>22.5</west> </LatLonAltBox> <Lod> <minLodPixels>128</minLodPixels> <maxLodPixels>1024</maxLodPixels> </Lod> </Region> <Placemark> <name>ukraineRegion</name> <LineString> <tessellate>1</tessellate> <coordinates> 22.5,45,0 33.75,45,0 33.75,56.25,0 22.5,56.25,0 22.5,45,0 </coordinates> </LineString> </Placemark> <Folder> <name>romaniaFolder</name> <Region> <LatLonAltBox> <north>50.625</north> <south>45</south> <east>28.125</east> <west>22.5</west> </LatLonAltBox> <Lod> <minLodPixels>128</minLodPixels> <maxLodPixels>1024</maxLodPixels> </Lod> </Region> <Placemark> <name>romaniaRegion</name> <LineString> <tessellate>1</tessellate> <coordinates> 22.5,45,0 28.125,45,0 28.125,50.625,0 22.5,50.625,0 22.5,45,0 </coordinates> </LineString> </Placemark> </Folder> </Document> </kml>
區域性網路連結的「智慧」載入
以範例為基礎的地區性 NetworkLink 是在 Google 地球中發布龐大資料集的最有效率方法。您可以搭配使用地區與 NetworkLinks,建立指標階層,每個階層指向特定的子區域。如下方 KML 檔案所示的 <viewRefreshMode> 具有 onRegion 選項,該選項可只在地區啟用時載入區域資料。如果您為巢狀區域提供多個詳細程度,則只有在使用者的檢視點觸發下一次載入時,才會載入大量資料。以下「超級疊加層」一節提供了詳細的範例。
第 1 部分:上層檔案
如要執行這個範例,請照常儲存第一個部分。將第二個部分儲存為 romaniaRegion.KML,讓 NetworkLink 在啟動時可載入地區。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>Nested Regions</name> <Region> <LatLonAltBox> <north>56.25</north> <south>45</south> <east>33.75</east> <west>22.5</west> </LatLonAltBox> <Lod> <minLodPixels>128</minLodPixels> <maxLodPixels>1024</maxLodPixels> </Lod> </Region> <Placemark> <name>ukraineRegion</name> <LineString> <tessellate>1</tessellate> <coordinates> 22.5,45,0 33.75,45,0 33.75,56.25,0 22.5,56.25,0 22.5,45,0 </coordinates> </LineString> </Placemark> <NetworkLink> <name>romania NetworkLink</name> <Region> <LatLonAltBox> <north>50.625</north> <south>45</south> <east>28.125</east> <west>22.5</west> </LatLonAltBox> <Lod> <minLodPixels>128</minLodPixels> <maxLodPixels>1024</maxLodPixels> </Lod> </Region> <Link> <href>romaniaRegion.kml</href> <viewRefreshMode>onRegion</viewRefreshMode> </Link> </NetworkLink> </Document> </kml>
第 2 部分:地區型的 NetworkLink 檔案
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>romania Document</name>
<Region>
<LatLonAltBox> <north>50.625</north> <south>45</south> <east>28.125</east> <west>22.5</west> </LatLonAltBox>
<Lod> <minLodPixels>128</minLodPixels> <maxLodPixels>1024</maxLodPixels> </Lod>
</Region> <Placemark> <name>romaniaRegion</name> <LineString> <tessellate>1</tessellate> <coordinates> 22.5,45,0
28.125,45,0 28.125,50.625,0 22.5,50.625,0 22.5,45,0 </coordinates> </LineString> </Placemark>
</Document>
</kml>
超大型疊加層
問:如何將 47 MB 的圖片與全世界分享?
A:一次。
問:如果所有人都嘗試這麼做,會有什麼影響?
答:如果您使用以地區為基礎的 NetworkLinks,並為本教學課程提供多個等級的影像細節,也沒關係!
本節將說明如何建立「超重疊疊加層」:一種階層「區域」和「網路連結」,可用來有效提供大量圖像。當圖像區域的圖塊出現時,就會載入適當的解析度圖塊,接近檢視點時就會載入解析度較高的圖塊。努力在 1024 x 768 的屏幕上為它展示 7008 x 6720 像素的照片,是一件減足的努力。此外,如果使用者位在地球表面的距離上,所有資料可能都會偽裝成少數像素,而效能也很差。超疊覆應,例如我後展示 1991 年 1991 年加利福尼州山景城的 DOQQ 的示例,您可以利用 NetworkLinks 和它為能判攝 (1) 特定特定地域是否在視圖中和 (2) 其投射大小是否適合為為為為。如果「地區」處於「有效」狀態 (同時符合兩個條件),NetworkLink 就會載入與該地區相關聯的資料。如果區域無效,則不會載入任何資料。如果您將原始圖片細分成圖片階層,且細節精細,Google 地球就會載入最適合目前檢視的圖像。
如要查看這個圖片階層的使用方式,請在 Google 地球中載入這個範例檔案,然後放大或縮小搜尋區域,藉此進行實驗:Mountain View Historial DOQQ。
使用以地區為基礎的網路連結有效率地載入超大型資料集的範例。原始圖片是 7008 x 6720 像素。這裡顯示的斜角視圖只會載入五個小型圖塊,用來代表這張圖片。(已新增白色線條字串,以強調圖塊的界線)。這個應用程式會顯示山城 (1991 DOQQ) 的歷史圖像。 |
備妥資料,為超級疊加層做準備
在超級疊加層的示例中,原始山景圖像被分割為數百個小型區域疊加層。這些疊加層 (又稱為圖塊) 分為五個階層。為了舉例為例,這裡的討論是使用簡單的三個層級階層和一組 21 個疊加層,但所涉及的原則是相同的。請注意,這只是建立區域性網路連結階層的一種方法,且還有其他方法可以實作這個機制。
如要建立超大型疊加層,您必須:
- 將圖像分割成可管理的區塊 (建議使用 256 x 256 像素),然後準備
- 建立 KML 檔案以設定區域、連結、網路連結 (這裡是指包含區域疊加層的檔案)。
準備圖像
請為您的圖塊選擇標準尺寸;如此一來,「Google 地球」在相關聯的地區開始運作時,就會載入包含不同解析度的子影像。例如,我們將使用 256 x 256 像素的圖塊,而這個大小較小且可管理。
- 以原始的全解析度圖片開始。請細分成 n 個圖塊,再把每個圖塊細分為 n 個圖塊。
繼續細分,直到有指定大小的圖塊 (這裡為 256 x 256 像素) 為止。
假設原始圖片的尺寸為 1024 x 1024 像素。
系統在細分產品後,會如下所示。 - 將階層中的每個圖塊重新取樣至您選擇的標準大小 (例如 256 x 256 像素)。
這些重新取樣的圖塊較少,但會與較多的檢視點相關聯
遠處的收視點,因此使用者不易察覺損失。
以下圖表顯示檢視點和巢狀區域的定義如何決定實際載入哪些圖塊。本圖為大量圖像,提供了三個等級的詳細資訊。當使用者從最遠距離檢視區域時,Google 地球會顯示縮圖。這個檢視畫面延展了整個 LatLonAltBox (但預計大小較小 (256 平方像素),因此不會實際遺失視覺資訊)。使用者在場景中放大時,「區域」會分為四個「區域」。這四個「圖塊」中的大小都與縮圖相同,但可提供更詳細的圖像。
如果使用者繼續放大該區域,系統會根據使用者的移動距離,顯示完整解析度的圖像。距離中的區域會保留最先載入的細部圖像。在「Mountain View DOQQ」範例中,請啟用「Box」並勾選「地標 A」和「B」,這些區域使用「區域」周圍的 LineString,一次顯示多個階層。
請注意,該範例對於所有地區 (在階層各層級) 的 minLodPixel 和 maxLodPixels 都使用相同的值。這是 LatLonAltBox 可決定應該載入階層的階層層級,以及區域內的圖塊。
準備 KML 檔案
請為每個圖像準備 KML 檔案,將區域疊加層與「區域」和 NetworkLink 建立關聯。這個集合中的每個 KML 檔案都具備下列元素:
- 區域 (使用 LatLonAltBox、minLodPixels 和 maxLodPixels,讓 Google 地球能隨時判斷該地區是否處於啟用狀態)
- 子檔案的一組 NetworkLinks (階層下一層的圖塊)
- 此區域的區域疊加層
這個範例顯示 Mountain View DOQQ 範例的頂層 KML 檔案。針對 maxLodPixels,則指定 -1,其特殊意義為「有效至無限大小」。如果沒有這個規格,系統就永遠不會觸發整個階層。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<NetworkLink>
<name>SuperOverlay: MV DOQQ</name>
<Region>
<LatLonAltBox>
<north>37.44140625</north>
<south>37.265625</south>
<east>-121.9921875</east>
<west>-122.16796875</west>
</LatLonAltBox>
<Lod>
<minLodPixels>128</minLodPixels>
<maxLodPixels>-1</maxLodPixels>
</Lod>
</Region>
<Link>
<href>http://mw1.google.com/mw-earth-vectordb/kml-samples/mv-070501/1.kml</href>
<viewRefreshMode>onRegion</viewRefreshMode>
</Link>
</NetworkLink>
</kml>
以下檔案顯示山景城 DOQQ 範例中的地區 (179.KML)。這個檔案內含五個 href 標記:四個是圖片階層下一層的四個 KML 檔案,另一個則是用於這個圖塊的 GroundOverlay 的圖片檔。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Region>
<Lod>
<minLodPixels>128</minLodPixels><maxLodPixels>-1</maxLodPixels>
</Lod>
<LatLonAltBox>
<north>37.430419921875</north><south>37.41943359375</south>
<east>-122.091064453125</east><west>-122.10205078125</west>
</LatLonAltBox>
</Region>
<NetworkLink>
<name>001120</name>
<Region>
<Lod>
<minLodPixels>128</minLodPixels><maxLodPixels>-1</maxLodPixels>
</Lod>
<LatLonAltBox>
<north>37.430419921875</north><south>37.4249267578125</south>
<east>-122.0965576171875</east><west>-122.10205078125</west>
</LatLonAltBox>
</Region>
<Link>
<href>180.kml</href>
<viewRefreshMode>onRegion</viewRefreshMode>
</Link>
</NetworkLink>
<NetworkLink>
<name>001121</name>
<Region>
<Lod>
<minLodPixels>128</minLodPixels><maxLodPixels>-1</maxLodPixels>
</Lod>
<LatLonAltBox>
<north>37.430419921875</north><south>37.4249267578125</south>
<east>-122.091064453125</east><west>-122.0965576171875</west>
</LatLonAltBox>
</Region>
<Link>
<href>185.kml</href>
<viewRefreshMode>onRegion</viewRefreshMode>
</Link>
</NetworkLink>
<NetworkLink>
<name>001122</name>
<Region>
<Lod>
<minLodPixels>128</minLodPixels><maxLodPixels>-1</maxLodPixels>
</Lod>
<LatLonAltBox>
<north>37.4249267578125</north><south>37.41943359375</south>
<east>-122.0965576171875</east><west>-122.10205078125</west>
</LatLonAltBox>
</Region>
<Link>
<href>190.kml</href>
<viewRefreshMode>onRegion</viewRefreshMode>
</Link>
</NetworkLink>
<NetworkLink>
<name>001123</name>
<Region>
<Lod>
<minLodPixels>128</minLodPixels><maxLodPixels>-1</maxLodPixels>
</Lod>
<LatLonAltBox>
<north>37.4249267578125</north><south>37.41943359375</south>
<east>-122.091064453125</east><west>-122.0965576171875</west>
</LatLonAltBox>
</Region>
<Link>
<href>195.kml</href>
<viewRefreshMode>onRegion</viewRefreshMode>
</Link>
</NetworkLink>
<GroundOverlay>
<drawOrder>5</drawOrder>
<Icon>
<href>179.JPEG</href>
</Icon>
<LatLonBox>
<north>37.430419921875</north><south>37.41943359375</south>
<east>-122.091064453125</east><west>-122.10205078125</west>
</LatLonBox>
</GroundOverlay>
</Document>
</kml>
顯示 3D 物件
在 KML 2.1 中,您可以匯入 3D 模型,例如建築物、橋樑、紀念碑和雕像,然後以 COLLADA 交互式檔案格式匯出。模型本身是以獨立座標空間的方式獨立於 Google 地球中,並使用 GMS、3D Studio Max、Softimage XSI 或 Maya 等應用程式。將 3D 模型匯入 Google 地球後,就會進行平移、旋轉和縮放,以符合「Google 地球」座標系統。您可以使用 Google 地球 2.1 中的另一項新功能,<Update> 元素調整已載入至「Google 地球」的模型。
範例模型
「Google 地球」中的模型可像任何其他幾何圖形物件 (點、線條或多邊形) 一樣使用。以下是匯入紋理紋理的 KML 檔案範例。
模型的 <Link> 參照可以是絕對或相對檔案規格,也可以是網址。
如要查看這個模型,請載入 MackyBldg.kmz 檔案,此檔案包含所有必要的紋理與疊加層檔案,以及包含此模型的 doc.gp 檔案:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Placemark>
<name>SketchUp Model of Macky Auditorium</name>
<description>University of Colorado, Boulder; model created by Noël Nemcik.</description> <LookAt>
<longitude>-105.2727379358738</longitude>
<latitude>40.01000594412381</latitude>
<altitude>0</altitude>
<range>127.2393107680517</range>
<tilt>65.74454495876547</tilt>
<heading>-27.70337734057933</heading> </LookAt> <Model id="model_4">
<altitudeMode>relativeToGround</altitudeMode>
<Location>
<longitude>-105.272774533734</longitude>
<latitude>40.009993372683</latitude>
<altitude>0</altitude>
</Location>
<Orientation>
<heading>0</heading>
<tilt>0</tilt>
<roll>0</roll>
</Orientation>
<Scale>
<x>1</x>
<y>1</y>
<z>1</z>
</Scale>
<Link>
<href>files/CU Macky.dae</href>
</Link>
</Model>
</Placemark>
</kml>
模型是根據地理位置元素的緯度、經度和海拔規格來定位。這個範例使用 [方向] 和 [比例] 元素的預設值,為附上完整資訊,這些元素提供了完整資訊。
方向元素可指定模型在 x (傾斜)、y (roll) 和 z (heading) 軸周圍的旋轉角度。y 軸指向北方且與經度線平行,x 軸則指向東方,與緯度線平行。旋轉以度數指定,正向旋轉,如下圖所示。
建立 .kmz 封存檔案
KMZ 封存是檔案,可用來建立單一 KML 簡報。此封存檔包含 .KML 檔案參照的所有本機檔案,例如圖片、紋理和模型。KMZ 封存檔案是獨立套件,不需要透過網路伺服器代管,而且可以輕鬆透過電子郵件傳送,並以單一單元的形式儲存。Google 地球可以直接讀取 .KML 和 .kmz 檔案。
使用 ZIP 檔案格式,將 doc.KML 檔案及其參照的本機檔案壓縮為封存檔。許多應用程式都可以產生這種格式。 Windows 系統中的 WinZip 和 Macintosh 系統上的 Stuffit,以及 Linux 或 Macintosh 系統上的 zip 都是可讀取及寫入 ZIP 格式的常見應用程式。您也可以直接使用 Windows 檔案總管或 Mac Finder 使用 ZIP 封存檔。
建立 .zip 檔案後,請將副檔名變更為 .kmz。
包含 Macky Building 完整紋理模型的 KMZ 封存檔包含下列檔案:
- doc.gp:這種 KML 檔案會匯入 COLLADA (.dae) 模型,並將其置於「Google 地球」中。將這個檔案放在 KMZ (ZIP) 檔案的根目錄中。
- textures.txt - 用於將模型檔案中的紋理路徑重新對應到 KMZ 檔案內的路徑 (此處為 CU Macky.dae))。將這個檔案放在 KMZ (ZIP) 檔案的根目錄中。CU Macky .dae 所參照的每個紋理在 textures.txt 中都有下列一行文字:
<kmz_file_path> <COLLADA_file_path> [<KML_ID_of_model>]<kmz_file_path> 是 KMZ 封存檔與紋理所在位置的相對路徑。這個路徑相對於 CU Macky.dae (位於 KMZ 封存檔的 files/ 目錄中)。由於紋理儲存在 files/ 目錄中,因此 <kmz_file_path> 的開頭應為 ../files/ 。
<COLLADA_file_path> 與 CU Macky .dae 中顯示的紋理檔案名稱完全一致。
[KML_ID] 是採用此紋理的模型的 KML ID。紋理可由多個模型使用。此參數為選用項目。
以下是我們範例的 textures.txt 檔案摘要:
<../files/CU-Macky---Center-StairsnoCulling.jpg> <CU-Macky---Center-StairsnoCulling.jpg> <model_4> <../files/CU-Macky-4sideturretnoCulling.jpg> <CU-Macky-4sideturretnoCulling.jpg> <model_4> <../files/CU-Macky-Back-NorthnoCulling.jpg> <CU-Macky-Back-NorthnoCulling.jpg> <model_4>
- files/ directory - 包含用於定義模型幾何圖形、紋理和材質的 COLLADA 檔案。在 Macky Building 範例中,這個目錄包含 COLLADA 檔案 (CU Macky.dae),以及用來製作建築物紋理的 JPEG 圖片許多檔案 (CU-Macky-BrickwallnoCulling.jpg、CU-Macky.Center-br
這個範例說明如何在 KMZ 封存中建構檔案結構。實際上,您可以將檔案整理成任何對您有邏輯的結構,就像整理電腦中的資料夾或目錄一樣。舉例來說,建議您將所有圖片都放入 images/ 目錄。相對參照 (例如 NetworkLink、Link、Overlay/II 和 Model 中 <href> 元素所參照的檔案) 相對於 doc.KML 檔案。如果加入圖片目錄,則圖片的 <href> 規格為:images/myBrickTexture.jpg、images/myMountainOverlay.png 等)。
更新透過網路連結載入的資料
如要逐步修改透過 NetworkLink 載入的資料,請使用 NetworkLinkControl 的子項的 Update 元素。更新作業可包含任意數量的「變更」、「建立」和「刪除」元素,這些元素會按順序處理。
下圖說明事件的順序。
- NetworkLink 會將「原始」KML 檔案載入「Google 地球」。在後續更新的元素中,您需要在第一次指定時明確定義明確的 id。特定檔案中的 id 不得重複。
- 其他 NetworkLink 則會將第二個包含載入更新 (包含變更、建立和刪除的組合) 的 KML 檔案載入已載入的 KML 物件。更新檔案包含兩個參照,用於識別原始 KML 資料:
- 為了在 Google 地球中定位物件,Update 元素會使用 targetHref 元素識別用於定義要修改物件的原始檔案。為了識別要修改的物件或新物件的容器,Change、Create 和 Delete 元素包含參照這些物件的 id 的 targetId 屬性。
變更範例
以下範例顯示 NetworkLinks 和 KML 資料檔案的範例。執行範例:
- 將 Point-load.KML 檔案載入 Google 地球。這個檔案內含的 NetworkLink 會載入原始資料檔案,其中包含兩個點 (Point.KML)。
- 將 Update-load.KML 檔案載入 Google 地球。這個檔案包含第二個 NetworkLink,可載入包含更新資料的檔案 (point123 的新名稱)。
第一個檔案包含的 NetworkLink 會載入資料檔案,其中包含兩個點。包含這些點的地標都有獲派的 ID。第三個檔案包含另一個 NetworkLink,可新增 Update 檔案。Change 元素會修改 point123 的地標名稱。
以下是本範例使用的四個檔案。首先,這是 Point-load.zoom 檔案,其中包含載入原始資料檔案的 NetworkLink (Point.KML)。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<NetworkLink>
<name>Loads Point.kml</name>
<Link>
<href>http://developers.google.com/kml/documentation/Point.kml</href>
</Link>
</NetworkLink>
</kml>
以下的 Point. KML 檔案包含原始資料 (兩個點)。ID 為「point123」的點就是我們即將修改的點。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Placemark id="pm123">
<name>point123</name>
<Point> <coordinates>-95.44,40.42,0</coordinates> </Point>
</Placemark> <Placemark id="pm456"> <name>point456</name>
<Point> <coordinates>-95.43,40.42,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>
接下來是第二個 NetworkLink 檔案 (Update-load.zoom)。這個檔案會載入包含更新資訊的檔案。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<NetworkLink>
<name>Update</name>
<Link>
<href>http://developers.google.com/kml/documentation/NetworkLinkControl-Update.kml</href></Link> </NetworkLink>
</kml>
最後,以下是包含「更新」資訊的 KML 檔案 (NetworkLinkControl-Update.KML):
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<NetworkLinkControl>
<Update>
<targetHref>http://developers.google.com/kml/documentation/Point.kml</targetHref>
<Change>
<Placemark targetId="pm123"> <name>Name changed by Update Change</name>
<!-- coordinates remain the same -->
</Placemark>
</Change> </Update>
</NetworkLinkControl>
</kml>
期限
根據預設,「連結」是載入「Google 地球」時只會載入一次的資料。為避免 KML 資料過時,您可以為 <href> 元素 (在連結或圖示元素中) 載入的任何資料,指定 onExpire 的 refreshMode。根據預設,HTTP 到期時間會指定到期時間。您現在也可以在 KML NetworkLinkControl 中指定到期時間。時間會以 XML 日期時間表示 (請參閱「XML 架構第 2 部分:資料類型第二版」)。如果同時指定 HTTP 標頭和 KML 到期時間,系統會優先採用 KML 到期時間。
範例 1:使用 HTTP 伺服器到期時間的到期時間
此範例僅供說明之用。其中顯示包含將圖示設為 onExpire 的 refreshMode 的 GroundOverlay。由於未設定任何 KML 到期時間,因此此範例使用 HTTP 伺服器到期時間。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>refreshMode onExpire</name>
<Snippet maxLines="10">
Image automatically reloads according to http
server expiration.
</Snippet>
<GroundOverlay>
<Icon>
<href>http://www.someserver.com/image.jpeg</href>
<refreshMode>onExpire</refreshMode>
</Icon>
<LatLonBox>
<!-- from edit session in earth -->
<!-- The roof of a building in the Presidio -->
<north>37.80385180177469</north>
<east>-122.4558710620651</east>
<south>37.80337403503347</south>
<west>-122.4564295653771</west>
</LatLonBox>
</GroundOverlay>
</Document>
</kml>
範例 2:使用 KML 到期時間的範例
下方範例會在隨機選取的座標中提供地標。這個範例中的連結包含 onExpire 的 refreshMode。在此情況下,使用新的 KML <expires> 元素,指定到期日/時間 (在 Python 指令碼中)。此 KML 到期時間優先於 HTTP 標頭中指定的任何時間。
以下是包含 <href> 和 <refreshMode> 元素的「包含連結」的 KML NetworkLink:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<NetworkLink>
<Link>
<href>http://dev.someserver.com/cgi-bin/expires.py</href>
<refreshMode>onExpire</refreshMode>
</Link>
</NetworkLink>
</Document>
</kml>
這個 Python 指令碼會將到期時間設為 [now + 11 秒],並重新整理地標的座標:
#!/usr/bin/python
import random
import time
lat = random.random() * 180. - 90.
lon = random.random() * 360. - 180.
now = time.time()
future = time.gmtime(now + 11)
y = future[0]
mo = future[1]
d = future[2]
h = future[3]
mi = future[4]
s = future[5]
iso8601 = '%04d-%02d-%02dT%02d:%02d:%02dZ' % (y,mo,d,h,mi,s)
print 'Content-type: application/vnd.google-earth.kml+xml'
print '<?xml version=\"1.0\" encoding=\"UTF-8\"?>'
print '<kml xmlns=\"http://earth.google.com/kml/2.1\">'
# must be child of <kml>
print '<NetworkLinkControl>'
print '<expires>%s</expires>' % iso8601
print '</NetworkLinkControl>'
print '<Placemark>'
print '<name>placemark expires %s</name>' % iso8601
print '<Point>'
print '<coordinates>%f,%f,0</coordinates>' % (lon,lat)
print '</Point>'
print '</Placemark>'
print '</kml>'
包含圓形按鈕樣式的資料夾
您現在可以使用 ListStyle 元素建立包含無線電樣式項目的資料夾,並指定 RadioFolder 的 listItemType。以下範例說明這個新清單樣式元素的用法。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>ListStyle radiofolder</name>
<Folder>
<name>radioFolder Folder</name>
<Style>
<ListStyle>
<listItemType>radioFolder</listItemType>
</ListStyle>
</Style>
<Placemark>
<name>north</name>
<Point>
<coordinates>-114,41.79,0</coordinates>
</Point>
</Placemark>
<Placemark>
<name>south</name>
<Point>
<coordinates>-114,41.78,0</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
以下是 [位置] 面板如何顯示此資料夾及其地標子項: