`
wjm901215
  • 浏览: 153545 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用mapXtreme Java开发web gis应用 (下)

    博客分类:
  • MAP
阅读更多

用mapXtreme Java开发web gis应用 (下)

3.3.3 编写生成地图的服务端代码这里所指的生成地图的服务端代码是指web服务器中servlet响应客户端请求生成图片信息的代码,具体讲就是指servlet中重写的doGet( )方法中的代码。特别注意的是,这里所指的生成地图的代码是我们通过调用MapJ的API向地图服务器发送生成地图请求的代码;相对地图服务器而言,我们这里编写的又是地图服务的客户端代码;相当于web应用而言,我们这里编写的却又是服务端代码。

下面我们以一个实例来介绍如何调用MapJ API编写生成地图的服务端代码。
第一步:向地图服务器发送请求生成地图

CODE:

  // 输出图片的格式
       private static String mimeType = "image/gif";
       // mapxtremeservlet地图服务器url
       private static String m_mxtURL = "http://localhost:80/mapxtreme480/servlet/mapxtreme";
       // 实现HttpServlet的doGet方法
       public void doGet(HttpServletRequest request, HttpServletResponse response)
                     throws IOException, ServletException {
              // 设置ContentType
              response.setContentType(mimeType);
              // 返回响应的输出流
              ServletOutputStream sos = response.getOutputStream();
              // 创建MapJ对象
              MapJ  m_mapj = new MapJ();
              try {
                     // 加载地图
                     String  m_mapPath="E:\\gisapp\\MapData\\Others\\China.mdf";
                      m_mapj.loadMapDefinition(m_mapPath);                 
                     // 设置地图大小
                     m_mapj.setDeviceBounds(new DoubleRect(0, 0, 800, 600));
                     request.getSession().setAttribute("worldMap", m_mapj);
                     // 创建图像请求器(包装mapj对象,图片的色位,底色,格式信息)
                     ImageRequestComposer irc = ImageRequestComposer.create(m_mapj, 256,
                                   Color.white, mimeType);
                     // 创建mxtj的图像渲染器
                     MapXtremeImageRenderer renderer = new MapXtremeImageRenderer(
                                   m_mxtURL);
                     // 用渲染器渲染请求器
                     renderer.render(irc);
                     // 渲染器输出图片流到输出流,客户端显示之
                     renderer.toStream(sos);
                     // 释放渲染器对象
                     renderer.dispose();
              } catch (Exception e) {
                     System.out.println("Error");
                     e.printStackTrace();
              }
       }
第一步显示效果如下:


1.jpg





第二步:控制地图的显示(响应客户端对地图放大、缩小、重定位、平移的请求)

CODE:

  int  xpoint=Integer.parseInt(request.getParameter("xpoint"));//鼠标left坐标
       int  ypoint=Integer.parseInt(request.getParameter("ypoint"));//鼠标top坐标
       double   zoomSize=Double.parseDouble(request.getParameter("zoomSize"));//缩放比
              // 返回响应的输出流
              ServletOutputStream sos = response.getOutputStream();                  
              // 获取地图对象
              MapJ m_mapj = (MapJ)request.getSession().getAttribute("worldMap");                        
              try {                     
                     // 设置地图大小   
                DoublePoint  dpt=      m_mapj.transformScreenToNumeric(new DoublePoint(xpoint,ypoint));
                     m_mapj.setCenter(dpt);         
                     // 创建图像请求器(包装mapj对象,图片的色位,底色,格式信息)
                     ImageRequestComposer irc = ImageRequestComposer.create(m_mapj, 256,
                                   Color.white, mimeType);
                     // 创建mxtj的图像渲染器
                     MapXtremeImageRenderer renderer = new MapXtremeImageRenderer(
                                   m_mxtURL);
                     // 用渲染器渲染请求器
                     renderer.render(irc);
                     // 渲染器输出图片流到输出流,客户端显示之
                     renderer.toStream(sos);
                     // 释放渲染器对象
                     renderer.dispose();
              } catch (Exception e) {
                  e.printStackTrace();
              }
第二步,点击放大后可看到主要城市的图层信息,效果如下:


2.jpg






进一步放大后,能看到更多的图层信息,效果如下:


3.jpg




第三步:查询图层信息(根据客户端点击的地图位置,展现不通的图层信息)

CODE:

  PrintWriter out = response.getWriter();
        HttpSession session = request.getSession();
        String xmlInfo = "";
        xmlInfo +="<LAYERS><CITY>";
        try {
               int    xpoint=Integer.parseInt(request.getParameter("xpoint"));
              int    ypoint=Integer.parseInt(request.getParameter("ypoint"));         
            MapJ mainMap = (MapJ) session.getAttribute("worldMap");            
            FeatureLayer layer = (FeatureLayer) mainMap.getLayers().get("CHCTY_2K");
//创建一个图原层           
            if (layer.isVisibleAtCurrentZoom()) {      
                ArrayList columns = new ArrayList();
                columns.add("lace_Name");
                columns.add("Latitude");
                columns.add("Longitude");
                DoubleRect rect = mainMap.transformScreenToNumeric(new DoubleRect(new DoublePoint(xpoint-100, ypoint-100), new DoublePoint(xpoint+100, ypoint+100)));
                FeatureSet fs = layer.searchWithinRectangle(columns, rect, QueryParams.EMPTY_PARAMS);//得到图元集
                         Feature f;                    
                         while ((f = fs.getNextFeature()) != null ) {   
                                for (int i = 0; i < f.getAttributeCount(); i++) {                          
                                              switch (i)
                                              {
                                                     case 0:
                                                            xmlInfo +="<LACENAME>"+f.getAttribute(i)+"</PLACENAME>";
                                                            break;
                               case 1:
                                      xmlInfo +="<LATITUDE>"+f.getAttribute(i)+"</LATITUDE>";
                                                            break;     
                               case 2:
                                      xmlInfo +="<LONGITUDE>"+f.getAttribute(i)+"</LONGITUDE>";
                                      break;                                    
                                              }
                                             
                                }                              
                         }         
                fs.dispose();               
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        xmlInfo +="</CITY></LAYERS>";
out.print(xmlInfo);
第三步,点击右键菜单,查看城市坐标图层信息:


4.jpg




查询出一定范围内的城市的坐标信息,示例效果如下:


5.jpg


3.3.4 控制页面与后台的交互获取客户端鼠标点击位置

CODE:

  
/**
*获取地图的偏移量
*/
var xOffset=0;
var yOffset=0;
function getObjOffset(){
    var obj=document.all('chinaMap');   
    var xOff, yOff;
    xOff = 0;
    yOff = 0;
    while (null != obj) {
       xOff += obj.offsetLeft;
       yOff += obj.offsetTop;
       obj = obj.offsetParent;
    }
    xOffset=xOff;
    yOffset=yOff;
}
var xpoint=event.x- xOffset;//鼠标x坐标
vary point=event.y- yOffset;//鼠标y坐标
设置鼠标指针样式
element.style.cursor=”hand”;
element.style.cursor=”move”;

设置菜单位置(若有右键操作时可设置):

menuDiv.style.left=event.x;

menuDiv.style.top=event.y;
分享到:
评论
1 楼 zouc816 2011-01-28  
hi,wjm901215

我看你这篇文章对mapXtreme Java写得挺详细的,我才学mapXtreme,加我qq:505275323交流学习下,好吗?

相关推荐

    mapXtreme-Java-web-gis.zip_GIS 开发_Java GIS_gis java_gis定位java_we

    在“用mapXtreme Java开发web gis应用.rtf”这份文档中,可能会详细讲解如何配置MapXtreme Java环境,设置地图服务,创建Web项目,以及如何在Web页面上嵌入地图控件。开发者会学习到如何加载地图图层,设置比例尺,...

    mapxtreme for java开发人员指南.pdf

    - **Web部署**:讨论了如何在Web环境中部署MapXtreme Java 应用程序。 - **部署选项**:涵盖了不同的部署场景,如单机部署、集群部署等。 - **案例研究**:通过实际案例展示了如何利用MapXtreme Java 构建高效、可靠...

    MapInfo MapXtreme Java 版开发人员指南

    《MapInfo MapXtreme Java 版开发人员指南》是一本专门为使用MapInfo MapXtreme Java版进行软件开发的工程师准备的详细指导手册。MapInfo Corporation作为出版者,为开发者提供了一份深入理解该产品的关键资源,以...

    MapInfo MapXtreme Java 版4.7 开发人员指南

    《MapInfo MapXtreme Java 版4.7 开发人员指南》是为开发者提供的一份详尽参考资料,旨在帮助他们充分利用MapInfo公司的MapXtreme Java 4.7产品进行地图应用的开发。MapXtreme是一款强大的地理信息系统(GIS)组件,...

    mapxtreme for java开发CS版之一

    标题“MapXtreme for Java开发CS版之一”暗示了我们即将探讨的是关于使用MapXtreme这款GIS(地理信息系统)软件的Java版本进行客户端(Client-Side,CS)开发的相关知识。MapXtreme是Extremesoft公司(现为...

    MapXtreme Java教程

    MapXtreme Java教程主要针对的是想要学习和掌握MapXtreme for Java这一技术的初学者。...通过深入学习MapXtreme Java教程,初学者可以逐步熟悉这个强大的地图服务开发工具,从而构建出功能丰富的Web GIS应用。

    基于MapXtremeJava的WebGIS研究与应用

    - **易于集成**:MapXtremeJava提供了一套完整的API,使得开发者可以轻松地将GIS功能集成到现有的Web应用中。 #### 四、基于瘦客户端实现WebGIS系统的关键技术 - **矢量数据传输优化**:为了提高系统的响应速度,...

    MapXtreme for Java开发教程

    MapXtreme for Java是一款基于J2EE技术的跨平台解决方案,专门用于服务器端的Web GIS应用开发。它支持三种Web GIS模式:瘦客户端/服务器、中等客户端/服务器和胖客户端/服务器。 **专题一:怎样在应用中创建地图** ...

    【绝对经典】MapXtremeJava47 中文教程

    教程“MapXtremeJava47 中文教程”会详细讲解以上各个方面的使用方法和示例代码,帮助开发者快速掌握MapXtreme Java 4.7的开发技巧。通过阅读这个教程,你可以学习到如何配置MapXtreme环境,创建地图项目,处理地理...

    MapInfo MapXtreme for Java 培训教材

    MapInfo MapXtreme for Java培训教材将全面介绍如何利用此工具进行GIS应用开发,包括基础概念、J2EE集成、地图展示、用户交互、地理编码、数据管理和高性能特性等。通过学习,开发者将能熟练掌握MapXtreme for Java...

    MapXtremeJava48_DG_CHS.rar_Java 8_MapXtreme_MapXtreme 4.8_mapxtr

    这个压缩包“MapXtremeJava48_DG_CHS.rar”包含了MapXtreme 4.8的中文版详细指南,对于想要在Java 8环境下使用MapXtreme进行地图开发的程序员来说,是一份宝贵的资源。 MapXtreme 是Esri公司的一个产品,Esri是GIS...

    mapxtreme for java 的开发实例,有注解.入门用maptrmemforjava

    MapXtreme for Java是一款由Esri公司推出的地图开发工具,专为Java平台设计,用于构建地理信息系统(GIS)的应用程序。它提供了丰富的API和功能,使得开发者能够轻松地集成地图展示、地理编码、空间分析等功能到自己...

    MapXtreme for Java开发教程(易懂)

    MapXtreme for Java是一款基于J2EE技术的Web GIS(地理信息系统)解决方案,专为构建服务器端的地图服务应用设计。它支持多种Web GIS模式,包括瘦客户端、中等客户端和胖客户端。这款100% Java跨平台工具由四个核心...

    mapXtreme for Java4.8.2 简单例子

    项目中已经把mapXtreme for Java的服务和应用jar包放到一起了,可以直接加载到eclipse中运行。 之前发布了一个相同的例子,只是地图用的是我安装mapXtreme for Java4.8.2后的mdf格式地图,这个地图中用了我电脑的...

    mapx.zip_MapXtreme_java mapinfo_mapinfo_wms mapinfo

    6. 客户端应用开发:MapXtreme Java可以被集成到各种Web应用中,如B/S架构的GIS系统,提供地图组件,供用户进行地图浏览、查询和操作。 7. 扩展性:MapXtreme Java具有良好的扩展性,开发者可以自定义地图控件、...

    一个基于servlet的mapxtreme java 简单的例子(含使用说明)

    MapXtreme Java是一款强大的地图开发工具,由Esri公司出品,主要用于构建基于Java的地理信息系统(GIS)应用。...总之,掌握MapXtreme Java与Servlet的结合使用,将为你的GIS应用开发打下坚实的基础。

Global site tag (gtag.js) - Google Analytics