SuperMap IS.NET 浏览范围控制

     说到浏览范围控制,起始于一个问题:MapControl控件浏览地图时候地图范围外区域会有部分白图,这部分白图是SuperMap IS.NET动态出图出来的凡是浏览到地图区域以外的区域,都会有白图,怎么只看到有图的区域呢?其实思路很简单,当客户浏览到地图外区域时候出发地图onviewboundschanged事件,在这个事件中判断浏览到的地图范围超出当前地图的范围,回到前一地图状态。

      由于这样的需求很多,所以SuperMap IS.NET也开出来了这样的接口,来控制地图可视范围

一、初始化的时候控制地图浏览范围,具体设置如下:
① AjaxControl 开发模式:在SuperMap.IS.Utility.js 文件中找到_CreateMapControl 这个
函数,然后如下代码:
params.customBounds =new Array ();
params.customBounds["changchun"]=new SuperMap.IS.MapRect(800,‐6000,6000,‐800);
② AjaxScript 开发模式:在初始化地图的脚本中,对params 值做修改,写法与ajaxcontrol
一致,只是写的位置不同;
注:如果是多个地图,可以如下设置:
params.customBounds["changchun"]=new SuperMap.IS.MapRect(800,‐6000,6000,‐800);
params.customBounds["Edit"]=new SuperMap.IS.MapRect(800,‐6000,6000,‐800);
二、在非初始化时设置:
AjaxControl 和AjaxScript 方法一致,具体设置:接口是SetCustomBounds,该方法可以
在地图初始后完成之后,任意时刻调用。
function setBounds() {
var mr = new SuperMap.IS.MapRect(800, ‐6000, 6000, ‐800);
map.SetCustomBounds(mr); }


注意:目前该方法仅支持Ajax 开发模式而且必须要设定比例尺级别,在SuperMap IS.NET5.3.5.11729 版本以后均试用,也支持SuperMap SuperMap IS.NET6.0 及以上版本。

     由此又引出来一个问题:地图的权限控制,什么事地图的权限控制呢?其实就是指根据不同的用户看到不同的地物内容或者范围,很多业务系统有这样的需求,如工商系统,市级的工商局局长看到的是全市的纳税企业信息,而县级的工商局局长只能看到全县的纳税企业信息,即不同级别的人看到自己职权范围内的数据,这个在通常的业务系统中很常见,即权限管理系统。但是应用到地图上的话,就是控制不同的角色查看不同的数据(地物内容或者范围)。

     其实这样的需求在GIS中实现是最简单的,即图层过滤,只需设置过滤条件,即可不同的权限用户看到不同的地图内容。但是在BS系统中,面对海量的GIS数据量和高性能的地图访问,一般的处理策略是做好地图图片缓存提高访问性能,这样的情况下图层过滤式不可能了,那这样的需求如何实现呢?其实回到问题的原始需求,思考一下这个问题,用户需求过滤的是地物和范围,而这个范围是从最开始划定的区域,最简单的一个方案:如果区域数量比较少,直接某个区域保存为一幅地图,不同用户显示不同地图即可。但是这个方案的前提是划定区域固定,而且数量有限。第二个方案:直接按照浏览范围控制显示区域即可,具体可以参考上面,这个方案适用于用户范围比较多的情况。第三个方案:动态出图方案,这样的方案适合于数据量特别少的情况,当然也可以通过叠加地图方式来叠加上底图上,即mashup了。第四个方案:动态的出图的地物比较多,这样的情况下可以采用一个和第三个方案相反的方案,第三个把需要控制显示的地图动态显示,第四个方案可以叠加一个背景特定区域透明,其他不透明的地图,这样只显示特定区域即可。 

      说了这么多,感觉有点罗嗦,上面是一些关于控制范围的思考,欢迎大家批评指正。

posted @ 2011-01-24 13:53  awei20081  阅读(466)  评论(0编辑  收藏  举报