MapXtreme for java 基本概念
原创
©著作权归作者所有:来自51CTO博客作者wx63086371c7e9c的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、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>