サポート > PC-MAPPING ヒント集 > スクリプト > スクリプトによるポリゴンから部分包含するポリゴンの属性転記
スクリプトによるポリゴンから部分包含するポリゴンの属性転記
転記先レイヤーのポリゴンから部分包含する転記元レイヤーのポリゴンを検索、該当ポリゴンの転記元レイヤーポリゴン内部属性フィールドの値を取得し、転記先レイヤーポリゴン内部属性フィールドへ転記します。
該当ポリゴンが複数ある場合、カンマ区切りにして転記します。
■ サンプル
サンプル[script44.zip(約40KB)]をダウンロードする
Sample.pcm:サンプルプロジェクト
AttrTrans.js:サンプルJScript

■ 準備
  1. ダウンロードしたファイルを解凍します。
    ここでは、「C:\sample\script44」とします。

  2. PC-MAPPINGを起動します。

  3. 「C:\sample\script44\Sample.pcm」を開きます。

  4. 「C:\sample\script44\AttrTrans.js」を開きます。

■ 解説
AttrTrans.jsには、第一引数に「転記先レイヤータイトル」、第二引数に「転記先レイヤーポリゴン内部属性フィールドタイトル」、第三引数は「転記元レイヤータイトル」、第四引数は「転記元レイヤーポリゴン内部属性フィールドタイトル」を指定します。

要点1
var temp = lyr.PolygonGetPos3(i, ap, true, true);
レイヤークラス:PolygonGetPos3()メソッドからポリゴンを構成する座標値を座標点配列オブジェクトに取得します。

要点2
var temp = lyr2.FindByAreaEx(type, mode, ap, al);
レイヤークラス:FindByAreaEx()メソッドに要点1の座標点配列オブジェクトを指定し、座標点配列オブジェクトの領域に部分包含するポリゴンを検索、該当するポリゴン内部IDを整数配列オブジェクトに取得します。

要点3
for(var ii = 0; ii < al.GetNum(); ii++){
var data = db2.GetCell(al.Data(ii), fid2, false);
if(data != ""){
str = str + data + ",";
}
}

整数配列クラス:GetNum()メソッドで該当するポリゴン数を取得、for()文でループしながらポリゴン数分、データベースクラス:GetCell()メソッドで値を取得します。
取得した値が空欄でなければ、カンマ区切りにします。

■ 実行
このサンプルプロジェクトは、スクリプトファイルの第一引数に「災害地域」、第二引数に「住所一覧」、第三引数に「画地」、第四引数に「住所」を指定する事で、災害地域ポリゴンに部分包含する画地ポリゴンを検索、該当する画地ポリゴンから住所を取得し、カンマ区切りにして住所一覧へ転記しています。

  1. ベクターウィンドウをアクティブにします。

  2. コマンドラインバーが表示されているか確認します。
    表示されていなければ、[ワークスペース]-[コマンドバー]-[コマンドラインバー]を実行します。

  3. コマンドラインバーに「C:\sample\script44\AttrTrans.js△災害地域△住所一覧△画地△住所」(△は半角スペース)と記述し、実行します。

  4. すると、「処理を終了しました。」メッセージウィンドウが表示されます。
    【OK】ボタンをクリックします。

  5. 「災害地域」レイヤーからポリゴン内部属性ウィンドウを表示します。
    災害地域ポリゴンに部分包含する画地ポリゴンの住所をカンマ区切りにして住所一覧へ転記されている事がわかります。