天津政府应急系统之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 ...
随机推荐
- SQL Server ErrorLog
SQL Server 使用ErrorLog记录SQL Server启动和运行过程中的信息,具体信息参考:<SQLSERVER errorlog讲解>.通常来说,ErrorLog是指SQL ...
- Security8:删除Role 和 User
数据库的Role 和 User都是基于Specified DB的,在删除这些Principal之前,必须使用Use clause,切换到指定的DB中. sys.database_role_member ...
- A Simple OpenCASCADE Qt Demo-occQt
A Simple OpenCASCADE Qt Demo-occQt eryar@163.com Abstract. OpenCASCADE have provided the Qt samples ...
- 【转】批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
原文地址:http://blog.csdn.net/westsource/article/details/6658109 默认情况下,批量复制操作作为独立的操作执行. 批量复制操作以非事务性方式发生, ...
- MVC实用架构设计(三)——EF-Code First(5):二级缓存
前言 今天我们来谈谈EF的缓存问题. 缓存对于一个系统来说至关重要,但是是EF到版本6了仍然没有见到有支持查询结果缓存机制的迹象.EF4开始会把查询语句编译成存储过程缓存在Sql Server中,据说 ...
- 【前端性能】必须要掌握的原生JS实现JQuery
很多时候,我们经常听见有人说jquery有多快多快.在这个各种类库满天飞的时候,不得不说的是,能有原生JS快吗? 是的,明显原生JS要更快,因为诸如JQuery这样的库必须要兼容各种浏览器和低版本和许 ...
- JQuery EasyUI datagrid 复杂表头处理
下面是我项目中和网上收集的EasyUI的表头处理的,合适的拿去用吧. 例子1: $('#day_health').datagrid({ url: "sqb_b ...
- web前端基础知识总结
上个寒假总结的web前端的一些知识点给大家分享一下 1.<html>和</html> 标签限定了文档的开始和结束点. 属性: (1) dir: 文本的显示方向,默认是从左向右 ...
- 如何使用免费PDF控件从PDF文档中提取文本和图片
如何使用免费PDF控件从PDF文档中提取文本和图片 概要 现在手头的项目有一个需求是从PDF文档中提取文本和图片,我以前也使用过像iTextSharp, PDFBox 这些免费的PD ...
- 讲讲Android事件拦截机制
简介 什么是触摸事件?顾名思义,触摸事件就是捕获触摸屏幕后产生的事件.当点击一个按钮时,通常会产生两个或者三个事件--按钮按下,这是事件一,如果滑动几下,这是事件二,当手抬起,这是事件三.所以在And ...