發(fā)表于 2004年11月26日 5:49 PM,當(dāng)然現(xiàn)在感受不一樣了,但還是保持原味吧.
客戶(hù)端選擇。
?? 就IMS來(lái)說(shuō)提供了 HTML Viewer ,Java Standard Viewer Java Custom Viewer
?
?? Java Standard Viewer,Java Custom Viewer功能差不多。 對(duì)于程序員、中國(guó)客戶(hù)來(lái)說(shuō)。Java???
Standard
Viewer基本不用。典型的胖客戶(hù)端,Image 和Feature MapServices
都要下載APPLET,客戶(hù)端還要裝jre。隨著微軟IE對(duì)applet的抵制 和 Arcgis Server(遠(yuǎn)程數(shù)據(jù)分析,F(xiàn)eature
MapServices的替代)成熟,估計(jì)這種胖客戶(hù)端沒(méi)什么大用了,至少我覺(jué)得在中國(guó)是這樣的。就我接觸的webgis項(xiàng)目中,applet的應(yīng)用不是
很多,政府部門(mén)更是因?yàn)榘踩裕苌儆谩#?a >http://www.668map.com/)用applet,但是假如我們對(duì)于大數(shù)據(jù)量的gis應(yīng)用,有還多業(yè)務(wù)查詢(xún)、分析。估計(jì)把數(shù)據(jù)放到緩沖中的做法就懸了。還有假如我要加遙感應(yīng)用,數(shù)據(jù)量大的更是可怕。 我個(gè)人對(duì)Java Viewer前景不是看好。另外AJAX技術(shù)的成熟,applet基本沒(méi)什么地位了。
??
HTML
Viewer:AJAX的成熟。隨著web程序的流行,xhtml,javascript,css的成熟(對(duì)不同瀏覽器有統(tǒng)一標(biāo)準(zhǔn)就完美了,不過(guò)客戶(hù)端
IE就現(xiàn)在還是老大)。arcgis server的客戶(hù)端也是html
view(沒(méi)辦法.net,j2ee還是以瀏覽器為主要客戶(hù)端的)。另外html,xhtml是如此的輕便,頁(yè)面是可以如此的漂亮,擴(kuò)展,維護(hù)也不用編譯
什么的。雖然不支持Feature MapService,但Feature MapService的應(yīng)用可以由arcgis server實(shí)現(xiàn)。http://maps.google.com
連接器選擇。
.NET Link 、ActiveX 、AppServerLink 、ColdFusion 、General、Java 、Servlet 、WMS
思想就是把ArcXML封裝了,再向ArcIMS發(fā)送請(qǐng)求,客戶(hù)端展示。
下面以arcIMS提供了例子探討一下Servlet Connector ,javaconnector。請(qǐng)自行配置htmlview和javasconnector的例子。
Servlet Connector:修改viewer.htm,使jsForm.htm 可以在頁(yè)面中看到。(<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中看函數(shù)function htmlSendToServer(URLString,XMLRequest,theType)和function
processXML(theReplyIn) 一目了然了,htmlSendToServer把我們組合的arcXML發(fā)送到com.esri.esrimap.Esrimap?ServiceName,返回的XMLResponse由processXML顯示出來(lái)。
核
心代碼就這些,你在javascript文件夾中的大部分js文件是 組合請(qǐng)求的arcXML字符串 和
解析從arcIMS返回的arcXML字符串。其他js文件是DHTML,參數(shù),公有函數(shù)等。看上去挺嚇人的。我個(gè)人覺(jué)得htmlview例子里的js代
碼可重用性很高。但必須很熟悉這些代碼,函數(shù)。和其他連接器比較,htmlview可以說(shuō)是最簡(jiǎn)單的了。
熟悉html,熟悉javascript,有arcXML文檔,這就夠了。
剩下的是用 javascript構(gòu)造不同的arcXML,請(qǐng)求arcIms, 用dhtml,javascript顯示返回arcXML.
(大家可以看一下jspForm.jsp,用com.esri.aims.mtier.io.ConnectionProxy類(lèi)來(lái)請(qǐng)求IMS服務(wù)。和上面的流程差不多。http://support.esri.com/index.cfm?fa=knowledgebase.techarticles.gateway&p=16&pf=217上面講的都不錯(cuò),從更深的角度講了各個(gè)連接)
javaconnector:把a(bǔ)rcXML文檔用java對(duì)象封裝起來(lái)。組合arcXML的工作由純面向?qū)ο蟮膉ava語(yǔ)言來(lái)做,
com.esri.aims.mtier.io.ConnectionProxy
對(duì)象請(qǐng)求ims服務(wù)器,返回java對(duì)象的響應(yīng)。servlet connector 是字符串,而java
connector是java對(duì)象。這樣java語(yǔ)言的優(yōu)勢(shì),java對(duì)象的可操作性,易用性,方便性就顯露出來(lái)拉。javaconnector對(duì)
arcIMS服務(wù)動(dòng)態(tài)增加等。
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對(duì)象封裝ArcXML,map.refresh() 請(qǐng)求IMS服務(wù)。 請(qǐng)求完了Map對(duì)象包括響應(yīng)的內(nèi)容。(其實(shí)map.initMap也觸發(fā)了一次請(qǐng)求 GET_SERVERINFO。javaconnector的類(lèi)庫(kù)設(shè)計(jì)的有問(wèn)題。)
servlet connector 和 javaconnector比較
一、性能
?? servlet connector: 用戶(hù)下載javascript文件。組合arcXML在客戶(hù)端執(zhí)行。如果用戶(hù)機(jī)器不是太慢的話(huà),性能應(yīng)該是最好的,服務(wù)器壓力也小。據(jù)說(shuō)ims 群集安裝,系統(tǒng)配置的好的話(huà),可以支持幾百萬(wàn)用戶(hù)。
??
javaconnector:比不上servlet
connector。1、java對(duì)象的封裝,在服務(wù)器端運(yùn)行。(不過(guò)可忽略)2、Map對(duì)象建立的性能損耗。map.initMap(),
map.refresh()都要觸發(fā)請(qǐng)求ims。操作一次地圖 新建一個(gè)map對(duì)象的做法是不可能的。有兩個(gè)解決 把map對(duì)象放到Session中
和 map對(duì)象池。 把map對(duì)象放到Session,用戶(hù)多的時(shí)候,web服務(wù)器壓力很大,多用戶(hù)時(shí)不可行。 map對(duì)象池 ,map對(duì)象的
鈍化,激活(EJB的提法)操作復(fù)雜。因?yàn)椴煌脩?hù)當(dāng)前操作狀態(tài)不一樣(在arcgis9 server中,狀態(tài)保存是個(gè)值得研究的地方)。
運(yùn)用javaconnector 性能問(wèn)題得考慮。
(個(gè)人覺(jué)得javaconnector類(lèi)庫(kù)建立的有問(wèn)題,用反編譯工具看,代碼設(shè)計(jì)有改進(jìn)的地方,可以解決map對(duì)象初始化問(wèn)題)。
二、功能:
??
servlet connector: arcXML的所有功能。 問(wèn)題在 組合arcXML和顯示響應(yīng)的arcXML的環(huán)節(jié)上。
因?yàn)檫@些用javascript實(shí)現(xiàn)。有一定局限性。 比如,我要把 響應(yīng)arcXML
的查詢(xún)結(jié)果排序。實(shí)現(xiàn)起來(lái)費(fèi)事。(arcXML查詢(xún)不支持order by ).不可以對(duì)ims服務(wù)操作。
?? javaconnector:arcXML的所有功能。可以用java語(yǔ)言的優(yōu)勢(shì)處理很多問(wèn)題。比如前面排序。動(dòng)態(tài)圖層、與遙感影象圖的疊加實(shí)現(xiàn)起來(lái)都比較方便。還可以結(jié)合arcSDE的java接口處理元數(shù)據(jù)。
待續(xù).....