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. MVC:The name 'Scripts' does not exist in the current context

    汇总:http://www.cnblogs.com/dunitian/p/4523006.html#efmvc 解决:在View下面的Web.Config的namespaces添加 <add n ...

  2. MVC5 网站开发实践 2.2、管理员身份验证

    上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用AuthorizeAttribute属性的方式.之前还要解决几个问题,然后才重写验证类,最后稍微改一下界面. 目录 MVC5 网站开发实践  ...

  3. Hibernate注解

    前言: 最近正在学习Hibernate通过注解(annotation)来管理映射关系,以前都是通过XML映射文件.下面拿个小例子说一下. 数据库物理模型: 数据库的描述: 一篇博客随笔可以分到不同的类 ...

  4. DOM-Node类型

    DOM(文档队形模型)是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次化的节点树,允许开发人员添加,移除和修改页面的一部分.DOM可以讲任何HTML和XML文档描绘成一 ...

  5. 窥探Swift之函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...

  6. OWIN 中 K Commands(OwinHost.exe)与 Microsoft.AspNet.Hosting 的角色问题

    问题详情:K Commands(OwinHost.exe)是不是 OWIN 中的 Host 角色?如果是,那 Microsoft.AspNet.Hosting 对应的是 OWIN 中的哪个角色? OW ...

  7. swift 的高阶函数的使用代码

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  8. 对来自于Azure的远程连接文件(.rdp)的另一种更便捷的自定义方法

    在上一篇日志中(很抱歉那张比较黑的截图)介绍了如何获得Azure中的Windows虚拟机的远程连接文件,以及一种基于文本编辑方式进行自定义的方法. 实际上对于在Windows下的用户来说,我们可以使用 ...

  9. 相克军_Oracle体系_随堂笔记012-undo

    undo表空间中undo段是自动生成的,oracle自动使用undo表空间的undo段. 作为高级DBA,需要了解Oracle是如何使用undo段的.这样出了性能问题才能够解决.   1.Undo表空 ...

  10. 符合我公司GIS开源解决方案的探讨

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一周,我对GIS开源解决方案中涉及到的开源软件以及相关技术 ...