ESRI JS API - 缓冲区FeatureLayer

时间:2016-07-20 15:54:17

标签: javascript geometry buffer arcgis-js-api

我有一个要使用用户输入和几何服务缓冲的要素图层。

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);
        }

2 个答案:

答案 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以获取图形中的几何图形。