首页 > 编程语言 >arcgis for javascript api做缓冲区分析

arcgis for javascript api做缓冲区分析

时间:2022-09-20 09:00:43浏览次数:54  
标签:distance geometry javascript arcgis api params 缓冲区 var

需求内容: 对某个arcgis server发布的服务进行缓冲区分析,并且下载缓冲区的结果要素图层

思路: 

  1. 通过arcgis 服务的 find操作拿到所有的要素
  2. 对要素进行缓冲区分析
  3. 下载缓冲区分析的结果

项目使用的ags for javascript是3.14的。

1.获取arcgis 服务的所有的要素,可以使用 下面的两个类进行查找,接口返回的结果是要素的数组

"esri/tasks/FindTask",
"esri/tasks/FindParameters",
function findAllGeometry(layer){
if (layer.url){
var find = new FindTask(layer.url);
var parameter = new FindTaskParameter();
parameter.layerIds = [0];
parameter.searchText = 0;
parameter.returnGeometry = true
try{
find.execute(parameter,processResult)
}catch(e){
layer.msg("查找要素服务失败")
}
}
}
2. 进行缓冲区分析可以使用下面api的两个类进行分析(因为arcgis server自带的utilities/Geometry下面有buffer的服务工具)
"esri/tasks/GeometryService",
"esri/tasks/BufferParameters",
var _buffer = function (geometry, distance, callback, option) {
if (_geometryService == undefined) {
_geometryService = new GeometryService(_url);
}
if (distance == undefined)
distance = DEFAULT_BUFFER_DISTANCE;
on.once(_geometryService, 'buffer-complete', lang.hitch(this, callback));
on.once(_geometryService, 'error', one rrorHandler);

lang.mixin(_bufferOption, option);
var params = new BufferParameters();
params.geometries = lang.isArray(geometry) ? geometry : [geometry];
params.distances = lang.isArray(distance) ? distance : [distance];
params.unit = _bufferOption.unit;
params.unionResults = option.unionResults?option.unionResults:false;
params.bufferSpatialReference = _bufferOption.bufferSpatialReference;
params.outSpatialReference = _bufferOption.outSpatialReference;
_geometryService.buffer(params);
};
参数的unionResults如果为ture返回的结果只有一个要素,如果为false会返回和geometry数组一样的数组,geometry的类型是arcgis for javascript的类型。
3.进行下载需要将返回的geometry转化为geojson进行下载,调用接口进行下载
_expToShp: function (geo) {
var features = [];
var sr, wkt;
for (var i = 0; i < geo.length; i++) {
var geometry = geo[i].geometry;
var attr = geo[i].attributes;
var coordinates = [];
if (geometry) {
sr = geometry.spatialReference;
wkt = sr.wkid;
var rings = geometry.rings;
for (var j = 0; j < rings.length; j++) {
var ring = rings[j];
coordinates.push(ring);
}
}
var feature = {
"type": "Feature",
"geometry": {"type": geometry.type, "coordinates": coordinates},
"properties": attr
};
features.push(feature);
}
if (sr) {
wkt = sr.wkid;
}
var urlVar = {};
urlVar.geometry = JSON.stringify({"type": "FeatureCollection", "features": features});
urlVar.sr = wkt;
exportFile(urlVar, root + "/geometryService/export/shp");
}

 

标签:distance,geometry,javascript,arcgis,api,params,缓冲区,var
From: https://www.cnblogs.com/1521681359qqcom/p/16709824.html

相关文章

  • JavaScript 函数定义
    https://m.runoob.com/js/js-function-definition.html JavaScript使用关键字function定义函数。函数可以通过声明定义,也可以是一个表达式。函数声明在之前的教......
  • JavaScript合并多个数组
    工作中经常会对数组进行合并,稍微总结一下常用的方法:concatJavaScript原生自带的函数,用法如下:letarr1=[3,5,7];letarr2=[4,78,79];letarr3=[];arr3=......
  • ArcGIS Pro SDK栅格颜色拉伸
    protectedoverrideasyncvoidOnClick(){varrasterLayer=MapView.Active.Map.GetLayersAsFlattenedList().OfType<ImageSe......
  • ArcGIS Pro 二次开发缓冲区代码
    varvalueArray=awaitQueuedTask.Run(()=>{varg=newList<object>(){geometry,};//Createsa8000-meter......
  • 使用 Buffered Paint API 绘制带有淡入淡出动画的控件
    使用BufferedPaintAPI绘制带有淡入淡出动画的控件发表于2011年10月23日 Windows窗体提供了许多机制来构建与操作系统风格相匹配的专业自定义UI控件;通过结......
  • javascript中的对象和json对象区别
    json对象和javacript对象长得很像,但有本质不同  1、本质区别:(a)、json对象本质上是字符串,他是客户端和服务器之间传递数据的一种格式,他的属性只是样子货,不能执行。(b)......
  • JavaScript高级复习——js面向对象
    面向对象优点:易维护、易复用、易扩展。适合多人合作。缺点:性能比面向过程低。面向过程优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机。缺点:没有面向对象......
  • javascript的类的继承
     先看下java的继承,java的继承是发生在类之间,他们的对象之间没有继承关系,子类的对象通过子类创建对象,同时对象中不存储函数只有数据,函数需找到类定义以后读取里面的函数,类......
  • JavaScript break 和 continue 语句
    break语句用于跳出循环。continue用于跳过循环中的一个迭代。break语句break语句可用于跳出循环。break语句跳出循环后,会继续执行该循环之后的代码continue语句......
  • JavaScript for 循环
    循环可以将代码块执行指定的次数。for循环:如果向多次运行相同代码,且每次的值都是不同,那就使用循环不同类型的循环JavaScript支持不同类型的循环:for -循环代码块一......