MapXtreme for java 基本概念

来源:互联网 发布:java 0 1 true false 编辑:程序博客网 时间:2024/04/30 10:27

一、MapXtreme for java 主要构成部分:
a、MapXtremeServlet
(1) 提供栅格地图服务 
(2)提供矢量地图服务
(3) 提供图元文件数据服务(tab 的属性数据)

b、MapJ Object
(1) 管理地图集的各种状态(地图中心位置,地图视野,地图坐标系)
(2) MapJ 通过向MapXtremeServlet 服务实例转发客户请求

c、Renderers
用来生成返回客户端地图数据的组件.有四种:LocalRenderer、MapXtremeImageRenderer、Intra-Servlet Container Renderer、Composite Renderer。
MapXtremeImageRender可以在远程产生地图图像,包含MapJ的应用程序和远程一个MapXtremeServlet实例通讯,产生地图图像;
LocalRender将地图输出为Java2D Graphics2D对象,所有的Render在客户端产生,也即所谓地图的矢量传输方式;
IntraServletContainerRenderer不需socket connection,从而MapXtremeSevlet将地图直接传回给客户端;
Composite Renderer将地图分为动态与静态图层,当需要更新地图时,可只更新动态图层,而静态图层仅生成一次。

d、Data Providers
Data Providers 在MapJ对象访问地图数据,提供多种数据源,
比如mapinfo 的.tab,ESRI的Shapefiles,Oracle spatial

二、基本架构图

三、安装地理服务器

1、下载地址:http://www.pbinsight.com/support/product-downloads/item/mapxtreme-java-edition-trial-version/KVQDMVY6IY
2、运行install.exe文件,跟普通的windows下安装软件一样安装。
安装成功后,在安装目录下会有如下文件
apache-tomcat-5.5  自带tomcat
bin                            
docs
examples               一些列子
lib                            用到的jar包
logs
3、MapXtreme Java工具的使用
MapXtreme ServerMapXtreme Server是用于生成地图的web服务器,也即是地图服务器。
通过菜单栏中的“Start MapXtreme Server”启动地图服务器。
然后,我们可以打开IE在地址栏中输入http://127.0.0.1:8080/进行访问
我们可以看到左边的导航条中有很多有用的链接信息。主要包括对tomcat的管理、API文档的说明、地图应用的sample。
MapXtreme Java Manager通过点击菜单栏中的“MapXtreme Java Manager-WebServer”启动MapXtreme Java Manager。注意:必须在地图服务器启动以后,MapXtreme Java Manager-WebServer才能正常启动。
MapXtreme Java Manager启动成功以后,会弹出一个管理界面


四,构建自己的webGIS 应用

(1)标准格式的地图图片(*.gst,或者*.mdf)。

(2)编写一个简单的servlet首先编写一个简单的servlet,后面我们将重写其doGet方法来生成地图。
将安装目录中/MapXtreme-4.8.2/lib/common中的文件和/MapXtreme-4.8.2/lib/server中的文件复制到自己的web应用中的/WEB-INF/lib目录下。
,然后启动web服务器,通过浏览器访问servlet看是否运行正常。

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

MyMapServlet.java

package com.mapbar.gis.mapxtreme;import java.awt.Color;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.mapinfo.mapj.MapJ;import com.mapinfo.mapxtreme.client.MapXtremeImageRenderer;import com.mapinfo.util.DoubleRect;import com.mapinfo.xmlprot.mxtj.ImageRequestComposer;public class MyMapServlet extends HttpServlet {private String geoSetFile = "";private String dataDir = "";private String CONTENT_TYPE = "text/html; charset=GBK";private String mimetype = "image/gif";private String mapxtremeurl = "";private Color imageColor = Color.blue;public MyMapServlet() {super();}public void destroy() {super.destroy();}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doAny(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doAny(request, response);}public void doAny(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try {response.setContentType("text/html; charset=GBK");response.setContentType(mimetype);ServletOutputStream so = response.getOutputStream();// 加载地图MapJ mapj = initMapJ();// 创建ImageRequestComposer (图片底色,低位,格式信息)ImageRequestComposer imageRC = ImageRequestComposer.create(mapj,256, imageColor, mimetype);// 创建ImageRenderMapXtremeImageRenderer renderer = new MapXtremeImageRenderer(mapxtremeurl);// 生成图片 Render对象返回图像.renderer.render(imageRC);renderer.toStream(so);renderer.dispose();so.flush();// 关闭输出流} catch (Exception ex) {ex.printStackTrace();}}public void init(ServletConfig config) throws ServletException {super.init(config);geoSetFile = config.getInitParameter("geoSetFile");dataDir = config.getInitParameter("dataDir");mapxtremeurl = config.getInitParameter("mapxtremeurl");}/** * *@加载地图 */public MapJ initMapJ() {MapJ myMap = new MapJ();try {// 加载数据, 可以加载Gst,Mdf。geoSetFile:.gst文件路径,dataDir:.tab文件所在目录myMap.loadGeoset(geoSetFile, dataDir, null);// 生成图片尺寸myMap.setDeviceBounds(new DoubleRect(0, 0, 800, 600));} catch (Exception e) {e.printStackTrace();}return myMap;}}

web.xml

 

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!--mapxtreme地图服务器的servlet的配置--><servlet><servlet-name>mapxtreme</servlet-name><servlet-class>com.mapinfo.mapxtreme.MapXtremeServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>mxtj_image</servlet-name><servlet-class>com.mapinfo.mapxtreme.ImageHandlerServlet</servlet-class><load-on-startup>2</load-on-startup></servlet><servlet><servlet-name>mxtj_metadata</servlet-name><servlet-class>com.mapinfo.mapxtreme.MetadataHandlerServlet</servlet-class><load-on-startup>3</load-on-startup></servlet><servlet><servlet-name>mxtj_vector</servlet-name><servlet-class>com.mapinfo.mapxtreme.VectorHandlerServlet</servlet-class><load-on-startup>4</load-on-startup></servlet><servlet><servlet-name>MyMapServlet</servlet-name><servlet-class>com.mapbar.gis.mapxtreme.MyMapServlet</servlet-class><init-param><param-name>geoSetFile</param-name><param-value>D:\workspace\MapXtreme\data\hunan.gst</param-value></init-param><init-param><param-name>dataDir</param-name><param-value>D:\workspace\MapXtreme\data</param-value></init-param><init-param><param-name>mapxtremeurl</param-name><param-value>http://localhost:8090/MapXtreme/servlet/mapxtreme</param-value></init-param></servlet><servlet-mapping><servlet-name>mapxtreme</servlet-name><url-pattern>/servlet/mapxtreme</url-pattern></servlet-mapping><servlet-mapping><servlet-name>MyMapServlet</servlet-name><url-pattern>/servlet/MyMapServlet</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>