本帖最后由 sinna 于 2016-10-20 09:51 编辑
config.xml文件的配置如下:
<widget label="地图搜索" icon="assets/images/emergency_resource_over.png"config="widgets/Search/SearchWidget.xml" url="widgets/Search/SearchWidget.swf" />源代码目录如下: 地图搜索模块的源代码原理解析,详细的代码在下载的开源flexviewer自带的: 大概的思路如下:SearchWidget.xml是地图搜索模块的配置文件,SearchWidget.mxml是widget;SearchWidget.xml主要是配置地图图层搜索的服务url,用来进行query查询用,这个模块的核心其实就是调用arcgis api的query类以及queryTask SearchWidget.xml: - <?xml version="1.0" ?>
- <configuration label="Louisville Parcels and Police">
- <layers>
- <layer>
- <name>兴趣点</name>
- <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/0</url>
- <expression>Name_CHN like '%[value]%'</expression>
- <textsearchlabel>按照名称搜索</textsearchlabel>
- <titlefield>Name_CHN</titlefield>
- <linkfield></linkfield>
- <fields all="false">
- <field name="Name_CHN"/>
- </fields>
- </layer>
- <layer>
- <name>道路</name>
- <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/1</url>
- <expression>Name_CHN like '%[value]%'</expression>
- <textsearchlabel>按照名称搜索</textsearchlabel>
- <titlefield>Name_CHN</titlefield>
- <linkfield></linkfield>
- <fields all="false">
- <field name="Name_CHN"/>
- </fields>
- </layer>
- <layer>
- <name>区镇街</name>
- <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/5</url>
- <expression>Name_CHN like '%[value]%'</expression>
- <textsearchlabel>按照名称搜索</textsearchlabel>
- <titlefield>Name_CHN</titlefield>
- <linkfield></linkfield>
- <fields all="false">
- <field name="Name_CHN"/>
- </fields>
- </layer>
- <layer>
- <name>社区街道</name>
- <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/3</url>
- <expression>Name_CHN like '%[value]%'</expression>
- <textsearchlabel>按照名称搜索</textsearchlabel>
- <titlefield>Name_CHN</titlefield>
- <linkfield></linkfield>
- <fields all="false">
- <field name="Name_CHN"/>
- </fields>
- </layer>
- <layer>
- <name>村居委</name>
- <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/4</url>
- <expression>Name_CHN like '%[value]%'</expression>
- <textsearchlabel>按照名称搜索</textsearchlabel>
- <titlefield>Name_CHN</titlefield>
- <linkfield></linkfield>
- <fields all="false">
- <field name="Name_CHN"/>
- </fields>
- </layer>
- <layer>
- <name>水域河流名称</name>
- <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/2</url>
- <expression>Name_CHN like '%[value]%'</expression>
- <textsearchlabel>按照名称搜索</textsearchlabel>
- <titlefield>Name_CHN</titlefield>
- <linkfield></linkfield>
- <fields all="false">
- <field name="Name_CHN"/>
- </fields>
- </layer>
- <layer>
- <name>所有</name>
- <url></url>
- <expression>Name_CHN like '%[value]%'</expression>
- <textsearchlabel>按照名称搜索</textsearchlabel>
- <titlefield>Name_CHN</titlefield>
- <linkfield></linkfield>
- <fields all="false">
- <field name="Name_CHN" />
- </fields>
- </layer>
- </layers>
- <zoomscale>10000</zoomscale>
- </configuration>
- <!--
- See Search widget tag reference at
- http://links.esri.com/searchwidget
- -->
复制代码
SearchWidget.mxml:具体实现部分,我截图部分代码好了,具体的详见flexviewer,首先是利用在地图框选(线 面 拉框等等)获取框选的范围Geometry,然后利用当前的Geometry作为queryTask的参数,用于query查询 - private function activateDrawTool(event:MouseEvent):void
- {
- addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets
- // apply glow
- selectedDrawingIcon = FocusableImage(event.currentTarget);
- clearSelectionFilter();
- selectedDrawingIcon.filters = [ glowFilter ];
- finishDrawing = false;
- var status:String;
- var value:String = selectedDrawingIcon.name;
- switch (value)
- {
- case DrawTool.MAPPOINT:
- {
- status = pointLabel;
- drawSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 15, 0x3FAFDC, 1);
- break;
- }
- case DrawTool.POLYLINE:
- {
- status = lineLabel;
- drawSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1);
- break;
- }
- case DrawTool.EXTENT:
- {
- status = rectangleLabel;
- drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1));
- break;
- }
- case DrawTool.POLYGON:
- {
- status = polygonLabel;
- drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1));
- break;
- }
- }
- setMapAction(value, status, drawSymbol, searchDrawEnd);
- }
复制代码- private function searchDrawEnd(event:DrawEvent):void
- {
- // deactivate the draw tool
- finishDrawing = true;
- selectedDrawingIcon = null;
- clearSelectionFilter();
- event.target.deactivate();
- var geom:Geometry = event.graphic.geometry;
- if (geom is Polygon && GeometryUtil.polygonSelfIntersecting(geom as Polygon))
- {
- geometryService.simplify([ geom ]);
- }
- else
- {
- //to improve search results
- if (geom.type == Geometry.MAPPOINT)
- {
- geom = createExtentAroundMapPoint(geom as MapPoint, pointSearchTolerance);
- }
- queryFeaturesGraphical(geom);
- }
- }
复制代码- queryGeom = geom;
- queryFields = searchLayer.fields;
- queryTitleField = searchLayer.titlefield;
- queryLinkField = searchLayer.linkfield;
- queryLinkAlias = searchLayer.linkalias;
-
- if (queryLayer)
- {
- var query:Query = new Query();
- query.geometry = queryGeom;
- query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS;
- 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();
- }
复制代码- private function queryFeatures_resultHandler(featureSet:FeatureSet, queryOptions:Object):void
- {
- try
- {
- if (!queryOptions.supportsServerSideSorting && queryOptions.orderByFields)
- {
- FeatureSetUtil.sortFeaturesByFieldName(featureSet, queryOptions.orderByFields);
- }
- if(searchResultAC==null)searchResultAC=new ArrayCollection();
- total++;
- searchResultAC.addAll(createSearchResults(featureSet, queryOptions.queryFields));
- addSharedData(widgetTitle, searchResultAC);
- if (featureSet.features.length < 1)
- {
- showMessage(noResultLabel, false);
- }
- else
- {
- showMessage(selectionLabel + " " + searchResultAC.length, false);
- }
- }
- catch (error:Error)
- {
- showMessage(error.message, false);
- }
-
- }
复制代码
GIS作品:百度搜索:GIS之家(https://shop116521643.taobao.com/shop/view_shop.htm); QQ兴趣部落GIS技术交流:gis之家(http://buluo.qq.com/p/barindex.html?bid=327395); GIS技术交流群:432512093
|