天津政府应急系统之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 ...
随机推荐
- 前端学PHP之面向对象系列第四篇——关键字
× 目录 [1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent 前面的话 php实现面向对 ...
- 深入理解DOM事件类型系列第三篇——变动事件
× 目录 [1]删除节点 [2]插入节点 [3]特性节点[4]文本节点 前面的话 变动(mutation)事件能在DOM中的某一部分发生变化时给出提示,这类事件非常有用,但都只能使用DOM2级事件处理 ...
- .Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
Android Studio DDMS与Eclipse DDMS大同小异,下面了解DDMS的使用 DDMS(Dalvik Debug Monitor Service )Dalvik调试监控服务 DDM ...
- 完全抽离WebAPi之特殊需求返回HTML、Css、JS、Image
前言 今天我们来实现一个特殊的需求,这个需求说来也不过分,不过有点违背WebAPi的真实用途,WebAPi不过是作为传输数据而用,若非在项目开发中断不可想到还要实现一个页面来实时显示列表并进行后续其他 ...
- JavaScript变量声明提前
上周四吃完午饭,leader发了一道JavaScript的题目给我们做,我们Team里面有做前端的,有做后台的,也有做mobile web的,所以大家对题目的理解各自都不一样,然后在QQ讨论组里面进行 ...
- 利用pixi.js制作精灵动画
CSS Sprites 技术对于广大的前端工程师来说应该是一点也不陌生.国内开发者昵称为CSS精灵,通过一定的技术手段,让精灵动起来,我称其为精灵动画,那么目前有哪些实现方式 呢?下面让我们详细的聊聊 ...
- T-Sql(四)表关联和视图(view)
今天讲下T-sql中用于查询的表关联和视图,我们平时做项目的时候会遇到一些复杂的查询操作,比如有班级表,学生表,现在要查询一个学生列表,要求把学生所属班级名称也查询出来,这时候简单的select查询就 ...
- Android 短信监听及用途分析
监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...
- 移动端IM系统的协议选型:UDP还是TCP?
1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...
- Linux中mongodb安装和导出为json
采用官方工具导出mongo数据为json格式 文档:https://docs.mongodb.com/manual/reference/program/mongoexport/ 可以远程导出,只要有h ...