我有一个要使用用户输入和几何服务缓冲的要素图层。
FeatureLayer:
var texasPipeline = new FeatureLayer(pipeURL, {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ["*"],
definitionExpression:texasPipeQuery
});
的BufferParameters:
var params = new BufferParameters();
params.distances = [distance];
params.unit = units;
params.outSpatialReference = map.spatialReference;
params.geometries = texasPipeline;
map.graphics.clear();
geomSvc.buffer(params, showBuffer);
服务器返回错误,指出必须提供几何。我的猜测是,我需要传递FeatureLayer的几何体而不是FeatureLayer本身。我如何得到FeatureLayer的几何形状并将其适当地传递给BufferParameters?
编辑: 另外,我试图循环,如下面的代码所示。将几何数组传递给BufferParameters仍然无法成功返回。
var texasPipelineGeom = [];
var graphics = texasPipeline.graphics;
for (var G in graphics) {
var g = graphics[G]["geometry"];
console.log(g);
texasPipelineGeom.push(g);
}
答案 0 :(得分:0)
您通过编辑收到的错误是什么,这看起来是一个好的开始。缓冲区参数确实采用几何数组而不是要素图层。
你可以使用这样的东西(未经测试,只需作为伪代码):
params.geometries = texasPipeline.graphics.map(function (graphic) {
return graphic.geometry;
});
如果使用多边形,有时几何服务会抱怨多边形没有被简化。您可以在此处找到包含多边形的完整工作示例:https://developers.arcgis.com/javascript/3/jssamples/util_buffergraphic.html,您只需要正确地从要素图层中获取几何图形并将它们添加到params.geometries
。
var buffer = function buffer (point, radius) {
var promise = new Deferred();
var gsvc = new GeometryService(CONFIG.GEOMETRY_SERVICE_URL);
var params = new BufferParameters();
params.geometries = [point];
params.distances = [radius];
params.unit = GeometryService.UNIT_KILOMETER;
params.outSpatialReference = new SpatialReference(54010);
gsvc.buffer(params, promise.resolve, console.error);
return promise;
};
答案 1 :(得分:0)
你正在使用什么样的js api?从3.13版开始,有一个模块esri/geometry/geometryEngine。使用此模块,您可以在客户端执行几何操作而无需几何服务。 Here是使用它的一个很好的例子。
另请参阅模块esri/graphicsUtils以获取图形中的几何图形。