FAQ
ModelBuilder: 重複したポイントを分散するツール

ナレッジ番号:3351 | 登録日:2023/05/29 | 更新日:2023/06/21

概要

ジオコーディングを行った際、同一の住所を返すレコードが多いとポイントが多数重複します。そのようなポイントをランダムに分散するためのサンプル モデルをご紹介いたします。

あらかじめデータは投影座標系に変換しておく必要があります。
ポイントの移動先は、指定した範囲内でランダムに決定されます。あらかじめご了承ください。

ダウンロード

以下の添付をダウンロードおよび解凍するとツールボックスが表示されます。その中の「ポイントをランダムに分散」モデルをご利用ください。

FAQ7736_DispersePt.zip

このモデルはあくまでもサンプル モデルです。モデルの処理やご利用方法については、原則としてサポート対象外とさせていただきます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねますこと、あらかじめご了承ください。

モデルのパラメーター

  • ポイント データ (投影座標系) : 投影座標系のポイント レイヤーまたはデータ。地理座標系の場合は [投影変換] ツールで投影変換を行っておいてください。
  • 出力ポイント: 出力ポイント データの保存場所と名称。
  • 範囲 (メートル) : ポイントの分散距離の最大値。
  • 空間参照:出力ポイントの座標系。原則として入力データと同じ地理座標系を設定してください。

処理の流れ

  1. ポイントの重複数を取得するため、指定したポイントデータを空間結合します。
    ターゲット フィーチャ、結合 フィーチャともに「ポイント データ (投影座標系)」にすることで、1つのデータ内でのポイントの重複数をカウントできます。
  2. 移動先のポイントの座標を格納するためのフィールド (newX、newY) を追加します。
  3. [フィールド演算] ツールで、移動先の座標値を決定します。手順 1 で取得したポイントの重複数 (Join_Count) が 2 以上であれば移動することになるため、以下の要領で条件式とコード ブロックを入力します。条件式の種類は「PYTHON_9.3」です。
    条件式:
    getNewX(!shape.firstpoint.x!,%範囲(メートル)%,!Join_Count!)
    
    コード ブロック:
    import random
    def getNewX(oldX,radius,countPt):
        if(countPt>1):
            newX=oldX+(random.uniform(-1.0,1.0)*radius)
            return newX
        else:
            return oldX
    
  4. 一時的に、ポイント データ (投影座標系) のコピーを作成します。作成したデータに、移動先の座標値が格納されたフィールド (newX、newY) を追加します。
  5. [XY イベント レイヤーの追加] ツールで、移動先の座標値をもとにポイント レイヤーを作成し、それを実データに変換するとため [フィーチャのコピー] ツールで出力を行います。

メタデータ

種類

製品

バージョン