天津政府应急系统之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 ...
随机推荐
- Sublime 快捷键
语法快捷键: 后代:> 缩写:nav>ul>li <nav> <ul> <li></li> </ul> </nav& ...
- Index的填充属性:FillFactor 和 PAD_INDEX
在Create Index时,必须考虑属性FillFactor 和 PAD_INDEX的设置,这两个属性只在create index 或 rebuild index时起作用,表示Index page( ...
- OpenCASCADE JT Assistant
OpenCASCADE JT Assistant eryar@163.com Abstract. Siemens’ JT data format accepted as the world’s fir ...
- Notes:indexedDB使用
indexedDB是浏览器端保存结构化数据的一种数据库,类似于mysql,oracle等数据库,但indexedDB使用对象存储数据,而不是用表. indexedDB是全局的宿主对象,使用window ...
- 【重磅开源】Hawk-数据抓取工具:简明教程
Hawk-数据抓取工具:简明教程 标签(空格分隔): Hawk Hawk: Advanced Crawler& ETL tool written in C#/WPF 1.软件介绍 HAWK是一 ...
- Rust初步(六):在C#中使用Rust组件
上一篇文章,我们通过实例比较了一下C#和Rust的性能表现,应该说在Release模式下面,Rust进行计算密集型的运算还是有些比较明显的优势的.那么,我们有没有可能,在C#中做一些快速应用开发,而一 ...
- spring源码分析之定时任务Scheduled注解
1. @Scheduled 可以将一个方法标识为可定时执行的.但必须指明cron(),fixedDelay(),或者fixedRate()属性. 注解的方法必须是无输入参数并返回空类型void的. @ ...
- 原创:微信小程序源码解说:石头剪刀布(附源码下载)
我的博客:来源链接 昨天看有个石头剪刀布的练习,就拿出来做了一下,布局的代码浪费了很多时间,果然CSS这块的还不是很熟练,下面直接上图上代码了. JS: var numAi = 0 var timer ...
- 使用dynamic linq 解决自定义查询的若干弊端
在项目中想必大家肯定是使用各种ORM, 如:NH.EF.fluent Data. 然而我在使用ORM的这几年中,随着数据库的结构越来越复杂,自定义查询的越来越多,但是一直没有解决一个问题就是自定义查询 ...
- 基本概念----Beginning Visual C#
更多相关文章,见本人的个人主页:zhongxiewei.com 变量 注释方式:// 注释在这里和/* 注释在这里 */ 整形变量的类型: Type Alias for Allowed Values ...