天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块
2015-12-20 09:36
573 查看
config.xml文件的配置如下:
源代码目录如下:
地图搜索模块的源代码原理解析,详细的代码在下载的开源flexviewer自带的:
大概的思路如下:SearchWidget.xml是地图搜索模块的配置文件,SearchWidget.mxml是widget;SearchWidget.xml主要是配置地图图层搜索的服务url,用来进行query查询用,这个模块的核心其实就是调用arcgis api的query类以及queryTask
SearchWidget.xml:
SearchWidget.mxml:具体实现部分,我截图部分代码好了,具体的详见flexviewer,首先是利用在地图框选(线 面 拉框等等)获取框选的范围Geometry,然后利用当前的Geometry作为queryTask的参数,用于query查询。
备注:
GIS技术交流QQ群:432512093
<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技术交流QQ群:432512093
相关文章推荐
- Hibernate 学习代码/笔记 (一)
- cas
- 大话设计模式-简单工厂模式
- 怎样在C++中获得完整的类型名称
- Mac配置Qt环境——Could not resolve SDK path for 'macosx10.8'
- 删除表(数据)
- insert mode and logging
- Xcode常见警告和错误
- Linux whoami 命令
- STM32 RTT LCD
- UVa1658 Admiral(拆点法+最小费用流)
- 《软件需求十步走》读书笔记二
- js实现无缝滚动特效
- 数据结构之计算器的实现(JAVA)(四)
- ST3 插件和技巧
- JAVA面向对象之对象和类
- Linux命令之rm
- php笔记----第十二章memcache管理与应用
- Scala中文件的读取、写入、控制台输入操作代码实战
- 字符串中的智慧(一)