ArcGIS API for JavaScript中执行多种类型的任务。
所有的任务都是通过esri/tasks资源进行访问的
以下是一些任务的名称
ClosestFacilityTask , ConfigurationTask , FindTask , GeometryService ,Geoprocessor , IdentifyTask , ImageServiceldentifyTask , JobTask ,Locator , NotificationTask ,
PrintTask , QueryTask , ReportTask ,RouteTask , ServiceArea Task , TokenTask , Workflow Task
Promises
一个promise代表-个操作完成的最终返回值的对象
promise有以下特点:
-可以为三个状态中的一个: pending、 resolved、 rejected
-可以从unfulfilled转变到resolved或者rejected
-实现了- -个then(方法来注册回调函数 someAsyncFunction0.then(callback, errback);
-回调不能改变promise产生的值
- promise的then0方法可以返回-一个新的promise,可进行链式操作
查询任务:
查询参数Query
Query对象可进行三种类型的查询
- 属性查询
可以通过两个属性设置查询条件 Query.where 和Query.Text
Var query = new Query();
Query.where = “Name = 45666”; //注:Query.text只能查询服务中的默认字段,而不能查询其他字段。 Var query = new Query(); Query.text = “123456”;
2.空间查询
通过Query.geometry + Query.spatialRelationship指定查询条件
Geometry: Extent , Multipoint , Point , Polygon , Polyline
spatialRelationship: Intersects, contains, crosses, envelope-intersects, index-intersects, overlaps, touches, within, relation
例:
Var polygon = new Polygon({ Rings: rings }); Var query = new Query(); Query.geometry = polygon; Query.spatialRelationship = “”;
//
可选参数:QUery.distance 和 Query.unites 查询的距离和参数
3.统计查询
通过Query.outStatistics定义参数
例:
Var sumQuery = { onStatisticField:”” //统计字段 outSattisticFieldName:”” //统计结果字段 statisticType:”sum” //统计类型 求和 }; Var avgQuery = { onStatisticField:”” //统计字段 outSattisticFieldName:”” //统计结果字段 statisticType:”avg” //统计类型 求和 }; Var query = new Query(); Query.outStatistics = [sumQuery ,avgQuery ]
查询QueryTask对象
创建QueryTask对象
Var queryTask = new QueryTask({ Url:””; });
执行查询
方法名 返回值
execute() PromisecFeatureSet>
executeForCount() Promise<Number>
executeForExtent() Promise<Object>
executeForlds() Promise<Number[]>
例:
QueryTask.execute(query).then(function (results){ Console.log(results.features); },function (error){ Console.log(error); });
定位任务:
定位输入:IdentifyParameter对象
IdentifyParameter对象可以为定位操作设置多个属性 Geometry // 几何 Layerlds //指定查询的图层 layerOption // tolerance returnGeometry
例:
Params = new IdentifyParameters(); Params.geometry = event.mapPoint; Params.layerIds = [0,1,2]; Params.layerOption = “visible”; Params.tolerance = 3; Params.mapExtent = view.extent;
定位IdentifyTask对象
Var identifyTask = new IdentfyTask({ Url:””; })
定位执行
Var identifyTask = new IdentfyTask({ Url:””; })
定位结果 IDentifyResult
名称 返回值类型
Feature Graphic
Layerld Number
layerName String
displayFieldName String
查找任务FindParameters(查找主要涉及属性的查询)
FindParameters对象为查找操作指定搜索条件:
layerlds
searchFields
searchText
returnGeometry
Contains
例:
Var params = new FindParameters(); Params.layerIds = [0]; Params.searchFields = [“”]; Params.searchText = document.getElementById(“inputText”).value;
查找 FindTask对象
Var find= new FindTask({ Url:””; })
查找执行
Execute() Promise<Object>
查找结果
Find.execute(params) .then(showResults) .catch(rejectePromise)
Query、Identify、Find三者之间的区别
地理处理任务:
1在arcgis Desktop中建模 ----> 2.发布地理处理服务到ArcGIS Server ------>3.web应用调用地理处理服务
对于GP服务的调用需要明确的三件事
- 地理处理服务的URL地址
- 输入参数和输出参数
- 任务是同步的还是异步的
同步服务:
任务执行时,使用者必须等待执行的结果;
使用Geoprocessor.execute()方法提交作业;
执行结果保存在ParameterValue数组中;
异步服务:
提交作业后,执行结果返回前其他功能还可以继续执行;
使用Geoprocessor.submitJob()方法提交作业;
实例化Geoprocessor对象
Var gp = new Geoprocessor(gpUrl); //创建输入参数 Var params = { “Input_Observation_Point”: featureSet, “Viewshed_Distance”: vsDistance };
提交请求:
gp.excute(params).then(drawResultData) Function drawResultData(result){ Var resultFeatures = result.results[0].value.features; Var viewshedGraphics = resultFeatures.map(function(feature){ Feature.symbol = fillSymbol; Return feature; }); graphicsLayer.addMany(viewshedGraphics ); }