基於Mapserver的WebGIS下Java環境配置與JSP例子

來源:互聯網
上載者:User
 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>
放縮因子:&nbsp;&nbsp;
<INPUT TYPE="text" NAME="rodio" value="<%=rodio%>" id="rodio" >
</td>
<td>
<INPUT TYPE="submit" value="提交">
</td>
<tr><td width=80 >
比例尺:&nbsp;&nbsp;
<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>
 圖例:&nbsp;&nbsp;
 <INPUT NAME="imgLengd" TYPE="image" SRC="<%=vLengdBarFile%>"   border=0>
 </td>
 <td>
 鷹眼:&nbsp;&nbsp;
 <INPUT NAME="vReferenceF" TYPE="image" SRC="<%=vReferenceFile%>"   border=0>
 </td>
 </tr>
 </table>
</FORM>
</BODY>
</HTML>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.