Arcgis for Android identify 和query查询遇到的问题,求教

Arcgis for Android identify 和query查询遇到的问题,求教,第1张

1、QueryTask:是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便提一下的是,QueryTask进行查询的地图服务并不必须加载到Map中进行显示。QueryTask的执行需要两个先决条件:一个是需要查询的图层URL、一个是进行查询的过滤条件。

下面是QueryTask的基本过程:

//新建一个QueryTask

QueryTask queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5")

// Query对象

Query query = new Query()

//传入空间几何范围,可以不设置

//合法的geometry类型是Extent, Point, Multipoint, Polyline, Polygon

query.Geometry = geometry

//是否返回查询结果的空间几何信息

query.ReturnGeometry = true

//查询结果返回的字段,字段必须在图层中,字段的大小写可忽略

query.OutFields.AddRange(new string[] { "AREANAME", "POP2000" })

//quer.OutField.Add("*")//返回所有字段

//查询的where条件,可以是任何合法的SQL语句,可以不设置

query.Where = "POP2000 >350000"

//异步查询,需要绑定queryTask的两个事件,通过ExecuteCompleted得到查询结果

queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted

queryTask.Failed += QueryTask_Failed

queryTask.ExecuteAsync(query)

//同步查询,不需要绑定事件,直接返回查询结果

//FeatureSet featureSet = queryTask.Execute(query)

2、FindTask:允许对地图中一个或多个图层的要素进行基于属性字段值的查询(search one or more layers in a map for features with attribute values that match or contain an input value)。FindTask不能进行“空间查询”,因为FindTask可以对多个图层进行查询,所有它的url属性需要指向所查询的地图服务的REST URL,而不像QueryTask需要指定某个图层的URL。

下面是FindTask的基本过程:

//新建一个Find task

FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/")

//异步执行,绑定事件

findTask.ExecuteCompleted += FindTask_ExecuteCompleted

findTask.Failed += FindTask_Failed

//初始化FindParameters参数

FindParameters findParameters = new FindParameters()

findParameters.LayerIds.AddRange(new int[] { 3 })//查找的图层

findParameters.SearchFields.AddRange(new string[] { "NAME" })//查找的字段范围

findParameters.ReturnGeometry = true

findParameters.SearchText = FindTextBox.Text//查找的“属性值”

//设置查询的LayerDefinitions

ESRI.ArcGIS.Client.LayerDefinition myDefinition = new ESRI.ArcGIS.Client.LayerDefinition()

myDefinition.LayerID = 3

//设置LayerDefinition,属性字段“Name”属于ID为0的图层

//LayerDefinition的设置语句和Query中的Where语句一样

myDefinition.Definition = "NAME = 'XXX'"

//创建一个ObservableCollection,add设置的LayerDefinition

System.Collections.ObjectModel.ObservableCollection<LayerDefinition>myObservableCollection =

new System.Collections.ObjectModel.ObservableCollection<LayerDefinition>()

myObservableCollection.Add(myDefinition)

findParameters.LayerDefinitions = myObservableCollection//设置查询的LayerDefinitions

//异步执行

findTask.ExecuteAsync(findParameters)

3、IdentifyTask:是一个在地图服务中识别要素(Feature)的功能类。通过IdentifyTask可以搜索地图层中与输入几何形相交的要素(search the layers in a map for features that intersect an input geometry)。因为也是在多个图层中查询,所以Task的URL是动态图层服务的地址。同样,返回的要素都可以作为Graphic被添加到地图的GraphicsLayer上。

基本过程如下:

//新建一个Identify task

IdentifyTask identifyTask = new IdentifyTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer")

//异步执行,绑定事件

identifyTask.ExecuteCompleted += IdentifyTask_ExecuteCompleted

identifyTask.Failed += IdentifyTask_Failed

//初始化 Identify parameters

IdentifyParameters identifyParameters = new IdentifyParameters()

identifyParameters.LayerOption = LayerOption.all

//传递地图属性给 identify parameters

identifyParameters.MapExtent = MyMap.Extent

identifyParameters.Width = (int)MyMap.ActualWidth

identifyParameters.Height = (int)MyMap.ActualHeight

//输入的几何参数为一个点,args来自点击事件

identifyParameters.Geometry = args.MapPoint//Point Envelop Extent polyline polygon

//设置查询的LayerDefinitions

ESRI.ArcGIS.Client.LayerDefinition myDefinition = new ESRI.ArcGIS.Client.LayerDefinition()

myDefinition.LayerID = 3

//设置LayerDefinition,属性字段“Name”属于ID为0的图层

//LayerDefinition的设置语句和Query中的Where语句一样

myDefinition.Definition = "NAME = 'XXX'"

//创建一个ObservableCollection,add设置的LayerDefinition

System.Collections.ObjectModel.ObservableCollection<LayerDefinition>myObservableCollection =

new System.Collections.ObjectModel.ObservableCollection<LayerDefinition>()

myObservableCollection.Add(myDefinition)

identifyParameters.LayerDefinitions = myObservableCollection//设置查询的LayerDefinitions

//异步执行

identifyTask.ExecuteAsync(identifyParameters)

三种查询的返回结果:

QueryTask:返回的是一个FeatureSet。Featureset.features[i]可以加入到GraphicsLayer上显示,也可以通过Attributes属性字段得到属性信息。

FindTask:返回的是一个FindResults数组, FindResults[i].feature可以加入到GraphicsLayer上显示,也可以通过Attributes属性字段得到属性信息。

IdentifyTask:返回的是一个IdentifyResults数组,IdentifyResults[i].feature可以加入到GraphicsLayer上显示,也可以通过Attributes属性字段得到属性信息。

1、打开ArcMap软件,点击“添加 数据”按钮,将面层添加到软件中。

2、在工具栏中选择“ArcToolbox”按钮,打开ArcToolbox工具箱。

3、在其中选择“数据管理工具”——“要素”——“要素转点”,双击

4、弹出“要素转点”对话框,其中,输入要素选择加载的图层,输出 要素可以默认,也可以自己选择位置并命名,点击确定。

5、当弹出处理成功对话框时,点击关闭按钮。

6、可以看到视图中加载的处理完的点要素两个图层。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/419125.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-24
下一篇2023-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存