2016-07-20 56 views
0

我有一个要使用用户输入和几何服务进行缓冲的功能层。ESRI JS API - 缓冲区FeatureLayer

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

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

你可以使用像这样(未经测试,只取伪代码):

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

其400错误..无法完成操作。 – LCaraway

+0

得到爱Esri的有用的错误消息:(。我添加了一个适用于我的例子,尽量匹配最好的,如果你这样做,并且stlil看到一个400错误,可能是有一个几何问题您的要素图层,请尝试使用简单点发送它,或者先使用几何服务简化方法来简化它,在此函数中,我传入ArcGIS Point和50作为我的半径。 –

0

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


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