2016-07-20 5 views
0

ユーザー入力とジオメトリサービスを使用してバッファリングするFeature Layerがあります。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のジオメトリをどのように取得し、適切に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の役立つエラーメッセージが大好きです:(私は私のために働く例を追加しました。最高のものを試してみてください。400エラーが表示されたら、ジオメトリに問題があるかもしれません。あなたのフィーチャレイヤーを単純なポイントで送信するか、最初にジオメトリサービスで単純化してメソッドを単純化してみてください。この関数では、ArcGISポイントと50を自分の半径として渡します。 –

0

あなたはどのようなjs apiを使用していますか?バージョン3.13から、モジュールesri/geometry/geometryEngineがあります。このモジュールを使用すると、ジオメトリサービスなしでクライアント側でジオメトリ操作を実行できます。 Hereは良い例です。


はまた、グラフィックスからジオメトリを取得するためにモジュールesri/graphicsUtilsを見てみましょう。

関連する問題