【问题标题】:ESRI JS API - Buffer FeatureLayerESRI JS API - 缓冲区 FeatureLayer
【发布时间】:2016-07-20 15:54:16
【问题描述】:

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

特征层:

    var texasPipeline = new FeatureLayer(pipeURL, {
        mode: FeatureLayer.MODE_ONDEMAND,
        outFields: ["*"],
        definitionExpression:texasPipeQuery
    });

缓冲区参数:

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

【问题讨论】:

    标签: javascript geometry buffer arcgis-js-api


    【解决方案1】:

    您所做的编辑收到的错误是什么,这看起来是一个好的开始。缓冲区参数确实采用几何数组而不是要素图层。

    你可以使用这样的东西(未经测试,只是作为伪代码):

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

    【讨论】:

    • 一定会喜欢 Esri 的有用错误消息 :(。我添加了一个对我有用的示例,尝试尽可能匹配,如果你这样做并且仍然看到 400 错误,可能是那里是要素图层中几何的问题,请尝试使用简单的点发送它,或者先使用几何服务简化方法对其进行简化。在此函数中,我传入了一个 ArcGIS Point 和 50 作为我的半径。
    【解决方案2】:

    您使用的是什么版本的 js api?从版本 3.13 开始,有一个模块 esri/geometry/geometryEngine。使用此模块,您可以在客户端进行几何操作而无需几何服务。 Here 就是一个很好的例子。


    还可以查看模块 esri/graphicsUtils 以从图形中获取几何图形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2017-12-15
      • 2012-12-15
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多