资源描述
北京建委信息资源管理北京建委GIS集成方案
1、 背景
信息资源管理平台的定位是对数据中心内部的数据进行管理,并对收集的数据进行分析展示,满足各层次用户的查询分析,系统使用smartbi产品做主框架,集成arcGIS以及对产品做二次开发实现。该文档详细说明arcGIS与smartbi产品的报表如何互动。
2、 需求定义
2.1、 smartbi与GIS系统互动
1是由smartbi出的报表,
2是由GIS系统出的一个GIS地图,
比如在朝阳区慧云寺1号院产生点击事件,则2的GIS地图就相应的切换到朝阳区,反之,在2 的GIS地图里点击某个区,则在1的报表里就切换到该区的报表数据。
地图是GIS系统作的,表是smartbi的报表,在地图上某个区域点击时,报表也会显示该区域的数据。
3、 实施方案
3.1、 smartbi与GIS系统互动
可以通过定义页面宏来实现smartbi报表与GIS地图的互动,需要报表和GIS做如下修改:
1.在GIS文件中定义点击事件名称,传出参数接口等,用于GIS互动产品报表,所有点击事件的接口是统一的,只是传递的参数不同。
2. 在GIS文件中定义接收事件的接口,用于产品报表互动GIS,该接口也是统一的。
3.在产品中实现页面宏,捕获并实现GIS的点击事件,对相关报表做操作(刷新,隐藏、删除)等。
4.在产品页面宏中实现报表对GIS的互动,获取报表相关数据,调用GIS接收事件的接口,做到点击报表刷新GIS数据等。
详细代码参考:
a. GIS文件修改:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
。。。。。。
<script type="text/javascript">
dojo.require("esri.map");
dojo.require("esri.tasks.identify");
dojo.require("esri.tasks.find");
。。。。。
function highlight(graphics) {
//只考虑第一个结果
if(graphics.features.length=1){
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new dojo.Color([72, 61, 139]), 3), new dojo.Color([72, 61, 139,0.20]));
graphics.features[0].setSymbol(symbol);
map.graphics.add(graphics.features[0]);
//executeFlash(graphics.features[0]);
alert(graphics.features[0].attributes.OBJECTID);
//抛出事件,供smartbi仪表盘页面接收 window.parent.onGisClick('displayIndexofCounty','countyId='+graphics.features[0].attributes.OBJECTID);
}
}
。。。。
</script>
</head>
<body class="tundra">
<div id ="objname">区县ID</div>
<input type="text" id ="objid" value ="1" />
<input type="button" value="显示&定位" onclick="locateMap('locateMap',document.getElementById('objid').value);"/>
<div id="mapDiv" style="position:relative; width:100%; height:600px; border:1px solid #000;">
</div>
</body>
</html>
b. 宏代码:
function main(page, pageContext) {
window.onGisClick = function(a,b){
onGisClick(a,b,page,pageContext);
}
//隐藏参数面板。
page.elemParamPanel.style.display = "none";
for(indx in page.dashletList){
if(indx >0)
return;
var dashlet = page.dashletList[indx];
dashlet.setWindowState("2");
}
}
function onGisClick (a,b,page,pageContext){
if(a=="displayIndexofCounty"){
//解析参数b。
var countyid = b.substring("countyid".length+1);
for(indx in page.dashletList){
var dashlet = page.dashletList[indx];
if(dashlet.dashletType != "URL" ){
page.elemParamPanel.style.display = "";
//给每个dashlet赋值参数,并刷新报表对象。
refreshReport(dashlet,countyid ,"1997");
}else
dashlet.setWindowState("1");
}
}
}
function refreshGIS(){//刷新GIS
var targetResId = "I4028a8a6286b781e01286b7a8ded000e";
//找到对应的dashlet对象,并刷新它。
var dashlet = page.findDashletByReportId(targetResId);
if(!dashlet)
return;
var portlet = dashlet.currentPortlet;
//设置或收集参数值。"OBJECTID="+
var pObj = simpleReportContext.get("产品类别_1");
if(portlet.frame && portlet.frame.contentWindow)
portlet.frame.contentWindow.locateMap("locateMap",pObj.value);}
展开阅读全文