ruby-robotの夢

cygwin-ruby,qgisの達人を目指す奮闘記

QGISで国土基盤地図データの簡単な活用

様々な地域の業務でQGISを用いているが、基盤地図情報のshpを全て取り込み、項目別に色設定をするのは結構大変な作業である。

手順毎の合理的な方法について記載する。

①ダウンロード

ダウンロードサイトにて、2次メッシュを設定する。

事前に、必要な範囲を、国土数値情報のN03市区町村界、W12流域界、A11浸水想定区域等、メッシュ分割レイヤを重ねてtxtに記載しておく。

ダウンロードサイトでメッシュ番号を書き込んで、まとめてPackDL。

これは比較的容易。対角線の2次メッシュから、メッシュリストの取得は、下式で。(2019/10/21追加)

#corner diagonal LeftBttm-RightTop or LeftTop-RightBtm
ch2c=["543915","554054"] #example
ch2ci=ch2c.map{|ch2| ch2.unpack("a2 a2 a1 a1").map(&:to_i)}
ics=ch2ci.map{|i1,j1,i2,j2| i1*8+i2}.sort
jcs=ch2ci.map{|i1,j1,i2,j2| j1*8+j2}.sort
chs=Range.new(*ics).map{|i| i1=i/8;i2=i%8;
Range.new(*jcs).map{|j| j1=j/8;j2=j%8;"%02d%02d%1d%1d" % [i1,j1,i2,j2]}}

print *chs.flatten*"," #for download service

②解凍

 2次メッシュ単位のzipに分けて、レイヤ別にするため、さらに解凍し、レイヤ別のxmlに解凍する。

 cygwin-bashで、 for z in *.zip;do unzip -o $z;done #-o:overwrite no prompt

③レイヤ別のフォルダ分け

 レイヤ名フォルダに、全メッシュのデータを集める。

 次のようなrubyで自動化。

typs=%w[AdmArea AdmBdry AdmPt ALL BldA BldL Cntr CommBdry CommPt Cstline
  ElevPt GCP RailCL RdCompt RdEdg WA WL WStrA WStrL SBAPt SBBdry]
typs.each{|typ|
   fs=Dir.glob("kiban_2500/PackDLMap/*-#{typ}-*.xml")
  odir="kiban_2500/#{typ}"
  FileUtils.makedirs(odir)
  fs.each{|fb|
    f=File.basename(fb)
    File.rename(fb,"#{odir}/#{f}")
   }
}

④レイヤ別に、Vectorデータ統合

 pythonマクロの使い方を知らないので、手作業で。

 あらかじめ、作成するshpファイル名を入力しないで、ファイル選択できるように、

 レイヤ名(上のtyps).shpという名の空ファイルを作成しておく。 

⑤レイヤ別にスタイル設定

 業務ごとに、作成するファイル名は共通のため、別の業務で設定した基盤地図用のレイヤスタイル設定されたqgzファイルをそのまま使う。