最近碰到這樣的問題地圖切換而要保持地圖中心點及比例尺不變,而且不同地圖的圖片格式也不同,解決過程頗費周章,寫出來供大家分享吧。
其實問題的起源挺簡單的,由於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等富用戶端的話服務端每個地圖都只是相當於用戶端的一個圖層,而且圖層都有佈建要求的圖片格式,所以天然滿足此需求,不用解釋了。