ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心
发布时间:2020-12-15 04:12:28 所属栏目:百科 来源:网络整理
导读:目的: 1.ArcGIS API for Flex 实现Query查询定位中心功能,进行属性查图的功能,选择图层然后输入查询语句进行查询把查到的地理元素高亮显示同时在右边的Grid中显示查到的数据,然后点击 Grid中 的数据进行对该条数据进行定位中心的显示 。 准备工作: 1.
目的: 7.上面的代码中为TextInput添加了enter事件用来实现回车后进行调用doQuery()方法进行查询,为Button添加了click事件点击后调用
doQuery()方法进行查询。
1.ArcGIS API for Flex实现Query查询定位中心功能,进行属性查图的功能,选择图层然后输入查询语句进行查询把查到的地理元素高亮显示同时在右边的Grid中显示查到的数据,然后点击Grid中的数据进行对该条数据进行定位中心的显示。 准备工作: 1.在ArcGIS.Server.9.3发布一个叫usa的Map Service,并且把这个Service启动起来。 2.采用Esri在线数据http://server.arcgisonline.com/ArcGIS/rest/services/NPS_Physical_World_2D/MapServer 完成后的效果图: 开始: 1.启动Flex Builder3新建工程以及引入ArcGIS API for Flex library的开发包。 2.新建QueryTest.mxml页面,这里显示的地图采用Esri提供的在线的NPS_Physical_World_2D的地图比较的漂亮,但是Tiled图没有图层以及字段等数据没有办法进行查询定位,所以在Tiled图的基础上在叠加一个DynamicMap图层就是上面发布的usa的数据,我们对usa的数据进行查询然后结果显示在NPS_Physical_World_2D的地图上面。由于是2个Layer的叠加就需要esri:ArcGISTiledMapServiceLayer和ArcGISDynamicMapServiceLayer,具体的显示代码如下:
?1
3.上面的代码中为Map控件设置了以为USA范围的Extent,为ArcGISDynamicMapServiceLayer设置了creationComplete事件就是用来执行loadMapLayer(event)把地图图层名称以及index添加到ComboBox来选择用。
?2 loadMapLayer(event)方法代码如下: //获取地图图层名称和index到ComboBox上 ComboBox的显示代码:
10 11 12 13 14 15
1
4.上面还为
ArcGISDynamicMapServiceLayer设置了可视图层<esri:visibleLayers><mx:ArrayCollection></mx:ArrayCollection></esri:visibleLayers>,这样设置的为空就是不想用来显示只是用来数据查询用。
5.还添加了GraphicsLayer对象用来进行高亮显示用,并且为它设置了symbolFunction="{mySymbolFunction}"这样是在 mySymbolFunction方法中对点、线、面的显示样式进行设置,代码如啊: private?
function
?mySymbolFunction(graphic:Graphic):Symbol 对上面的sms、sls、sfs等定义:
?3 ?4//根据元素的类型进行显示样式的设定 ?5 ?6 ?8 10 11 13 151617?Geometry.GEOMETRY_POLYGON: 18 202122 24 esri:SimpleLineSymbol?
="sls"
?style
?color
="0x0000FF"
="2"
?alpha
="0.6"
2
esri:SimpleMarkerSymbol?
="sms"
="circle"
="0.6"
?size
="15"
3
esri:SimpleFillSymbol?
="sfs"
/>
6.接下来在页面上添加一个TextInput、Button、mx:DataGrid分别为查询语句输入框、查询按钮、查询结果显示表,具体显示代码如下:
="48"
="-139"
="-183"
mx:TextInput?
="qText"
="135"
="223"
?enter
="doQuery()"
?text
="STATE_NAME?like?'%a%'"
4
mx:Button?
x
="366"
?label
="查询"
?fontSize
="12"
="22"
?click
="doQuery()"
5
6
8.要进行Query还需要esri:QueryTask控件,在页面上添加如下显示代码: esri:QueryTask?
="queryTask"
esri:Query?
="query"
esri:QueryTask
>
9.
doQuery()方法代码如下,具体说明看注解:
?doQuery():
void
10.更加查询语句查询到结果显示到Grid中后还需要实现一个点击Grid的行进行地图定位的功能,上面添加Grid的时候已经为它添加了change事件就是点击某一行后调用clickHandler(event)方法进行定位功能,代码说明如下:
设置queryTask的url,就是设置要查询的图层????????????????queryTask.url"http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer/+layerList.value; queryTask.query.text=qText.text;queryTask.query.where="STATE_NAME?like?'%"+qText.text+"%'";设置查询语句????????????????queryTask.query.whereqText.text; 查询结果是否返回Geometry????????????????queryTask.query.returnGeometrytrue STATE_NAMEPOP2000 进行查询成功调用onResult方法,错误失败调用onFault????????????????queryTask.execute(query,?AsyncResponder(onResult,onFault)); 24 // 查询成功活进行高亮显示已经数据Grid显示 25 ????????????private? ?onResult(featureSet:FeatureSet,token:Object? = null ): 26 29 31 3233Grid设置数据源进行查询结果显示34????????????????resultTable.dataProviderresultlist; 3536 37 查询失败提示 38 ?onFault(info:Object,?token:Object? ?): 39 Grid点击事件进行对点击对象进行定位居中显示
????????????public?
?clickHandler(event:ListEvent):
11.这样就完成了所有功能的编写可以运行测试效果。
设置查询的图层是否返回Geometry查询语句OBJECTID=idstr; 执行查询?AsyncResponder(onResult2,onFault2)); 16 17 ?ex:Extent?Extent(); 25(geo.type) 26 定位中心????????????????????????????myMap.centerAt(pnt); 设置地图视图范围????????????????????????????expline.extent; 43 444546面对象4748 5152pgon.extent; 5354555657 585960 6162 63 ?onFault2(info:Object,128); line-height:1.5; font-family:'Courier New'; font-size:12px">64 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |