標籤:
我們來想下業務系統用的做多選項是什麼,他們要的很多是地塊定位,業務系統要知道地塊在哪,地塊的樣式,符號化,圖層的展示,還有地塊的屬性顯示,而業務開發人員並不關心你圖層sde是啥,rest發布地址,所以你這些就沒必要告訴他們,首先圖層的管理是很重要的,每個業務系統(指定的config)有可能載入圖層不一樣,我們要把他們管理起來,至於怎麼管理看大家愛好,我是寫了一個工具去管理,把切面的圖和動態圖分開,許可權順序也放在這裡,管理url發布。
圖層工具做好了後,業務開發人員怎麼去定位這個地塊呢,arcgis for flex或者arcgis for javascript 都有querytask這個東西,業務開發人員不可能去用這個來調用,首先說明,圖層sde名字是不能告訴他們的,因為往往發布服務時候會有definitioan操作,會有一對多的情況,rest服務地址也不能,有可能以後系統升級rest服務地址改了怎麼辦。所以就是flex 上顯示圖層名字為主,這裡指的是我們寫的flex widget的圖層模組,掛載自己的業務圖層。然後業務系統和圖層有關聯索引值對傳給我們,我們在自己做好的圖層工具找到url querytask去尋找地塊。
我們定義一個Map類,專門對接flex那邊註冊的函數。
1 var Map = function () { 2 3 this.emap = new Object(); 4 5 } 6 7 Map.prototype = { 8 constructor: Map, 9 /**10 * 地圖恢複到全圖11 */12 13 14 15 /** 有回調這個需要調服務16 * 根據圖層名和主鍵 和值定位到一個指定地塊 內建(高亮)17 * @param layerName 圖層名 暫訂為中文名18 * @param key 圖層主鍵19 * @param value 圖層主索引值20 * @param callback 回呼函數預設可以不傳21 */22 zoomByKeyValue: function (layerName, key, value, callback) {23 this.emap.zoomByKeyValue(layerName, key, value,callback);24 }25 26 27 }
回調服務告訴是否定位成功,在MapControl 加入Map類
1 var MapControl = function () { 2 /** 3 * 地圖初始化parameter 具體參考Parameter類 4 * @type {Parameter} 5 */ 6 this.parameter = new Parameter(); 7 /** 8 * 添加事件主體 具體參考EventBus類 9 * @type {EventBus}10 */11 this.eventBus = new EventBus();12 /**13 * Map提供的地圖函數 參考Map類 調用Map類的函數必須等待地圖初始化完畢,建議監聽Initialized事件14 * @type {Map}15 */16 this.map = new Map();17 /**18 * 地圖初始化19 */20 this.inlitialize = function () {21 22 23 swfobjhash[this.parameter.div] = this;24 var swfVersionStr = "11.4.0";25 var xiSwfUrlStr = "";26 var flashvars = {};27 28 var params = {};29 params.wmode = "opaque";30 params.quality = "high";31 params.bgcolor = "#ffffff";32 params.allowscriptaccess = "always";33 params.allowfullscreen = "true";34 var attributes = {};35 attributes.id = this.parameter.div;36 attributes.name = this.parameter.div;37 attributes.align = "middle";38 swfobject.embedSWF(39 "http://localhost/mymap/index.swf" +40 this.parameter.getswfid() , this.parameter.div,41 this.parameter.width, this.parameter.height,42 swfVersionStr, xiSwfUrlStr,43 flashvars, params, attributes);44 swfobject.createCSS("#" + this.parameter.div, "display:block;text-align:left;");45 }46 }47 48 49 50 var swfobjhash = new Object();51 52 53 //flex圖形組件載入完畢回調 swfid是區分嵌入swf的標識碼54 function emapComplete(swfid) {55 swfobjhash[swfid].map.emap = document.getElementById(swfid);56 swfobjhash[swfid].eventBus.dispatchEvent({type: "Initialized"});57 }
在html調用
1 <script type="text/javascript"> 2 3 var a = new MapControl(); 4 a.parameter.config = "config-checkview.xml"; 5 a.parameter.div= "flashContent"; 6 a.parameter.width = "800"; 7 a.parameter.height = "800"; 8 a.eventBus.addEventListener(MapControlEvent.Initialized,initHandle); 9 a.initialise();10 11 function initHandle()12 {13 14 a.map.zoomByKeyValue("地下管線","P_NO","55555")15 }16 17 </script>
業務gis 怎麼讓別的開發人員不需要懂gis就可以搞開發? (四)