サンプル 2: 選択

サンプル 2 は、メニューからコマンドとして呼び出されるように設計されたウィジェットです。このウィジェットは Firebug コンソールに書き出すため、Mozilla Firefox と Firebug エクステンションを必要とします。

注: Mozilla Firefox のサポートされるバージョンの動作環境を参照してください。

このウィジェットは、WebServerExtensionsInstallDir¥www¥fusion フォルダにある次のファイルを使用します。

このサンプルは、現在選択されてる区画に関する情報を Firebug コンソールに書き出します。選択に関する詳細は、「Map コンポーネント」および「選択情報を操作する」を参照してください。

フレキシブル Web レイアウトでは、getSelection() メソッドを使用して、現在の選択内容をマップ オブジェクトから取得できます。これは非同期メソッドであり、コールバック ルーチンをパラメータとして受け取ります。たとえば、次のメソッドは現在の選択内容のコールバックを設定します。

var theMap = Fusion.getWidgetById("Map");
theMap.getSelection(this.displaySelection );

コールバック メソッドは、Selection オブジェクトである 1 つのパラメータを受け取る必要があります。

displaySelection : function(selection){ 
  // process the selection object
}

1 つの Selection オブジェクトに、複数のマップから選択されたフィーチャを格納したり、それらのマップ内の複数の画層を格納することができます。コールバック ルーチンに渡される Selection オブジェクトは関連性のある 1 つの配列であり、配列内の各要素は 1 つのマップに関する選択データを保持します。

1 つのマップに関する選択内容を取得するには、そのマップに対応している要素を取得します。これは通常はメイン マップです。次に例を示します。

var theMap = Fusion.getWidgetById("Map");
if (!theMap.hasSelection())
{
  alert("Nothing selected");
  return;
}
var oSelection = selection[theMap.getMapName()];

ある画像の選択済みフィーチャを取得するには、getLayerByName() または getLayer() を呼び出します。 たとえば、Parcels 画層の選択済みフィーチャを取得するには、次のメソッドを呼び出します。

var thisLayer = oSelection.getLayerByName('Parcels');

選択内容のすべての画層をループするには、次の操作を行います。

for (var layerNum = 0; layerNum < oSelection.getNumLayers();
    layerNum++)
{
  var thisLayer = oSelection.getLayer(layerNum);
  var selectedFeaturesThisLayer = thisLayer.getNumElements();
  if (selectedFeaturesThisLayer > 0)
  {
    // Process the selected features
  }
}

それぞれの選択済みフィーチャを処理するには、次の操作を行います。

for (var featureNum = 0; featureNum < selectedFeaturesThisLayer;
    featureNum++)
{
  // process feature
}

Infrastructure Studio での画層定義では、選択済みフィーチャのどのプロパティを、クライアントの JavaScript API で使用できるのかを定義します。各プロパティには名前と値があります。

var propNames = thisLayer.getPropertyNames();
var nProperties = thisLayer.getNumProperties();
for (var propNum = 0; propNum < nProperties; propNum++)
{
  // process property
  var thisPropName = propNames[propNum];
  var thisPropValue = thisLayer.getElementValue(featureNum,
    ownerPropNum)
}

Example2.js はこれらの概念を組み合わせて、選択された区画の所有者名を Firebug コンソールに書き出します。