+ -

SuperMap IS.NET切换地图模式之我见

时间:2011-06-16

来源:awei20081

在手机上看
手机扫描阅读

      最近碰到这样的问题地图切换而要保持地图中心点及比例尺不变,而且不同地图的图片格式也不同,解决过程颇费周章,写出来供大家分享吧。

      其实问题的起源挺简单的,由于Google地图的大行其道,配置两幅地图影像及矢量地图是一般WebGIS工程中常见到的方案,好处当然是显而易见,影像直观,矢量精细。所以作为一个WebGIS开发基础平台,SuperMap IS.NET急切需要支持这种需求。

 

     从SuperMap IS.NET 5.3.6开始支持两种切换地图模式,在MapControl初始化参数中switchMapMode来设置,文档解释如下:

         1. 每次切换地图时以当前地图范围的中心点和比例尺为地图显示视窗的中心点和比例尺,该模式为默认模式,值为0。
         2. 每次切换地图时以上一幅地图的地图范围的中心点和比例尺为地图显示视窗的中心点和比例尺,即保持上一幅地图的中心点和比例尺,值为1。该模式主要被采用于基于同一幅地图但在不同领域有不同应用(其数据不同)的场景,如基于同一幅世界地图的林业领域数据和气象领域数据。

但是上述参数也有个限制,那就是图片格式,一般情况下影像的出图格式为jpg,矢量的推荐png,这样切换地图时候如果地图做了预缓存就没法做修改了,而且switchMapMode也有限制只能用于AjaxScripts开发模式,AjaxControl开发模式就没法设置了,根据反复测试及研究服务器相关参数找到解决方案如下:

1、使用地图服务管理工具发布地图之后设置添加如下地图图中地图名字根据自己工作空间设置,1500及1501都是地图名字。

图1

2、设置每副地图的格式相关设置,如图2

图2

设置1500地图的图片格式为png,其他设置在默认地图设置选项中已经设置,可以不用管了。1501地图设置同上。

3、修改SuperMap.IS.Utility.js文件中的_CreateMapControl函数的params.imageFormat = imageFormat;代码为params.imageFormat = "png52";png52为一个错误或者不支持的图片格式,此处给了个不存在的格式png52。注意此处修改了系统类库,所以建议升级工程时候注意下。

4、工程初始化MapControl时候设置的图片格式为一个地图默认需要的即可,或者不用填写。

5、然后调用

///MapControl1为实例化的MapControl对象,mapName是地图名字
function switchmaphanshu(mapName) {
    var switchParam = new SuperMap.IS.SwitchParam();
    switchParam.center = new SuperMap.IS.MapCoord(MapControl1.GetMapCenterX(), MapControl1.GetMapCenterY());
    switchParam.mapName = mapName;
    switchParam.mapScale = MapControl1.GetMapParam().mapScale;
    MapControl1.SwitchMap(switchParam);
}

此代码保持了地图的中心点及比例尺,当然可以随意设置比例尺中心点。

 

至此该需求已经给出基本方案,当然现在只能满足AjaxControl及AjaxScripts开发模式,至于MapControl开发模式,后台代码直接修改即可。不用这么破费周章了。iClient for 6R for  silverlight等富客户端的话服务端每个地图都只是相当于客户端的一个图层,而且图层都有设置请求的图片格式,所以天然满足此需求,不用解释了。


热门下载

更多