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: 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!="全选"){ 5queryFeaturesText(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作品:百度搜索:GIS之家(https://shop116521643.taobao.com/shop/view_shop.htm); QQ兴趣部落GIS技术交流:gis之家(http://buluo.qq.com/p/barindex.html?bid=327395); GIS技术交流群:432512093
|