|
概述 MapXtreme for Java(以下简称MXTJ)是基于J2EE技术、服务器端的为创建Web地图服务应用的市场上第一个100%Java跨平台解决方案,使用它可实现瘦客户机/服务器、中等客户机/服务器、胖客户机/服务器三种Web GIS模式。
MXTJ主要由 MapXtremeServlet、MapJ、Renderers、Data Providers四部分构成。 MapXtremeServlet是系统的地图服务供给者,它提供如下服务:1 提供栅格地图数据服务,2 提供矢量地图数据服务,3 提供图元文件数据服务(例:tab表里的属性信息); MapJ位于Mapxtreme客户端应用程序开发包API的最顶端作用有二:1 管理地图集的各种状态(例:地图中心位置、地图视野、地图坐标系等),2通过向MapxtremeServlet服务实例转发客户请求获得Servlet响应的数据和图片; Renderer用来生成返回客户端地图数据的组件,有四种:LocalRenderer、MapXtremeImageRenderer、.Intra-Servlet Container Renderer、Composite Renderer。使用MapXtremeImageRender可以在远程产生地图图像,包含MapJ的应用程序和远程一个MapXtremeServlet实例通讯,产生地图图像;LocalRender将地图输出为Java2D Graphics2D对象,所有的Render在客户端产生,也即所谓地图的矢量传输方式;使用IntraServletContainerRenderer不需socket connection,从而MapXtremeSevlet将地图直接传回给客户端;Composite Renderer将地图分为动态与静态图层,当需要更新地图时,可只更新动态图层,而静态图层仅生成一次。 Data Provider是Layer(图层)对象的内部对象,它不是直接由用户创建的,但是它的描述是对图层的定义。要描述Data Provider通过如下接口:TableDescHelper – 描述数据; DataProviderHelper – 定义数据的源;ataProviderRef – 描述获取数据的方式。 以下我将分章节介绍MapXtreme for Java
专题一:怎样在应用中创建地图?
创建Map步骤:
n 创建 MapJ 对象 n 加载地图数据 n 设置地图尺寸 n 生成图片 以下分别描述: 1. 初始化地图对象 执行: myMap = new MapJ(); 2. 加载地图数据 可以打开GeoSet( *.gst)或MapDefinition( *.mdf )文件加载地图数据。MapXtreme没有默认的地图数据,所以必须人工加载地图数据。 加载GeoSet myMap.loadGeoset(geosetName, dataDir, servletURL); 其中: geosetName:geoset的完整文件名(包括路径); dataDir:geoset中引用的tab地图文件的位置; servletURL:mapxtremeservlet的路径,如果MapJ使用LocalDataProviderRef, servletURL可以为NULL。 示例: myMap.loadGeoset("c:\\mapxtreme\\maps\\world.gst", "c:\\mapxtreme\\maps", " http://localhost:8080/mapxtreme40/servlet/mapxtreme"); 加载 Map Definition 可以加载保存在文件中的地图定义(*.mdf)或者数据库中的地图定义记录(record)。首先要创建MapDefContainer,有两种情况: 地图定义在文件中: MapDefContainer mdc = new FileMapDefContainer(dir) 示例: MapDefContainer mdc = new FileMapDefContainer("c:\\mapxtreme\maps") 地图定义在数据库中: MapDefContainer mdc = new JDBCMapDefContainer(driver,url, user, password) 其中,driver,url,user,password都是数据库连接的参数。 下面的示例是使用Oracle Spatial MapRefContainer,地图定义保存在数据库的表中: OraSoMapDefContainer mdc = new OraSoMapDefContainer("oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@machinename:1521:dbSid", "username", "password", "tableName", "Name", "Map_Definition"); 然后加载地图定义: myMap.loadMapDefinition(mapDefContainer, name) name 是 地图定义的名字,如: myMap.loadMapDefinition(mdc, "Asia"); 3. 设置图象尺寸 输出地图图像前需要设置地图尺寸,设置方法:MapJ.setDeviceBounds().,单位是象素。 示例: myMap.setDeviceBounds(new DoubleRect(0, 0, 800, 600)); 4. 生成图片 生成图片需要一下几步: n 指定MapXtremeServlet String mapxtremeServletUrl = " http://localhost:8080/mapxtreme47/mapxtreme"; n 创建ImageRequestComposer ImageRequestComposer imageRC =ImageRequestComposer.create(myMap, 256, Color.blue,"image/gif"); 表示图片是256色背景为蓝色的GIF图。 n 创建ImageRender MapXtremeImageRenderer renderer = new MapXtremeImageRenderer(mapxtremeServletURL); n 生成图片 返回图像的唯一办法就是使用Render对象。 Renderer.render(imageRC); Renderer.toFile("comp.gif"); 此外,还可以使用toStream,toImage方法将图像返回。 如果使用MapJ直接获取地图数据并生成图片,则使用LocalRender而不是MapXtremeImageRender。MapXtremeImageRender和LocalRender将在后面专门章节介绍。 |