条件を指定して点を抽出
ArgGISでは、様々な条件を指定してデータを抽出することが可能です。
例えば、距離というフィールドに起点からの距離が入っているとして、属性検索を以下のようにする。
mod (”距離”,500) = 0
距離を500で割った余りが0の物を選択するといった意味で、500mごとの点が抽出されます。
属性検索は、単純な値を抽出するだけではなく特殊な検索もできますので、式さえ組めればデータの抽出・整理が非常に楽になります。
AutoCADで作った横断図等の座標一覧表をつくる
AutoCADの持っているカスタマイズ機能を駆使して、LISPやVBAなどによるマクロを作ってもよいのですが、AutoCADのLT版でできる、手軽で手っ取り早い方法を紹介します。
手順を書くと長いですが、操作自体はクリックしまくるだけなので簡単です。
■AutoCADでの操作
1.各断面をポリラインにして、繋げる
2.要に応じて、DLを分かりやすい高さに移動させる
(やらなくても可。やった方がデータを見やすくなる)
3.河道の中心線に目安となるxlineを引く
(やらなくても可。やった方がデータを見やすくなる)
4.logfilemodeを1にする
(LOGFILEPATHに、全ての操作を記録したファイルが作成されます)
5.●SPほにゃららと打ち込む
(ログファイルを見やすくするため)
6.UCS原点をDLとxlineが交差する点にセットする
(UCSツールバーを表示させて、原点ボタンをクリックするだけ)
7.横断線を選んでlistを表示
8.(5~7)を断面の数だけ繰り返す
その際、毎度毎度●SPほにゃららを打ち込むのは面倒なので、
十時キーの上を2回押す>BSキーを押す>新しい数字を入力
とすると、楽です。
9.全ての断面のlist取得が終わったら、logfilemodeを0に戻す
■出来上がったテキストファイルの操作
1.秀丸などの「正規表現」が使えるソフトでlogファイルを開く
2.置換で、以下の文字列を消す
(^\n|^(?!コマンド: ●.*)(?!.*点の位置.*).*$)
3.置換で、以下の文字列を消す
(コマンド: |X=|Y=| Z=.*| 点の位置 |^ *|)
4.置換で、以下の文字列を,に置換する
( +)
接しているメッシュの属性値を取得する
『接続対象となるメッシュ』に接するメッシュを作成する手順
- 『接続対象となるメッシュ』のバッファーを作成
50mメッシュだとすれば50mの角丸バッファを作る - 空間検索で、作成したバッファに含まれるメッシュを選択対象に追加する
(「重なる」ではなく「含まれる」にするのは、角が接しているだけのメッシュを排除するため) - 空間検索で、『接続対象となるメッシュ』と重なるメッシュを選択対象から除外する
- データをエクスポートする
上記1~4でファイルを作成したら、テーブルを空間結合して、最小値を取得する
最小値を取得するのは、複数のメッシュに接している場合、1つの値だけが欲しいから。
最も近いポイントの属性値を取得する
空間的位置関係に基づくテーブル結合をおこない、『各ポリゴンに、そのポリゴン境界内に位置するラインの全ての属性を与え、距離フィールドにその距離を格納します』を選べばよいだけ。
応用として、以下のような使い方があるかと思います。
- 調査ポイントから河川センターまでの距離を一覧表示
- 鳥類の確認地点から、最寄りの樹木までの距離(および樹種)を整理
- 現場から最も近い駅の検索
直角座標系で作ったメッシュの端点の緯度経度を求める
ちょっと無理矢理ですが、以下の方法で調べることができます。
- excelで、XYを記載したcsvファイルをつくる
- csvファイルを読み込んでメッシュの端点を作る
- UTM座標系(JGD2000)に変換
ArcToolbox>Data Management Tools>プロジェクトとトランスフォーム>フィーチャ>投影変換 - XとYの座標値をフィールド演算をおこない、テーブルに入力する。
(下記参照。ヘルプに載っています)
手軽にXY座標が欲しい場合は
ArcToolbox>Data Management Tools>フィーチャ>XY座標の追加 - 出来上がったpointのシェイプファイルをちょっとずらし、メッシュポリゴン内に右下と右上のpointデータが含まれるようにする。
- テーブル結合(空間結合)で、メッシュにXY座標を追加する。
■ポイントのX座標
Dim dblX As Double
Dim pPoint As IPoint
Set pPoint = [Shape]
dblX = pPoint.X
→ dblX
■ポイントのY座標
Dim dblY As Double
Dim pPoint As IPoint
Set pPoint = [Shape]
dblY = pPoint.Y
→ dblY