关于MapXtreme for Java鹰眼实现思路及代码
2012-08-30 21:26
369 查看
两个思路: 1.客户断每次操作地图后发起两次请求:取主地图和鹰眼地图,鹰眼地图根据主地图窗口在临时图层生成一个方框 2.页面初始化的时候从服务器获取一张小图(鹰眼图,可以是事先做好的,也可以通过MapJ生成),同时获得这张鹰眼图的minx,miny,maxx,maxy,zoom,每次操作地图后通过主地图的minx,miny,maxx,maxy,然后在页面上根据这几对坐标和zoom生成一个div叠加到鹰眼图上 推荐第二种方式,减少服务器的压力! 第一种方式我已经不怎么用了,代码也找不到,网上的一段: private void responsebound(MapJ mymap, MapJ boundmap, HttpServletResponse response) { ServletOutputStream sout = null; try { Layer anlayer = boundmap.getLayers().elementAt(0); FeatureFactory ff = boundmap.getFeatureFactory(); PrimaryKey pk = new PrimaryKey(new Attribute(101)); Rendition rend = RenditionImpl.getDefaultRendition(); rend.setvalue(Rendition.STROKE, Color.red); rend.setvalue(Rendition.STROKE_WIDTH, 2); rend.setvalue(Rendition.FILL_OPACITY, new Float(0.0D)); DoublePoint p1 = new DoublePoint(0.0D, 0.0D); DoublePoint p2 = new DoublePoint(imgsizex, 0.0D); DoublePoint p3 = new DoublePoint(imgsizex, imgsizey); DoublePoint p4 = new DoublePoint(0.0D, imgsizey); DoublePoint mp1 = mymap.transformScreenToNumeric(p1); DoublePoint mp2 = mymap.transformScreenToNumeric(p2); DoublePoint mp3 = mymap.transformScreenToNumeric(p3); DoublePoint mp4 = mymap.transformScreenToNumeric(p4); double p[] = new double[10]; p[0] = mp1.x; p[1] = mp1.y; p[2] = mp2.x; p[3] = mp2.y; p[4] = mp3.x; p[5] = mp3.y; p[6] = mp4.x; p[7] = mp4.y; p[8] = mp1.x; p[9] = mp1.y; Feature ft = ff.createRegion(p, rend, null, null, pk); PrimaryKey spk[] = { new PrimaryKey(new Attribute(101)) }; Vector col = new Vector(); FeatureSet ftset = anlayer.searchByPrimaryKey(col, spk, null); PrimaryKey primarykey; if(ftset == null) primarykey = anlayer.addFeature(ft); else anlayer.replaceFeature(pk, ft); boundmap.setDeviceBounds(new DoubleRect(0.0D, 0.0D, smallimgsizex, smallimgsizey)); boundmap.setDistanceUnits(mymap.getDistanceUnits()); if(mymap.getZoom() / boundmap.getZoom() >= 0.80000000000000004D) { boundmap.setZoom(mymap.getZoom() * 1.25D); boundmap.setCenter(mymap.getCenter()); } else { boundmap.setZoom(resetzoom); boundmap.setCenter(resetpoint); } } catch(Exception e) { e.printStackTrace(); } response.setContentType("image/jpeg"); try { sout = response.getOutputStream(); ImageRequestComposer irc = ImageRequestComposer.create(boundmap, 65535, Color.white, "image/jpeg"); MapXtremeImageRenderer renderer = new MapXtremeImageRenderer(mapxtremeurl); renderer.render(irc); renderer.toStream(sout); } catch(Exception e) { e.printStackTrace(); } try { if(sout != null) sout.close(); } catch(Exception exception) { } } 第二种方式就是javascript了: var ViewScaleX = (boundMap_RX-boundMap_LX)/boundMap_W; var ViewScaleY = (boundMap_TY-boundMap_BY)/boundMap_H; var xView1 = (map.LX-boundMap_LX)/ViewScaleX; var xView2 = boundMap_W - (boundMap_RX - map.RX)/ViewScaleX; var yView1 = (boundMap_TY - map.TY)/ViewScaleY; var yView2 = boundMap_H-(map.BY-boundMap_BY)/ViewScaleY; var Height = yView2-yView1; var Width = xView2-xView1; 改变鹰眼方框的大小(boundMap_BOX , Width , Height); 移动鹰眼方块(boundMap_BOX , parseInt(boundimg.border)+xView1 , parseInt(boundimg.border)+yView1); archive 评论: 第一种方法要能够准确实现鹰眼矩形 而第二种方法对于独立坐标系是可以使用的,如果使用大地坐标系而且显示范围较大时(如:整个世界)很难准确实现鹰眼矩形(除非你能够在客户端实现投影匹配) |
相关文章推荐
- 关于dtree树代码实现带checkox修改的最新思路
- 关于 如何实践kernel/driver/u-boot ,怎么样按照作者的思路实现自己的代码
- 关于利用D触发器实现2/4分频的思路与VERILOG代码
- 关于MapXtreme for Java鹰眼实现思路及代码
- 关于pgrouting 的 最短路径 思路解析 以及C++代码实现
- PHP登陆后跳转到登陆前页面实现思路及代码
- C#对称加密(AES加密)每次生成的结果都不同的实现思路和代码实例
- .Net中关于stirng转System.Type的一种实现思路详解
- 关于UICollectionView在MRC下的纯代码实现之一(在UIViewController中实现)
- Servlet+Jsp实现图片或文件的上传功能具体思路及代码
- ASP.NET 大文件下载的实现思路及代码
- hbase分页应用场景及分页思路与代码实现
- 关于对H264码流的TS的封装的相关代码实现
- 关于加载无网络图与无数据图设计思路,点击重新加载方法实现
- 密保问题数据库设计思路和代码实现
- Json数据转换list对象实现思路及代码
- Enter回车切换输入焦点实现思路与代码兼容各大浏览器