イベント ハンドラー登録方法の違いによる挙動

投稿日:2016/9/1 (木) 更新日:

イベントのハンドリング方法によって結果関数の引数に入る情報が異なる。

function executeQueryTask() 
{
  //新規 QueryTask オブジェクトを作成し、検索対象レイヤーを指定します
  var queryTask = new QueryTask("http://sample.esrij.com/arcgis/rest/services/te2/MapServer/0")
  //属性検索の条件を設定します
  var query = new Query();
  query.where = "OBJECTID = 1";
  //検索を実行します
   
  //パターン1
  //queryTask.execute(query,showResults);
  //この場合は event.features で取得
 
  //パターン2
  queryTask.on("complete", showResults);
  queryTask.execute(query);
  //この場合は event.featureSet.features で取得
}
 
 
function showResults(event)
{
  //マップのグラフィックス レイヤーに含まれるすべてのグラフィックを削除します
  map.graphics.clear();
  //featureSet 配列を単一の変数に割り当てます
  var resultFeatures = event.featureSet.features;
 
  //返されたそれぞれのフィーチャをループ処理します
  for (var i=0; i < resultFeatures.length; i++)
  {
    //featureSet から現在のフィーチャを取得します
    //(フィーチャはグラフィックです)
 
 
    var symbol = new SimpleMarkerSymbol();
    symbol.setColor(new Color([150, 150, 150, 0.5]));
 
 
    var infoTemplate = new InfoTemplate();
    var graphic = resultFeatures[i];
    graphic.setSymbol(symbol);
    //infoTemplate を設定します
    graphic.setInfoTemplate(infoTemplate);
    //マップのグラフィックス レイヤーにグラフィックを追加します
    map.graphics.add(graphic);
  }
}      function executeQueryTask() 
{
  //新規 QueryTask オブジェクトを作成し、検索対象レイヤーを指定します
  var queryTask = new QueryTask("http://sample.esrij.com/arcgis/rest/services/te2/MapServer/0")
  //属性検索の条件を設定します
  var query = new Query();
  query.where = "OBJECTID = 1";
  //検索を実行します
   
  //パターン1
  //queryTask.execute(query,showResults);
  //この場合は event.features で取得
 
  //パターン2
  queryTask.on("complete", showResults);
  queryTask.execute(query);
  //この場合は event.featureSet.features で取得
}
 
 
function showResults(event)
{
  //マップのグラフィックス レイヤーに含まれるすべてのグラフィックを削除します
  map.graphics.clear();
  //featureSet 配列を単一の変数に割り当てます
  var resultFeatures = event.featureSet.features;
 
  //返されたそれぞれのフィーチャをループ処理します
  for (var i=0; i < resultFeatures.length; i++)
  {
    //featureSet から現在のフィーチャを取得します
    //(フィーチャはグラフィックです)
 
 
    var symbol = new SimpleMarkerSymbol();
    symbol.setColor(new Color([150, 150, 150, 0.5]));
 
 
    var infoTemplate = new InfoTemplate();
    var graphic = resultFeatures[i];
    graphic.setSymbol(symbol);
    //infoTemplate を設定します
    graphic.setInfoTemplate(infoTemplate);
    //マップのグラフィックス レイヤーにグラフィックを追加します
    map.graphics.add(graphic);
  }
}

関連記事

  • この記事を書いた人

羽田 康祐

伊達と酔狂でエクストリーム スポーツに挑む GIS エンジニア。 GIS、IT、趣味に関して日々の出来事で学んだ記憶を記録するためにブログを書いています。同じ問題に出会った方の参考になっていただければ幸いです。GIS を使った自己紹介はこちら

-プログラミング, ArcGIS
-,

Copyright© WINGFIELD since1981 , 2019 All Rights Reserved.