天津政府应急系统之GIS一张图(arcgis api for flex)讲解(八)资源搜索模块
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)讲解(八)资源搜索模块的更多相关文章
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(一)GIS一张图的系统开发环境以及flexviewer框架
系统的GIS功能实现是基于arcgis api for flex,首先附上系统的主界面图,接下来的是对主界面的模块功能详细讲解: 一.GIS环境软件安装 (1)arcgis desktop的安装,要是 ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块
config.xml文件的配置如下: <widget label="态势标绘" icon="assets/images/impact_area_over.png&q ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(二)鹰眼模块
讲解GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)解说(二)鹰眼模块
解说GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块
config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十一)路径导航模块
config.xml文件的配置如下: <widget label="路径导航" icon="assets/images/lujingdaohang.png" ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块
config.xml文件的配置如下: <widget label="地图搜索" icon="assets/images/emergency_resource_ove ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(四)地图导航控件模块
config.xml文件的配置如下: <widget left="10" top="50" config="widgets/Navigation ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块
config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...
随机推荐
- LoTVideo:只需两步,让HTML5原生态的Video茁壮成长
开源地址:https://github.com/dunitian/LoTHTML5/tree/master/LoTVideo 第一步引入lotvideo.js(先确认在这个前面引入了jq包) 第二步: ...
- Sql Server系列:运算符和表达式
运算符的一些符号,他们能够用于执行算术运算.字符串连接.赋值以及在字段.常量和变量之间进行比较.在SQL Server 2012中,运算符主要由以下6大类:算术运算符.赋值运算符.比较运算符.逻辑运算 ...
- 【WP 8.1开发】如何动态生成Gif动画
相信如何为gif文件编码,很多朋友都会,而难点在于怎么让GIF文件中的帧动起来,也就是创建gif动画. Gif文件编码方法 先简单介绍一下编码的方法. 1.调用BitmapEncoder.Create ...
- 学用MVC4做网站六后台管理:6.1.1管理员登录、6.1.2退出
1.管理员登录 在6.1中已添加控制器[AdministratorController] 在控制器中添加[Login()]action,用来显示登录页面 /// <summary> /// ...
- 深入理解DOM事件机制系列第三篇——事件对象
× 目录 [1]获取 [2]事件类型 [3]事件目标[4]事件代理[5]事件冒泡[6]事件流[7]默认行为 前面的话 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事 ...
- IOS入门之Swift语言(一)
经过不断的努力,小哥也买了台苹果设备,终于可以开始我的IOS之旅了,说来确实令人苦恼,为了学习IOS我这着贫农阶级,省了几个月的零花钱,外加向亲朋好友求救,最终痛下心扉,卖了台MAC pro128G版 ...
- 如何用Node编写命令行工具
0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...
- iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
在前面的博客中已经介绍了如何连接SQLite数据库,并且简单的查询和遍历结果集.在前面用到了sqlite3_stmt *stmt,也就是预编译后的SQL语句.在本篇博客中会了解一下sqlite3_st ...
- Hammer.js分析(一)——基础结构
从github上面将源码下载下来,会发现有个src文件夹.当前版本是2.0.6. 总的结构如下: 一.常量 这里将常量全部列在一起是可以在对比源码的时候,更方便的查看相应内容. var VENDOR_ ...
- PHP面试题目搜集
搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记. 曾经看过数据结构.设计模式.HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘 ...