2016-07-20 16 views
0

Ich habe einen Feature-Layer, den ich mit Benutzereingabe und einem Geometriedienst puffern möchte.ESRI JS API - Puffer 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); 

der Server einen Fehler zurückgibt verständlich Geometrien zugeführt werden muss. Meine Vermutung ist, dass ich die Geometrie der FeatureLayer im Gegensatz zur FeatureLayer selbst übergeben muss. Wie bekomme ich die Geometrien der FeatureLayer und gebe diese entsprechend in die BufferParameters?

EDIT: Zusätzlich habe ich versucht, durchschleifen, wie Sie im Code unten sehen können. Übergeben des Arrays von Geometrien in den BufferParameters wird weiterhin nicht erfolgreich zurückgegeben.

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

Antwort

0

Was ist der Fehler, den Sie mit den Änderungen erhalten, die Sie gemacht haben, sieht das ein guter Anfang sein. Die Pufferparameter erfordern anstelle eines Feature-Layers ein Array von Geometrien.

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

Wenn Polygone verwenden, manchmal die Geometrie Service beschweren sich über die Polygone nicht vereinfacht werden:

Sie könnten so etwas wie dieses (nicht getestet, nur nehmen als Pseudo-Code) verwenden. Hier finden Sie ein voll funktionsfähiges Beispiel mit Polygonen: https://developers.arcgis.com/javascript/3/jssamples/util_buffergraphic.html, Sie müssen nur Ihre Geometrien aus dem Feature-Layer entfernen und sie zu params.geometries hinzufügen.

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

es ist ein Fehler 400 .. kann den Vorgang nicht abschließen. – LCaraway

+0

Ich liebe Esris hilfreiche Fehlermeldungen :(. Ich habe ein Beispiel hinzugefügt, das für mich funktioniert, versuche, das bestmögliche zu finden. Wenn du einen 400-Fehler siehst und siehst, kann es sein, dass es ein Problem mit der Geometrie gibt versuchen Sie es mit einem einfachen Punkt, oder vereinfachen Sie es zuerst mit der vereinfachten Methode der Geometriedienste.In dieser Funktion gebe ich einen ArcGIS-Punkt und 50 als Radius ein. –

0

Welche vesrion von js api verwenden Sie? Ab Version 3.13 gibt es ein Modul esri/geometry/geometryEngine. Mit diesem Modul können Sie Geometrieoperationen auf der Clientseite ohne Geometriedienst ausführen. Here ist ein gutes Beispiel für die Verwendung.


Werfen Sie auch einen Blick auf Modul esri/graphicsUtils Geometrien von Grafiken zu erhalten.