一:创建地图: //创建MAPJ步骤: 1,创建MapJ对象。2,加载地图数据。 3,设置地图尺寸[边界]。4,生成地图 [可以在创建mapJ对象的时候把2和3步骤合在一起设置。]
生成【渲染】地图的步骤: String mapXtremeUrl="http://10.1.5.185:9080/mapxtreme47/servlet/mapxtreme"; <1>创建ImageRequestComposer 对象 imageRC //表示图片是256色背景是白色的GIF图 ImageRequestComposer imageRC=ImageRequest.create(mapj,256,Color.WHITE,"image/gif");
<2>创建MapXtremeImageRender对象 MapXtremeImageRender render=new MapXtremeImageRender(mapXtremeUrl);
<3>使用MapXtremeImageRender对象进行渲染ImageRC和输出 render.render(imageRC); render.toStream(response.getOutputStream());
最后,要把render给dispose()掉 [finally{ if(render!=null){ render.dispose(); render.cleanupConnection(); render=null; } }
]
1,设置图象尺寸
输出地图图象的时候需要设置地图尺寸。设置方法:MapJ.setDeviceBounds(),单位是像素 mapj.setDeviceBounds(new DoubleRect(0,0,defW,defH));
2,设置地图距离单位 com.mapinfo.unit .LinearUnit disUnit=LinearUnit.kilometer; mapj.setDistanceUnits(disUnit);
3,设置地图视野 Zoom是地图的横向跨度,单位由地图的距离单位决定。设置Zoom可以放大或者缩小地图 MapJ.setZoom(500);
4,设置地图中心 有时候会将地图中心定位到找到的目标上或者将中心定位到鼠标所点击的图象上的某一点, 这个时候需要设置地图中心。
⑴将中心定位到鼠标所点击的图象上的某一点
//创建屏幕坐标的ponit对象 DoublePoint screenPoint=new DoublePoint(event.getX(),event.getY()); //将屏幕对象转化为地理坐标、 DoublePoint worldPoint=mapj.transformScreenToNumeric()(screenPoint); //设置地图中心 mapj.setCenter(worldPoint);
⑵将地图中心定位到找到的目标上 /** * 定位居中 * @param mapj MapJ * @param cellId String */ public static void locateCenter(MapJ mapj, String cellId) throws Exception{ List searchColumns = new ArrayList(); searchColumns.add("SYS_ID"); FeatureLayer flyr = (FeatureLayer)mapj.getLayers().get(Constants.LAYER_CELL); if(flyr == null) throw new Exception("系统中不存在该图层!"); Attribute att = new Attribute(cellId); FeatureSet fs = null; try{ fs = flyr.searchByAttribute(searchColumns, "SYS_ID", att, null); Feature feat = fs.getNextFeature(); if(feat != null){ //居中 DoublePoint dp = feat.getGeometry().getBounds().center(); mapj.setCenter(dp); } } catch(Exception ex){ log.error("居中定位出错", ex); } finally{ if(fs != null){ try{ fs.dispose(); } catch(Exception ex){ } } } }
5,设置地图边界 地图边界不是图象的边界,而是地图坐标系的边界。所有的地图操作都在这个边界里面进行 设置地图边界的方法有两中:
1,给定边界的左下角和右上角来设置边界 DoubleRect bounds=new DoubleRect(-180,-90,180,90); mapj.setBounds(bounds);
2,给定地图的中心,宽度和高度来设置边界 DoubleRect bounds=new DoubleRect(new DoublePoint(0,0),180,90); mapj.setBounds(bounds);