天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块
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技术交流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)讲解(八)资源搜索模块
config.xml文件的配置如下: <widget label="资源搜索" icon="assets/images/public_impact_over.png ...
- 天津政府应急系统之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 left="10" top="50" config="widgets/Navigation ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块
config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...
随机推荐
- 【hbase0.96】基于hadoop搭建hbase的心得
hbase是基于hadoop的hdfs框架做的分布式表格存储系统,所谓表格系统就是在k/v系统的基础上,对value部分支持column family和column,并支持多版本读写. hbase的工 ...
- matlab 循环读入多个mat文件组合成一个mat文件
今天做实验,需要到这个功能,在朋友的告知下,写了代码,在此留个标记 clc clear load('F:\效果对比\colorhist\1.mat'); a=ans; a=a'; : filename ...
- MVC5 网站开发实践 2、后台管理
目录 MVC5 网站开发实践 概述 MVC5 网站开发实践 1.建立项目 从这一部分开始做后台管理,首先是基本框架的 一.Data项目 1.项目添加EntityFramework引用 在Data项 ...
- MVC5 网站开发实践 1、建立项目
目录 MVC5 网站开发实践 概述 一.建立项目 1.建立团队项目 在办公室和家里使用不同的电脑,为了方便代码的共享将项目建立为团队项目. 如图打开vs2013→新建→团队项目(图1),会自动 ...
- Java设计模式之模板模式(Template )
前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板 ...
- react+redux教程(三)reduce()、filter()、map()、some()、every()、...展开属性
reduce().filter().map().some().every()....展开属性 这些概念属于es5.es6中的语法,跟react+redux并没有什么联系,我们直接在https:// ...
- Lua 学习笔记(七)编译、执行外部代码块
Lua称为解释型语言的原因:Lua允许在运行源代码之前,先将源代码预编译为一种中间形式.区别解释型语言的主要特征是在于编译器是否是语言运行时库的一部分,即有能力执行动态生成的代码.因为Lua中有dof ...
- Generator库co4.6使用及源码分析
原文链接 http://www.cnblogs.com/ytu2010dt/p/6043947.html co4.x已经抛弃了原来thunk转而结合promise实现. 一:promise proms ...
- Android之圆形头像裁切
PS:今天项目测试组发现,百度地图定位的数据坐标位置是正确的,但是显示的数据是错误的.最后查来查去发现,那个商厦在百度地图上根本就没有那条数据,这让我如何显示,当初就推崇使用高德地图定位,上面的数据量 ...
- Visual Studio 2013中因SignalR的Browser Link引起的Javascript错误一则
众所周知Visual Studio 2013中有一个由SignalR机制实现的Browser Link功能,意思是开发人员可以同时使用多个浏览器进行调试,当按下IDE中的Browser Link按钮后 ...