一、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); // 创建ImageRender MapXtremeImageRenderer 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>