發表于 2004年11月26日 5:49 PM,當然現在感受不一樣了,但還是保持原味吧.
客戶端選擇。
?? 就IMS來說提供了 HTML Viewer ,Java Standard Viewer Java Custom Viewer
?
?? Java Standard Viewer,Java Custom Viewer功能差不多。 對于程序員、中國客戶來說。Java???
Standard
Viewer基本不用。典型的胖客戶端,Image 和Feature MapServices
都要下載APPLET,客戶端還要裝jre。隨著微軟IE對applet的抵制 和 Arcgis Server(遠程數據分析,Feature
MapServices的替代)成熟,估計這種胖客戶端沒什么大用了,至少我覺得在中國是這樣的。就我接觸的webgis項目中,applet的應用不是
很多,政府部門更是因為安全性,很少用。(http://www.668map.com/)用applet,但是假如我們對于大數據量的gis應用,有還多業務查詢、分析。估計把數據放到緩沖中的做法就懸了。還有假如我要加遙感應用,數據量大的更是可怕。 我個人對Java Viewer前景不是看好。另外AJAX技術的成熟,applet基本沒什么地位了。
??
HTML
Viewer:AJAX的成熟。隨著web程序的流行,xhtml,javascript,css的成熟(對不同瀏覽器有統一標準就完美了,不過客戶端
IE就現在還是老大)。arcgis server的客戶端也是html
view(沒辦法.net,j2ee還是以瀏覽器為主要客戶端的)。另外html,xhtml是如此的輕便,頁面是可以如此的漂亮,擴展,維護也不用編譯
什么的。雖然不支持Feature MapService,但Feature MapService的應用可以由arcgis server實現。http://maps.google.com
連接器選擇。
.NET Link 、ActiveX 、AppServerLink 、ColdFusion 、General、Java 、Servlet 、WMS
思想就是把ArcXML封裝了,再向ArcIMS發送請求,客戶端展示。
下面以arcIMS提供了例子探討一下Servlet Connector ,javaconnector。請自行配置htmlview和javasconnector的例子。
Servlet Connector:修改viewer.htm,使jsForm.htm 可以在頁面中看到。(<FRAMESET ROWS="30,*,30,50"—)
jsForm.htm加載地圖前代碼
......
function passXML() {
}
......??
加載地圖后代碼
......
function passXML() {
var XMLResponse='<?xml version="1.0" encoding="UTF-8"?><ARCXML
version="1.1"><RESPONSE><IMAGE><ENVELOPE minx="116.325273231549" miny="39.9126536248245"
maxx="116.741417757427" maxy="40.08" /><OUTPUT url="http://zhangkj:8080/Output/txzy_ZHANGKJ188425841.jpg" /></IMAGE></RESPONSE></ARCXML>';
parent.MapFrame.processXML(XMLResponse);
}
........
在aimsXML.js中看函數function htmlSendToServer(URLString,XMLRequest,theType)和function
processXML(theReplyIn) 一目了然了,htmlSendToServer把我們組合的arcXML發送到com.esri.esrimap.Esrimap?ServiceName,返回的XMLResponse由processXML顯示出來。
核
心代碼就這些,你在javascript文件夾中的大部分js文件是 組合請求的arcXML字符串 和
解析從arcIMS返回的arcXML字符串。其他js文件是DHTML,參數,公有函數等。看上去挺嚇人的。我個人覺得htmlview例子里的js代
碼可重用性很高。但必須很熟悉這些代碼,函數。和其他連接器比較,htmlview可以說是最簡單的了。
熟悉html,熟悉javascript,有arcXML文檔,這就夠了。
剩下的是用 javascript構造不同的arcXML,請求arcIms, 用dhtml,javascript顯示返回arcXML.
(大家可以看一下jspForm.jsp,用com.esri.aims.mtier.io.ConnectionProxy類來請求IMS服務。和上面的流程差不多。http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.gateway&p=16&pf=217上面講的都不錯,從更深的角度講了各個連接)
javaconnector:把arcXML文檔用java對象封裝起來。組合arcXML的工作由純面向對象的java語言來做,
com.esri.aims.mtier.io.ConnectionProxy
對象請求ims服務器,返回java對象的響應。servlet connector 是字符串,而java
connector是java對象。這樣java語言的優勢,java對象的可操作性,易用性,方便性就顯露出來拉。javaconnector對
arcIMS服務動態增加等。
Map map=new Map();
map.initMap(mapCon,750,false,false,false,false);
map.setHeight(500);
map.setWidth(400);
map.refresh();??
String url=map.getMapOutput().getURL();
Map對象封裝ArcXML,map.refresh() 請求IMS服務。 請求完了Map對象包括響應的內容。(其實map.initMap也觸發了一次請求 GET_SERVERINFO。javaconnector的類庫設計的有問題。)
servlet connector 和 javaconnector比較
一、性能
?? servlet connector: 用戶下載javascript文件。組合arcXML在客戶端執行。如果用戶機器不是太慢的話,性能應該是最好的,服務器壓力也小。據說ims 群集安裝,系統配置的好的話,可以支持幾百萬用戶。
??
javaconnector:比不上servlet
connector。1、java對象的封裝,在服務器端運行。(不過可忽略)2、Map對象建立的性能損耗。map.initMap(),
map.refresh()都要觸發請求ims。操作一次地圖 新建一個map對象的做法是不可能的。有兩個解決 把map對象放到Session中
和 map對象池。 把map對象放到Session,用戶多的時候,web服務器壓力很大,多用戶時不可行。 map對象池 ,map對象的
鈍化,激活(EJB的提法)操作復雜。因為不同用戶當前操作狀態不一樣(在arcgis9 server中,狀態保存是個值得研究的地方)。
運用javaconnector 性能問題得考慮。
(個人覺得javaconnector類庫建立的有問題,用反編譯工具看,代碼設計有改進的地方,可以解決map對象初始化問題)。
二、功能:
??
servlet connector: arcXML的所有功能。 問題在 組合arcXML和顯示響應的arcXML的環節上。
因為這些用javascript實現。有一定局限性。 比如,我要把 響應arcXML
的查詢結果排序。實現起來費事。(arcXML查詢不支持order by ).不可以對ims服務操作。
?? javaconnector:arcXML的所有功能。可以用java語言的優勢處理很多問題。比如前面排序。動態圖層、與遙感影象圖的疊加實現起來都比較方便。還可以結合arcSDE的java接口處理元數據。
待續.....