博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArcIMS 开发学习笔记(一)
阅读量:6802 次
发布时间:2019-06-26

本文共 3646 字,大约阅读时间需要 12 分钟。

最近在公司做WebGIS项目,感觉很爽快,将学习到的东西整理一下,供大家交流。

1.环境配置

    Web服务器:Apache2048
    Servlet:Tomcat4129
    GIS开发平台:ArcIMS 9.0
    Java编译环境:Eclipse
2.上述环境设置好之后,进入ArcIMS开发阶段,主要的工作分三块:java类/jsp/javascript
   用Struts 开发实质上将请求和处理完全隔离,jsp网页中只需要写与action对应的form,这些Action
   通过struts-config.xml和jsp网页当中的form等对应起来.
   下文主要按照功能对代码实现进行研究
   初始化地图 InitMap Action:
   需要用到的核心类:import com.esri.aims.mtier.io.ConnectionProxy和import  com.esri.aims.mtier.model.map.Map
     *************代码*********  
        ConnectionProxy conn = null;
        Map map = null;
        try {
            conn = new ConnectionProxy();
            map = new Map();
            conn.setHost(host);//ArcIMS服务器的名称或者IP
            conn.setConnectionType(connectionType);
            conn.setPort(port);//ArcIMS服务器的端口
            conn.setService(service);//需要调用的ArcIMS服务器的服务名称
            conn.setDisplayMessages(displayMessages);
            map.initMap(conn, 0, true, true, true, true);//初始化地图
            //地图和图例的风格设置
            map.setWidth(width);
            map.setHeight(height);
            map.getLegend().setFont("宋体");
     map.getLegend().setAntialiasing(false);
     map.getLegend().setTitle("图例");
            map.getLegend().setTitleFontSize(18);
     map.getLegend().setLayerFontSize(12);
     map.getLegend().setValueFontSize(10);
     map.getLegend().setAutoExtend(true);
     map.getLegend().setWidth(125);
            map.getLegend().setCellSpacing(7);
          //获取地图的全图范围和一些参数,并且传送给客户端
            Envelope extent = map.getEnvelope();
            double minx = extent.getMinX();
            double miny = extent.getMinY();
            double maxx = extent.getMaxX();
            double maxy = extent.getMaxY();
           
            double mapXDistance = maxx - minx;
            double mapYDistance = maxy - miny;
           
            double doubleWidth = Double.parseDouble(Long.toString(width));
            double doubleHeight = Double.parseDouble(Long.toString(height));
            double mapRatio = (maxx - minx) / (maxy-miny);
            double windowRatio = doubleWidth / doubleHeight;       
           
            double mapHeight = (windowRatio/mapRatio) * doubleHeight;
           
            double upperHeight = (doubleHeight - mapHeight) / 2;
           
            double distancePerPixel = mapXDistance / doubleWidth;
           
            double mapMaxY = maxy + distancePerPixel * upperHeight;
            double mapMinY = miny - distancePerPixel * upperHeight;
         
             //将地图的全图范围传递到客户端
            request.setAttribute("fullMinX", new Double(extent.getMinX()));
            request.setAttribute("fullMinY", new Double(mapMinY));
            request.setAttribute("fullMaxX", new Double(extent.getMaxX()));
            request.setAttribute("fullMaxY", new Double(mapMaxY));
            //将地图的当前范围传递到客户端
            request.setAttribute("minX", new Double(extent.getMinX()));
            request.setAttribute("minY", new Double(mapMinY));
            request.setAttribute("maxX", new Double(extent.getMaxX()));
            request.setAttribute("maxY", new Double(mapMaxY));
           
            //告知客户端这是在初始化地图
            request.setAttribute("initMap", "true");
           //获取地图图片的 mapUrl和图例了legendurl
            request.setAttribute("mapUrl", map.getMapOutput().getURL());
            request.setAttribute("legendUrl", map.getLegend().getLegendOutput()
                    .getURL()); 
           //将Map对象放入Session中,以后在这个对话中一直使用这个map对象来生成地图
            request.getSession().setAttribute("map", map);
            request.getSession().setAttribute("fullExtent", extent);
   }
catch(){}

        return mapping.findForward("ConetentFrame");//将网页重定向到ConetentFrame

        ConetentFrame对应的content.jsp里面只需要写一个form,对应这个Action类InitMap

就可以初始化地图并获取相关的参数。

在content.jsp中,获取地图的参数,并赋给客户端。

<script language="JavaScript" type="text/javascript">
   var m = parent.mapFrame;  //
<%
//初始化地图时,获得地图的初始化的全图范围
if (initMap != null){
%>  
   
    m.fullMinX = <%=(Double)request.getAttribute("fullMinX")%>;
    m.fullMinY = <%=(Double)request.getAttribute("fullMinY")%>;
    m.fullMaxX = <%=(Double)request.getAttribute("fullMaxX")%>;
    m.fullMaxY = <%=(Double)request.getAttribute("fullMaxY")%>;
    m.fullOVLeft = m.fullMinX;
    m.fullOVRight = m.fullMaxX;
    m.fullOVTop = m.fullMaxY;
    m.fullOVBottom = m.fullMinY;
    m.fullOVWidth = Math.abs(m.fullOVRight - m.fullOVLeft);
    m.fullOVHeight = Math.abs(m.fullOVTop - m.fullOVBottom);
<%
}

转载于:https://www.cnblogs.com/TonyWu/archive/2005/10/15/255373.html

你可能感兴趣的文章
oracle字符集查看修改
查看>>
[Leetcode] Container With Most Water
查看>>
查看版本信息的命令
查看>>
Linux搭建SVN服务器
查看>>
UML 之 数据流图(DFD)
查看>>
ReiserFS与EXT3的比较
查看>>
利用CSS3打造一组质感细腻丝滑的按钮
查看>>
hadoop中文官网
查看>>
phpQuery—基于jQuery的PHP实现(转)
查看>>
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类...
查看>>
codeforces 236A . Boy or Girl(串水问题)
查看>>
android消息推送
查看>>
java:如何让程序按要求自行重启?
查看>>
iOS:本地数据库sqlite的介绍
查看>>
python3 post方式上传文件。
查看>>
MVC 模型绑定
查看>>
android 时间对话框 TimePickerDialog简介
查看>>
href="javascript:void(0)"
查看>>
我的css释疑-float line-height inline-block vertical-align
查看>>
《Pro Android Graphics》读书笔记之第四节
查看>>