您的位置:首页 > 其它

业务gis 怎么让别的开发人员不需要懂gis就可以搞开发? (四)

2015-12-09 16:15 253 查看
我们来想下业务系统用的做多选项是什么,他们要的很多是地块定位,业务系统要知道地块在哪,地块的样式,符号化,图层的展示,还有地块的属性显示,而业务开发人员并不关心你图层sde是啥,rest发布地址,所以你这些就没必要告诉他们,首先图层的管理是很重要的,每个业务系统(指定的config)有可能加载图层不一样,我们要把他们管理起来,至于怎么管理看大家爱好,我是写了一个工具去管理,把切面的图和动态图分开,权限顺序也放在这里,管理url发布。



图层工具做好了后,业务开发人员怎么去定位这个地块呢,arcgis for flex或者arcgis for javascript 都有querytask这个东西,业务开发人员不可能去用这个来调用,首先说明,图层sde名字是不能告诉他们的,因为往往发布服务时候会有definitioan操作,会有一对多的情况,rest服务地址也不能,有可能以后系统升级rest服务地址改了怎么办。所以就是flex 上显示图层名字为主,这里指的是我们写的flex widget的图层模块,挂载自己的业务图层。然后业务系统和图层有关联键值对传给我们,我们在自己做好的图层工具找到url querytask去查找地块。

我们定义一个Map类,专门对接flex那边注册的函数。

var Map = function () {

this.emap = new Object();

}

Map.prototype = {
constructor: Map,
/**
* 地图恢复到全图
*/

/** 有回调这个需要调服务
* 根据图层名和主键 和值定位到一个指定地块 自带(高亮)
* @param layerName 图层名 暂定为中文名
* @param key  图层主键
* @param value  图层主键值
* @param callback  回调函数默认可以不传
*/
zoomByKeyValue: function (layerName, key, value, callback) {
this.emap.zoomByKeyValue(layerName, key, value,callback);
}

}


回调服务告诉是否定位成功,在MapControl 加入Map类

var MapControl = function () {
/**
* 地图初始化parameter  具体参考Parameter类
* @type {Parameter}
*/
this.parameter = new Parameter();
/**
* 添加事件主体 具体参考EventBus类
* @type {EventBus}
*/
this.eventBus = new EventBus();
/**
* Map提供的地图函数 参考Map类 调用Map类的函数必须等待地图初始化完毕,建议监听Initialized事件
* @type {Map}
*/
this.map = new Map();
/**
* 地图初始化
*/
this.inlitialize = function () {

swfobjhash[this.parameter.div] = this;
var swfVersionStr = "11.4.0";
var xiSwfUrlStr = "";
var flashvars = {};

var params = {};
params.wmode = "opaque";
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "always";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = this.parameter.div;
attributes.name = this.parameter.div;
attributes.align = "middle";
swfobject.embedSWF(
"http://localhost/mymap/index.swf"   +
this.parameter.getswfid() , this.parameter.div,
this.parameter.width, this.parameter.height,
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
swfobject.createCSS("#" + this.parameter.div, "display:block;text-align:left;");
}
}

var swfobjhash = new Object();

//flex图形组件加载完毕回调 swfid是区分嵌入swf的标识码
function emapComplete(swfid) {
swfobjhash[swfid].map.emap = document.getElementById(swfid);
swfobjhash[swfid].eventBus.dispatchEvent({type: "Initialized"});
}


在html调用

<script type="text/javascript">

var a = new MapControl();
a.parameter.config = "config-checkview.xml";
a.parameter.div= "flashContent";
a.parameter.width = "800";
a.parameter.height = "800";
a.eventBus.addEventListener(MapControlEvent.Initialized,initHandle);
a.initialise();

function initHandle()
{

a.map.zoomByKeyValue("地下管线","P_NO","55555")
}

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: