從這一點來說Google Earth客戶端是我們時代的技術標志。Google Earth并非是第一個地球瀏覽客戶端,而且與它的先驅、不為人知的Keyhole非常相似。但是憑著Google的大名以及基礎版對最終用戶免費,它完成了市場滲透并得到公認――這是另一個值得大書特書的有趣話題。
本文只有一個基本使命:即向你展示在servlet和Google Earth客戶端之間發送和接收信息是多么的輕易。有了這種程度的交互,你就能用基本的java編程技能創建設想的服務。
使用許可及競爭者
截至本文發稿時Google Earth還處于beta階段(版本號3.0.0616),許可證是商業的(見客戶端的幫助部分)。假如你想尋求等價的開源范例,我建議你去關注優秀的Nasa World Wind(Nasa世界風)項目
基礎知識
Google Earth客戶端以第二版的鎖位標記語言(KML)解析xml數據,它有一個專用的命名空間。龐大的KML配置信息可能會影響到GUI顯示,開發這種需要平衡利弊的應用的難點在于需要了解更多的KML細節而不是編程技巧。KML實體的簡要列表包括:
*Placements(位置),標明在地球上的坐標
*Folders(夾子),幫助組織其它的特征信息
*Documents(文檔),存放可能包含風格元素的folder的容器
*Image overlays(圖片疊加),用來添加圖片
*Network links(網絡鏈接),描述在何處以及如何與服務器或者servlet(本文采用的方式)連接
本文為了簡化的目的,主要探討了folder、placement和network-link元素的使用;此外還用folder定義了一段旅程(tour),它里面包含了一系列的placement。
在Windows上安裝了Google Earth后,文件擴展名KML和MIME(Multipurpose Internet Mail Extensions,多用途網絡郵件擴展)類型“application/keyhole”即被注冊。這意味著只要點擊KML文件或通過TCP/IP接收“application/keyhole”MIME類型的文件就會激活Google Earth客戶端。
假如返回的KML文本為:
<Folder><name>Hello World [127.0.0.1] </name></Folder>
則程序將顯示如下內容:
圖1 Hello World folder的GUI顯示
要想激活Earth客戶端,只需瀏覽適當的URL地址--就好比從資源地址(http://localhost:8080/Tour/hello)下載HelloServlet源程序。這樣就能激活doGet()方法,然后重定向到doPost()方法,在所有的Web瀏覽器里都會看到以下結果:
PRotected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("application/keyhole");
PrintWriter out = response.getWriter();
String message ="<Folder><name>Hello World ["
+ request.getRemoteAddr()+ "]</name></Folder>";
out.println(message);
}
不要小看這段簡單的代碼,里面的方法暗藏著玄機。服務器可以作為各種數據類型和Google Earth之間的中介。不妨設想像這樣一個場景:在旅程數據中包含有不同的XML方言,在返回響應前由服務器完成擴展風格語言(Extensible Stylesheet Language)的轉換。再進一步,服務器可以選擇返回哪一種響應,以答應個性化處理。KML文檔實體答應風格定義,可根據IP地址范圍改變風格,使得不同的用戶看到的風格可能會不一樣。
作為實踐,我們將從使用Google Earth和輸出KML文件開始。在Google Earth的頂部是Add菜單,可以在這里添加placement、folder和image overlay,然后用File菜單保存生成的KML文件。我強烈推薦編輯導出的XML文件以了解改動對Google Earth的影響。好了,讓我們開始與這位世界之王共舞!
了解城市定位
本節給出一個面向教學的應用:一個用來教授學生城市名稱與地理位置間關系的程序。我們將創建一個以類似于抽簽的方式將城市位置隨機發送給客戶端的servlet。城市的位置(placement)用KML表示。Placement實體里封裝了Html鏈接,將用戶引導到相關的有趣站點。這樣我們就可以使用戶在Web瀏覽器和Google Earth間進行交互。
學生可以通過在鼠標置于鏈接之上時出現的菜單中選擇Refresh來選擇下一個placement,如圖2所示。
圖2 刷新網絡鏈接生成一個新位置(在這里是倫敦)時的GUI顯示
我們這個應用的后臺處理用到了network-link(網絡鏈接)實體,network-link從http://location加載數據文件。將此文件存于桌面并雙擊,Google Earth開始運行,并從服務器端加載下面的KML代碼段。
City.kml
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
<NetworkLink>
<description>Refresh me</description>
<name>Random City</name>
<visibility>1</visibility>
<open>1</open>
<refreshVisibility>1</refreshVisibility>
<flyToView>1</flyToView>
<Url>
<href>http://location </href>
</Url>
</NetworkLink>
</kml>
新聞熱點
疑難解答