QGISによる空間演算

2015/02/26
電子国土Webシステムのサポート終了により、下記サイトでボーリング柱状図が地図上に表示できないのでなんとかする。

KuniJiban 国土地盤情報検索サイト

キーワードによる検索も可能だが、愛媛県に絞った検索は難しい。そこで「四国地方整備局」のキーワード検索の結果を、スクレイピングでぶっこ抜いた情報から、愛媛県だけを取り出してMy Mapsにプロットしてみる。
検索結果は約100ページ。取得にはiMacrosを使用する。ブラウザの操作を自動化するアプリで、「画面を保存して[>次へ]ボタンを押す」といった操作が自動化できる。

iMacrosの使い方 コマンド徹底解説

[ページめくりマクロの例]
VERSION BUILD=8890130 RECORDER=FX
TAB T=1
SET !EXTRACTTESTPOPUP NO
SET !LOOP 1
WAIT SECONDS=5
TAG POS=1 TYPE=TABLE ATTR=ID:searchResult EXTRACT=TXT
SAVEAS TYPE=HTM FOLDER=* FILE=+{{!NOW:yyyymmddhhnnss}}
TAG POS=1 TYPE=A ATTR=TXT:次へ>

この例だと、ページ毎のhtmlファイルが、ドキュメントフォルダのiMacros\Downloadsに保存される。htmlファイルは拡張子をEXCELのxlsに変更するだけで、テーブルのフォーマットを保ったまま、EXCELできれいに読み込めるのでいい感じに整形する。検索すれば複数のEXCELのBOOKをを結合する方法はいろいろあるが、最悪手作業でコピペ。
ちなみにハイパーリンクのURLが欲しい場合、マクロを使用しないと抜き出せないようだ。
'セル内のハイパーリンクの抜き出し関数
Function GetHyperlink(sRange As Range) As String
    Dim sp As Shape
    If sRange.Hyperlinks.Count > 0 Then
        GetHyperlink = sRange.Hyperlinks(1).Address
    End If
    For Each sp In ActiveSheet.Shapes
        If sRange.Address = sp.TopLeftCell.Address Then
            GetHyperlink = GetHyperlink & vbLf & sp.Hyperlink.Address
        End If
    Next
End Function

また、60進数の緯度経度が使用されているので、10進数に変換しておく必要もある。
=LEFT(E2,FIND("°",E2)-1)+MID(E2,FIND("°",E2)+1,FIND("′",E2)-FIND("°",E2)-1)/60+MID(E2,FIND("′",E2)+1,FIND("″",E2)-FIND("′",E2)-1)/3600
といった手間暇をかけてCSVに落とし込む。
ボーリングID,事業名,調査名,機関名称,緯度(60進),経度(60進),緯度(10進),経度(10進),掘進長(m),孔口標高(m),柱状図URL,土質試験結果URL,XML SK50337475003,,昭和63年度赤之井橋地質調査業務,松山河川国道事務所,33°59′10.2980″,133°33′39.0450″,33.9861939,133.5608458,13.5,18.6,http://www.kunijiban.pwri.go.jp/column/?xml=/SK/DATA/BEDSK50337475003.XML,,http://www.kunijiban.pwri.go.jp/data/SK/DATA/BEDSK50337475003.XML
SK50337485001,,昭和60年度川之江三島バイパス測量及び実施設計業務委託,松山河川国道事務所,33°59′14.5980″,133°33′56.5440″,33.9873883,133.5657067,10.15,15.67,http://www.kunijiban.pwri.go.jp/column/?xml=/SK/DATA/BEDSK50337485001.XML,,http://www.kunijiban.pwri.go.jp/data/SK/DATA/BEDSK50337485001.XML
SK50337495001,,昭和54年度11号線道設置に伴う地質調査,松山河川国道事務所,33°59′57.1930″,133°33′48.0430″,33.9992203,133.5633453,22.5,5.09,http://www.kunijiban.pwri.go.jp/column/?xml=/SK/DATA/BEDSK50337495001.XML,,http://www.kunijiban.pwri.go.jp/data/SK/DATA/BEDSK50337495001.XML
SK50337631001,,鮎戸瀬地区地すべり調査外1件,徳島河川国道事務所,33°56′57.2290″,133°45′53.8840″,33.9492303,133.7649678,21,188.5,http://www.kunijiban.pwri.go.jp/column/?xml=/SK/DATA/BEDSK50337631001.XML,,http://www.kunijiban.pwri.go.jp/data/SK/DATA/BEDSK50337631001.XML

しかしこのデータには、愛媛県をダイレクトに識別できる情報が位置情報しかないので、QGISを使って空間演算により愛媛県のみを切り出す。

QGISのプロジェクトの空間参照システムは、距離を使用するので、JDG2000/CS IV(EPSG:2446)にしておく。

行政区域データは、せっかくなので全国版のデータをダウンロードして、愛媛だけ切り出して使用する。

国土数値情報 行政区域データの詳細

ボーリング柱状図のCSVファイルの読み込みについては下記を参照。データの空間参照システムはJDG2000(EPSG:4612)。たぶん。

4.位置情報付きCSVファイルの読み込み - QGIS入門

両方を読み込んだ状態。

[属性テーブルを開く]から愛媛県の行政区ポリゴンの選択する。きれいに並んでいるので単純に選択すれば済むのだが、無駄に[式を使った地物選択]を使ってみる。こんな感じ。

愛媛県のすべての行政区ポリゴンが選択できるので、[編集]-[地物のコピー]&[編集]-[新規レイヤへの地物貼り付け]-[新規ベクタレイヤ]にする。

このままだと、愛媛県の境界にぎりぎり入っていない場所や海中が拾えないので、境界線を5km広げる。
[ベクタ]-[空間演算ツール]-[バッファ]を選択する。空間参照システムはJDG2000/CS IV(EPSG:2446)にする。

CSVから読み込んだボーリング位置は、そのままだと空間演算に使用できなかったので(5kmを分秒で指定すればいける?)、一度Shapeファイルに書き出す。レイヤーを右クリックして[名前を付けて保存]。空間参照システムはJDG2000/CS IV(EPSG:2446)にする。
切り出す。[ベクタ]-[空間演算ツール]-[クリップ]を選択する。

切り出し完了。

あとはレイヤー(clip)を、[名前を付けて保存]から形式をCSVで保存し、Googleドライブにアップロードする。
下記のマイマップで、位置をGoogleドライブからインポートする。Google Mapの空間参照システムはWGS 84(EPSG:4326)だが、JDG2000とほとんど変わらないそうなので、10進に変換した緯度経度のカラムをそのまま使用した。もしかすると元のデータがJDG2000ではなくWGS 84なのかも?

マイマップ

下記が大変参考になる
カッパ出没マップを作成する

0 件のコメント:

コメントを投稿