• 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块


    config.xml文件的配置如下:

    1        <widget label="地图搜索" icon="assets/images/emergency_resource_over.png"
    2             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:

     1 <?xml version="1.0" ?>
     2 <configuration label="Louisville Parcels and Police">
     3     <layers>
     4         <layer>
     5             <name>兴趣点</name>
     6             <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/0</url>
     7             <expression>Name_CHN like '%[value]%'</expression>
     8             <textsearchlabel>按照名称搜索</textsearchlabel>
     9             <titlefield>Name_CHN</titlefield>
    10             <linkfield></linkfield>
    11             <fields all="false">
    12                 <field name="Name_CHN"/>
    13             </fields>
    14         </layer>
    15         <layer>
    16             <name>道路</name>
    17             <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/1</url>
    18             <expression>Name_CHN like '%[value]%'</expression>
    19             <textsearchlabel>按照名称搜索</textsearchlabel>
    20             <titlefield>Name_CHN</titlefield>
    21             <linkfield></linkfield>
    22             <fields all="false">
    23                 <field name="Name_CHN"/>
    24             </fields>
    25         </layer> 
    26         <layer>
    27             <name>区镇街</name>
    28             <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/5</url>
    29             <expression>Name_CHN like '%[value]%'</expression>
    30             <textsearchlabel>按照名称搜索</textsearchlabel>
    31             <titlefield>Name_CHN</titlefield>
    32             <linkfield></linkfield>
    33             <fields all="false">
    34                 <field name="Name_CHN"/>
    35             </fields>
    36         </layer>
    37         <layer>
    38             <name>社区街道</name>
    39             <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/3</url>
    40             <expression>Name_CHN like '%[value]%'</expression>
    41             <textsearchlabel>按照名称搜索</textsearchlabel>
    42             <titlefield>Name_CHN</titlefield>
    43             <linkfield></linkfield>
    44             <fields all="false">
    45                 <field name="Name_CHN"/>
    46             </fields>
    47         </layer> 
    48         <layer>
    49             <name>村居委</name>
    50             <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/4</url>
    51             <expression>Name_CHN like '%[value]%'</expression>
    52             <textsearchlabel>按照名称搜索</textsearchlabel>
    53             <titlefield>Name_CHN</titlefield>
    54             <linkfield></linkfield>
    55             <fields all="false">
    56                 <field name="Name_CHN"/>
    57             </fields>
    58         </layer>      
    59         <layer>
    60             <name>水域河流名称</name>
    61             <url>http://localhost:6080/ArcGIS/rest/services/nsResearch/MapServer/2</url>
    62             <expression>Name_CHN like '%[value]%'</expression>
    63             <textsearchlabel>按照名称搜索</textsearchlabel>
    64             <titlefield>Name_CHN</titlefield>
    65             <linkfield></linkfield>
    66             <fields all="false">
    67                 <field name="Name_CHN"/>
    68             </fields>
    69         </layer>
    70         <layer>
    71             <name>所有</name>
    72             <url></url>
    73             <expression>Name_CHN like '%[value]%'</expression>
    74             <textsearchlabel>按照名称搜索</textsearchlabel>
    75             <titlefield>Name_CHN</titlefield>
    76             <linkfield></linkfield>
    77             <fields all="false">
    78                 <field name="Name_CHN" />
    79             </fields>
    80         </layer>
    81     </layers>
    82     <zoomscale>10000</zoomscale>
    83 </configuration>
    84 
    85 <!--
    86     See Search widget tag reference at
    87     http://links.esri.com/searchwidget
    88 -->

    SearchWidget.mxml:具体实现部分,我截图部分代码好了,具体的详见flexviewer,首先是利用在地图框选(线 面 拉框等等)获取框选的范围Geometry,然后利用当前的Geometry作为queryTask的参数,用于query查询。

     1           private function activateDrawTool(event:MouseEvent):void
     2             {
     3                 addSharedData("Deactivate_DrawTool", null); // to be able to deactivate drawTool on other widgets
     4 
     5                 // apply glow
     6                 selectedDrawingIcon = FocusableImage(event.currentTarget);
     7                 clearSelectionFilter();
     8                 selectedDrawingIcon.filters = [ glowFilter ];
     9 
    10                 finishDrawing = false;
    11 
    12                 var status:String;
    13                 var value:String = selectedDrawingIcon.name;
    14                 switch (value)
    15                 {
    16                     case DrawTool.MAPPOINT:
    17                     {
    18                         status = pointLabel;
    19                         drawSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 15, 0x3FAFDC, 1);
    20                         break;
    21                     }
    22                     case DrawTool.POLYLINE:
    23                     {
    24                         status = lineLabel;
    25                         drawSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1);
    26                         break;
    27                     }
    28                     case DrawTool.EXTENT:
    29                     {
    30                         status = rectangleLabel;
    31                         drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1));
    32                         break;
    33                     }
    34                     case DrawTool.POLYGON:
    35                     {
    36                         status = polygonLabel;
    37                         drawSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, 0x3FAFDC, 0.5, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, 0x3FAFDC, 1, 1));
    38                         break;
    39                     }
    40                 }
    41                 setMapAction(value, status, drawSymbol, searchDrawEnd);
    42             }
     1             private function searchDrawEnd(event:DrawEvent):void
     2             {
     3                 // deactivate the draw tool
     4                 finishDrawing = true;
     5 
     6                 selectedDrawingIcon = null;
     7                 clearSelectionFilter();
     8 
     9                 event.target.deactivate();
    10                 var geom:Geometry = event.graphic.geometry;
    11 
    12                 if (geom is Polygon && GeometryUtil.polygonSelfIntersecting(geom as Polygon))
    13                 {
    14                     geometryService.simplify([ geom ]);
    15                 }
    16                 else
    17                 {
    18                     //to improve search results
    19                     if (geom.type == Geometry.MAPPOINT)
    20                     {
    21                         geom = createExtentAroundMapPoint(geom as MapPoint, pointSearchTolerance);
    22                     }
    23 
    24                     queryFeaturesGraphical(geom);
    25                 }
    26             }
     1             queryGeom = geom;
     2                 queryFields = searchLayer.fields;
     3                 queryTitleField = searchLayer.titlefield;
     4                 queryLinkField = searchLayer.linkfield;
     5                 queryLinkAlias = searchLayer.linkalias;
     6                 
     7                 if (queryLayer)
     8                 {
     9                     var query:Query = new Query();
    10                     query.geometry = queryGeom;
    11                     query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS;
    12                     query.outSpatialReference = map.spatialReference;
    13                     
    14                     const supportsServerSideSorting:Boolean = queryLayer.layerDetails
    15                         && queryLayer.layerDetails.version >= 10.1
    16                         && queryLayer.layerDetails.supportsAdvancedQueries;
    17                     const orderByFields:Array = searchLayer.orderbyfields;
    18                     if (supportsServerSideSorting && orderByFields)
    19                     {
    20                         query.orderByFields = orderByFields;
    21                     }
    22                     
    23                     var queryOptions:Object =
    24                         {
    25                             supportsServerSideSorting: supportsServerSideSorting,
    26                             orderByFields: orderByFields,
    27                             queryFields: queryFields
    28                         };
    29                     
    30                     queryLayer.queryFeatures(
    31                         query, new AsyncResponder(queryFeatures_resultHandler,
    32                             queryFeatures_faultHandler,
    33                             queryOptions));
    34                     
    35                     showMessage(loadingLabel, true);
    36                     showStateResults();
    37                 }
     1          private function queryFeatures_resultHandler(featureSet:FeatureSet, queryOptions:Object):void
     2             {
     3                 try
     4                 {
     5                     if (!queryOptions.supportsServerSideSorting && queryOptions.orderByFields)
     6                     {
     7                         FeatureSetUtil.sortFeaturesByFieldName(featureSet, queryOptions.orderByFields);
     8                     }
    16                     if(searchResultAC==null)searchResultAC=new ArrayCollection();
    17                     total++;
    18                     searchResultAC.addAll(createSearchResults(featureSet, queryOptions.queryFields));
    19 
    20                     addSharedData(widgetTitle, searchResultAC);
    21                     if (featureSet.features.length < 1)
    22                     {
    23                         showMessage(noResultLabel, false);
    24                     }
    25                     else
    26                     {
    27                         showMessage(selectionLabel + " " + searchResultAC.length, false);
    28                     }
    29                 }
    30                 catch (error:Error)
    31                 {
    32                     showMessage(error.message, false);
    33                 }    
    66                 
    67             }

    备注:

    GIS技术交流QQ群:432512093

  • 相关阅读:
    js禁用回退键
    css和js引用图片路径
    js 文字横向滚动
    数组转换
    Vbox共享串口
    office2003 打开docx文件
    注销退出客户点击回退怎么办
    vs2010 安装mvc3
    修改头像
    iis发布网站局域网无法访问
  • 原文地址:https://www.cnblogs.com/giserhome/p/5060289.html
Copyright © 2020-2023  润新知