简体   繁体   中英

ESRI JS API - Buffer FeatureLayer

I have a Feature Layer that I would like to buffer using user input and a geometry service.

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

The server is returning an error saying that geometries must be supplied. My guess here is that i need to pass in the geometry of the FeatureLayer as opposed to the FeatureLayer itself. How do i get at the geometries of the FeatureLayer and appropriately pass that into the BufferParameters??

EDIT: Additionally I have tried to loop through as you can see in the code bellow. passing the array of geometries into the BufferParameters still does not return successfully.

        var texasPipelineGeom = [];
        var graphics = texasPipeline.graphics;
        for (var G in graphics) {
            var g = graphics[G]["geometry"];
            console.log(g);
            texasPipelineGeom.push(g);
        }

What is the error you re receiving with the edits you made, that looks to be a good start. The buffer parameters does take an array of geometries instead of a feature layer.

You could use something like this (untested, just take as pseudo code):

params.geometries = texasPipeline.graphics.map(function (graphic) {
  return graphic.geometry;
});

If using polygons, sometimes the geometry service will complain about the polygons not being simplified. You can find a full working example with polygons here: https://developers.arcgis.com/javascript/3/jssamples/util_buffergraphic.html , You will just need to correctly get your geometries out of the feature layer and add them to 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;
};

What vesrion of js api you are using? Starting from version 3.13 there is a module esri/geometry/geometryEngine . With this module you can do geometry operation on the client side without geometry service. Here is a good example of using it.


Also take a look at module esri/graphicsUtils to get geometries from graphics.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM