config.xml文件的配置如下:

 <widget label="资源搜索"  icon="assets/images/public_impact_over.png" config="widgets/AdvancedBusiness/AdvancedBusinessWidget.xml" url="widgets/AdvancedBusiness/AdvancedBusinessWidget.swf" />

源代码目录如下:

界面效果:

大概的思路如下:跟地图搜索的思路是一样的,不过是这里唯一变化的是可以勾选多个图层来进行query查询,其实只是进行多次循环查询不同的图层而已,核心是一样的;AdvancedBusinessWidget.xml是资源搜索模块的配置文件,AdvancedBusinessWidget.mxml是widget;AdvancedBusinessWidget.xml主要是配置资源图层搜索的服务url,用来进行query查询用,这个模块的核心其实就是调用arcgis api的query类以及queryTask

AdvancedBusinessWidget.xml:

 <?xml version="1.0" ?>
<configuration label="Louisville Parcels and Police">
<layers>
<layer>
<name>危险隐患</name>
<url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/0
</url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>true</checked>
</layer>
<layer>
<name>应急专家</name>
<url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/1
</url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>false</checked>
</layer>
<layer>
<name>物资装备</name>
<url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/2
</url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>false</checked>
</layer>
<layer>
<name>救援队伍</name>
<url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/3
</url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>false</checked>
</layer>
<layer>
<name>庇护场所</name>
<url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/4
</url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>false</checked>
</layer>
<layer>
<name>保护对象</name>
<url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/5
</url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>false</checked>
</layer>
<!-- <layer> -->
<!-- <name>应急仓库</name> -->
<!-- <url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/6 -->
<!-- </url> -->
<!-- <expression>NAME like '%[value]%'</expression> -->
<!-- <textsearchlabel>Search by NAME</textsearchlabel> -->
<!-- <titlefield>NAME</titlefield> -->
<!-- <linkfield></linkfield> -->
<!-- <fields all="true"> -->
<!-- <field name="NAME" /> -->
<!-- </fields> -->
<!-- <checked>false</checked> -->
<!-- </layer> -->
<layer>
<name>企业</name>
<url>http://localhost:6080/ArcGIS/rest/services/nsBusiness/MapServer/7
</url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>false</checked>
</layer>
<layer>
<name>全选</name>
<url></url>
<expression>NAME like '%[value]%'</expression>
<textsearchlabel>按照名称搜索</textsearchlabel>
<titlefield>NAME</titlefield>
<linkfield></linkfield>
<fields all="true">
<field name="NAME" />
</fields>
<checked>false</checked>
</layer>
</layers>
<zoomscale>10000</zoomscale>
</configuration> <!-- See Search widget tag reference at http://links.esri.com/searchwidget -->

AdvancedBusinessWidgett.mxml:具体实现部分,我截图部分代码好了,具体的详见flexviewer。主要是有两种方式查询,一种是框选,另一种是关键字查询;框选查询是利用在地图框选(线 面 拉框等等)获取框选的范围Geometry,然后利用当前的Geometry作为queryTask的参数,用于query查询;输入关键字查询是类似的,不过是query的参数把geometry替换为text。

框选模式参照地图搜索部分

关键字查询:

在勾选图层的基础上循环遍历查询

             private function textFilter():void{
for each(var searchLayer:Object in configSearchGraphicalArr){//configSearchGraphicalArr是勾选的图层数组 if(searchLayer.checked && searchLayer.label!="全选"){ queryFeaturesText(searchLayer); } } }

queryFeaturesText是基于关键字搜索函数:

            private function queryFeaturesText(searchLayer:Object):void
{ hideInfoWindow(); queryLayer = searchLayer.layer; if (queryLayer && !queryLayer.loaded)
{
queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler);
queryLayer.addEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); function queryLayer_loadHandler(event:LayerEvent):void
{
queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler);
queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); queryFeaturesText(queryLayer);
} function queryLayer_loadErrorHandler(event:LayerEvent):void
{
queryLayer.removeEventListener(LayerEvent.LOAD, queryLayer_loadHandler);
queryLayer.removeEventListener(LayerEvent.LOAD_ERROR, queryLayer_loadErrorHandler); showLoadErrorMessage(event);
} return;
} queryExpr = searchLayer.expr;
queryFields = searchLayer.fields;
queryTitleField = searchLayer.titlefield;
queryLinkField = searchLayer.linkfield;
queryLinkAlias = searchLayer.linkalias; if (queryLayer && txtSearch.text)
{
var query:Query = new Query();
var expr:String = queryExpr.replace(/\[value\]/g, txtSearch.text); query.where = expr;
query.outSpatialReference = map.spatialReference; const supportsServerSideSorting:Boolean = queryLayer.layerDetails
&& queryLayer.layerDetails.version >= 10.1
&& queryLayer.layerDetails.supportsAdvancedQueries;
const orderByFields:Array = searchLayer.orderbyfields;
if (supportsServerSideSorting && orderByFields)
{
query.orderByFields = orderByFields;
} var queryOptions:Object =
{
supportsServerSideSorting: supportsServerSideSorting,
orderByFields: orderByFields,
queryFields: queryFields
}; queryLayer.queryFeatures(
query, new AsyncResponder(queryFeatures_resultHandler,
queryFeatures_faultHandler,
queryOptions)); //showMessage(loadingLabel, true);
//showStateResults(); function queryFeatures_resultHandler(featureSet:FeatureSet, queryOptions:Object):void
{
/*
var layer:FeatureLayer=FeatureLayer(map.getLayer(searchLayer.label));
layer.featureCollection=new FeatureCollection(featureSet,layer.layerDetails);
layer.refresh();*/
var obj:Object=new Object();
obj.featureSet=featureSet;
obj.layerName=searchLayer.label;
obj.featureLayer=FeatureLayer(map.getLayer(searchLayer.label));
AppEvent.dispatch(BusinessEventType.TEXT_FILTER_EVENT,obj);
} function queryFeatures_faultHandler(info:Object, queryOptions:Object):void
{
showMessage(info.toString(), false);
} }
} //AppEvent.dispatch(BusinessEventType.TEXT_FILTER_EVENT,obj);这里会触发搜索结果表格事件,把搜索的结果更新到表格来展示

textFilter_Listener是展示搜索结果函数:

            private function textFilter_Listener(event:AppEvent):void{
//Alert.show("The event is triggered!");
var featureSet:FeatureSet=event.data.featureSet as FeatureSet;
var layerName:String=event.data.layerName;//no use right now
var featureLayer:FeatureLayer=event.data.featureLayer as FeatureLayer;
var businessTable:CustomAttributeTable=featureLayerToAttributeTable[featureLayer];
businessTable.doSpatialFilter(featureSet); }
        public function doSpatialFilter(featureSet:FeatureSet):void{
this._map.removeEventListener(ExtentEvent.EXTENT_CHANGE,extentChanged_Refresh);
this._featureSet=featureSet;
if(featureSet==null){
if(this.dataGrid&&this.skin){
this.dataGrid.dataProvider=null;
this.skin.currentState="noFeaturesInCurrentExtent";
}
}else{
if(featureSet.attributes.length>0){
if(this.dataGrid&&this.skin){
this.dataGrid.columns=this.createColumnsFromPopInfo();
this.dataGrid.dataProvider=new ArrayCollection(featureSet.attributes);
this.skin.currentState="normal";
}
}else{
if(this.dataGrid&&this.skin){
this.dataGrid.dataProvider=null;
this.skin.currentState="noFeaturesInCurrentExtent";
}
}
}
}

备注:

GIS技术交流QQ群:432512093

天津政府应急系统之GIS一张图(arcgis api for flex)讲解(八)资源搜索模块的更多相关文章

  1. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(一)GIS一张图的系统开发环境以及flexviewer框架

    系统的GIS功能实现是基于arcgis api for flex,首先附上系统的主界面图,接下来的是对主界面的模块功能详细讲解: 一.GIS环境软件安装 (1)arcgis desktop的安装,要是 ...

  2. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块

    config.xml文件的配置如下: <widget label="态势标绘" icon="assets/images/impact_area_over.png&q ...

  3. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(二)鹰眼模块

    讲解GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...

  4. 天津政府应急系统之GIS一张图(arcgis api for flex)解说(二)鹰眼模块

    解说GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...

  5. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块

    config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...

  6. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十一)路径导航模块

    config.xml文件的配置如下: <widget label="路径导航" icon="assets/images/lujingdaohang.png" ...

  7. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块

    config.xml文件的配置如下: <widget label="地图搜索" icon="assets/images/emergency_resource_ove ...

  8. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(四)地图导航控件模块

    config.xml文件的配置如下: <widget left="10" top="50" config="widgets/Navigation ...

  9. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块

    config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...

随机推荐

  1. 即时搜索(input框)

    做搜索功能的时候,经常遇到输入框检查的需求,最常见的是即时搜索,今天好好小结一下. 即时搜索的方案: (1)change事件    触发事件必须满足两个条件: a)当前对象属性改变,并且是由键盘或鼠标 ...

  2. jQuery源码分析系列(40): 动画设计

    前言 jQuery动画是通过animate这个API设置执行的,其内部也是按照每一个animate的划分封装了各自动画组的行为, 包括数据过滤.缓动公式.一些动画默认参数的设置.元素状态的调整.事件的 ...

  3. Unity导出的Xcode工程目录

    Classes文件夹: Unity Runtime和ObjectC代码 main.mm和AppController.mm:应用程序入口点 iPhone_Profiler.h:定义了启用内部分析器(In ...

  4. POJ2513-Colored Sticks

    /*思路:类似图论中“一笔画”问题,两根木棒的相连接的端点是一样的颜色,(a,b)--(b,c)--(c, d)....方法:trie树+并查集, 利用trie树建立字符串和某一个节点的映射,并将这些 ...

  5. node-mysql 在4.2.0的时候遇到的错误

    实际上这个问题折腾了几天.前一阵因为升级到了最新的4.2.0,发现mysql的应用就出错了,错误消息也比较奇怪 Handshake Inactivity Timeout - PROTOCOL_SEQU ...

  6. Lua 学习笔记(十)数据结构

    在Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础.其他语言提供的数据结构,如数组.记录.线性表.队列.集合等,在Lua中都可以通过table来表示.而且使用Lua实现这些数据 ...

  7. geotrellis使用(三)geotrellis数据处理过程分析

    之前简单介绍了geotrellis的工作过程以及一个简单的demo,最近在此demo的基础上实现了SRTM DEM数据的实时分析以及高程实时处理,下面我就以我实现的上述功能为例,简单介绍一下geotr ...

  8. Linux快速配置集群ssh互信

    之前在<记录一则Linux SSH的互信配置过程>.<Vertica 7.1安装最佳实践(RHEL6.4)>中,都分别提到了配置ssh互信的方法,本文在此基础上进一步整理配置s ...

  9. hexo在git上搭建个人博客

    公司实习第一天接到的任务是:搭建一个基于Nodejs的开源项目的开发环境,接到任务时以为不是很困难,后来才知道该项目已于去年被废弃,搭配环境的时候遇到了不少问题,折腾了两天还是没有最终完成... 不过 ...

  10. 百度编辑器ueditor插入表格没有边框,没有颜色的解决方法 2015-01-06 09:24 98人阅读 评论(0) 收藏

    百度富文本编辑器..很强大.. - - ,不过有些BUG..真的很无解.. 最近用这个,发现上传的表格全部没有表框.. 解决办法如下: 转载的.. 百度编辑器ueditor插入一个表格后,在编辑过程中 ...