基于Mapserver的WebGIS下Java環境配置與JSP例子
????????
?????? mapserver通過Mapscript支持各種解釋型語言,像C#,java、TCL、 PHP,完成這項工作是通過
swig這個開源工具進行的,swig可以對c/c++代碼打包成各種腳本語言可以的代碼庫。swig這個偉大
的工具對mapserver的c代碼進行了打包。俺太喜歡這個swig了,網上這么的c/c++開源庫,要是咱們
用到某方面的功能,下一個,然后用swig打包,這樣我們就看在java或者c#里用了,節約好多勞力哦。
用c/c++寫底層的核心功能了,即有利于提高運行速度又能保護好源碼又能利用開源的c/c++類庫,再用
swig為各種語言打包,可以直接享受到C#、java、TCL之類的解釋型強大功能,哈哈……
?? 我們可以下載現成的mapscript.jar包,其實下載的ms4w_1.5.3.zip已經包含這個東西啦。有了這個jar
包我們就可以在java里頭調用mapserver咯。
?? 步驟是這樣的:
1、設置環境變量PATH,以便JVM定位到mapscript.dll或mapscript.so,下面以windows為例
?? set PATH=D:\ms4w\Apache\cgi-bin;%PATH% #這個是定位dll的,
?? set PROJ_LIB=D:\ms4w\proj\nad? #這個是為方便投影
?? set CLASSPATH=D:\ms4w\Apache\cgi-bin\mapscript\java\mapscript.jar;%CLASSPATH% #java的,不多說了
?? 最好是把這幾個環境變量設置為system環境變量,不能是user環境變量(切記哦,否則定位不到dll)。
2、在tomcat中如果,先前沒有設置PATH,也可這么搞。由于tomcat是運行在JVM上的,在tomcat的起來腳本增加
?? 選項-Djava.library.path=D:\ms4w\Apache\cgi-bin 也可以!
?? 經過上面兩步咱們已經配置好java環境了,接下來我們看個小例子。
?? 這是一個可以運行的JSP代碼。主要實現了這幾個功能
? 1、地圖放縮
? 2、鷹眼圖
? 3、圖例
? 4、比例尺
? 由于代碼非常簡單,棒棒唐就不多說了,自己看吧!當然Mapserver的功能比這強大得多,俺越來越喜歡mapserver了。
在mapserver的mailllist中說到了Mapserver與ArcIMS的比較,其中有幾點值得關注。Mapsever速度比ArcIMS快,并發量
比ArcIMS強,支持的webgis協議比ArcIMS多,二者的GIS功能也差不多。一個是商用的一個是開源的。對于俺們這些窮人來說
玩玩Mapserver也不錯。想自己創業的朋友可以從Mapserver起步哦。
? 以后咱們用Servlet+Ajax來做Mapserver的webgis開發哈!切看下回分解。
結果圖如下:
<%@page contentType="text/html; charset=GB2312" language="java" %>
<%@page import="edu.umn.gis.mapscript.*" %>
<%@page import="java.util.Iterator, java.util.ArrayList"%>
<%@page import="java.util.Date"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> my first mapserver-webgis Good-luck </TITLE>
</HEAD>
<BODY>
<FORM METHOD=POST ACTION="index.jsp">
<%!
?static int i=0;
%>
<%
?mapObj map;
?String vMapFile="";
?String vScaleBarFile="";
?String vLengdBarFile="";
?String vReferenceFile="";
?double rodio=1;
?map = new mapObj ("D:/SuperMap/SuperMapISJava/thirdparty/tomcat/webapps/mapserver/tutorial.map");
?if(map==null)
?{
? System.out.println("!ok");
?
?}
?else
?{??
?if(request.getParameter("rodio")!=null)
?{
??if(request.getParameter("rodio")!="")
??{
???rodio=Double.parseDouble(request.getParameter("rodio"));
??}
?}
?rectObj ro=map.getExtent();
?double xw=ro.getMaxx()-ro.getMinx();
?double yw=ro.getMaxy()-ro.getMiny();
?double cx=(ro.getMaxx()+ro.getMinx())/2;
?double cy=(ro.getMaxy()+ro.getMiny())/2;
?double newxw=xw*rodio;
?double newyw=yw*rodio;
?double maxx=cx+newxw/2;
?double minx=cx-newxw/2;
?double maxy=cy+newyw/2;
?double miny=cy-newyw/2;
?map.setExtent( minx,? miny,? maxx,? maxy);
?System.out.println("minx:"+minx);
?System.out.println("miny:"+miny);
?System.out.println("maxx:"+maxx);
?System.out.println("maxy:"+maxy);
?? map.setImagecolor(new colorObj(10,128,98,13));
?? imageObj imagen=map.draw();
?? //imagen.setImageDir("/tmp");
?? Date dt=new Date();
?? vMapFile="output/tangnf"+(dt.getTime())+".png";
? // map.embedScalebar(imagen);
?? imagen.save(vMapFile,map);
??
?? scalebarObj? scalebar=map.getScalebar();
?? scalebar.setHeight(10);
?? scalebar.setWidth(200);
?? scalebar.setBackgroundcolor(new colorObj(0,255,0,13));
?? scalebar.setColor(new colorObj(230,0,0,13));
?? scalebar.setImagecolor(new colorObj(255,255,255,13));
?? scalebar.setOutlinecolor(new colorObj(0,230,255,13));
?? //scalebar.setStyle(3);
?? scalebar.setUnits(3);
?? scalebar.setIntervals(3);
?? //scalebar.setLabel(new labelObj
????? imageObj Scalebarimage=map.drawScalebar();
?? vScaleBarFile="output/scalebar"+(dt.getTime())+".jpg";
?? Scalebarimage.save(vScaleBarFile,map);
?
??? legendObj legend=map.getLegend();
??? legend.setHeight(200);
??? legend.setWidth(100);
??? System.out.println(legend.getLabel().getEncoding());
?? imageObj Legendimage=map.drawLegend();
?? vLengdBarFile="output/Legend"+(dt.getTime())+".png";
?? Legendimage.save(vLengdBarFile,map);
?? int layerCount=map.getNumlayers();
?? for(int i=0;i<layerCount;i++)
??{
??? layerObj layer=map.getLayer(i);
??? System.out.println("layer"+(i)+":"+layer.getName());
??}
?????? System.out.println("layerCount:"+layerCount);
?
????? referenceMapObj referenceMap=map.getReference();
?? referenceMap.setHeight(200);
?? referenceMap.setWidth(200);
?? imageObj ReferenceImg=map.drawReferenceMap();
?? vReferenceFile="output/Reference"+(dt.getTime())+".png";
?? ReferenceImg.save(vReferenceFile,map);
? System.out.println("我成功啦");
?}
%>
<table border=1>
<tr><td>
放縮因子:
<INPUT TYPE="text" NAME="rodio" value="<%=rodio%>" id="rodio" >
</td>
<td>
<INPUT TYPE="submit" value="提交">
</td>
<tr><td width=80 >
比例尺:
<INPUT NAME="ScaleBar" TYPE="image" SRC="<%=vScaleBarFile%>"? border=1>
<!--? <img SRC="<%=vScaleBarFile%>"? border=0 width=100 height=17></img> -->
?</td>
?</tr>
?<tr><td>
?<INPUT NAME="imgMap" TYPE="image" SRC="<%=vMapFile%>"? width=600 height=400 border=0>
?</td>
?</tr>
?<tr><td>
?圖例:
?<INPUT NAME="imgLengd" TYPE="image" SRC="<%=vLengdBarFile%>"?? border=0>
?</td>
?<td>
?鷹眼:
?<INPUT NAME="vReferenceF" TYPE="image" SRC="<%=vReferenceFile%>"?? border=0>
?</td>
?</tr>
?</table>
</FORM>
</BODY>
</HTML>
|----------------------------------------------------------------------------------------|
版權聲明 版權所有 @zhyiwww
引用請注明來源 http://m.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-07-03 16:18
zhyiwww 閱讀(2310)
評論(1) 編輯 收藏 所屬分類:
gis