とらりもんHOME  Index  Search  Changes  Login

ベクターデータの処理: 都道府県の範囲と境界

筑波大学農林工学系 西田顕郎

はじめに

 これまで主にラスターデータの処理を学んできたが、GISの解析にはベクターデータも大切である。特に、以下のような情報は、通常、ベクターデータとして提供される:

  • 気象観測所の位置
  • 海岸線
  • 道路や鉄道、河川などのネットワーク
  • 国や県、自治体などの範囲

このようなデータすべてをカバーするためには、ベクターデータの構造からきちんと学ばねばならないが、本講義ではもう時間があまり無いので、ここでは、都道府県の範囲を例にとって、ベクターデータの処理の一端を学ぼう。というのも、都道府県のような行政単位は、実際の施策(環境政策など)の行われる単位であるため、環境調査にかかわる地理情報処理では、県境などの行政界のデータは頻繁に使われる。

ベクターデータとは

shapeファイルのインポート

shapeファイル(shape形式)というのは、ESRI社のArc-View(Arc-GIS)でベクターデータを表現するためのフォーマット(ファイル形式)である。shape形式は、ベクターデータのフォーマットとしては、事実上の業界標準であり、様々なデータがshape形式で作成/配布されている。

ここでは、日本の各県の県境や海岸線を表現したshapeファイルをGRASSに読み込んでみよう。

1. まず、GRASSを起動し、前回まで使っていたLOCATION "latlon"に入る:

grass57

2. 次に、茨城県の県境ベクターデータを以下からダウンロードする。RjpWiki ShapeFileライブラリというページの下のほうに、「ShapeFileデータ (地域境界・地域メッシュ)」という部分があり、そこに

08 茨城県 ibaragi.zip ibaragik.zip

という部分がある。この右のやつ、つまりibaragik.zipをクリックしてダウンロードしよう。ダウンロードしたファイルは、~/や、~/Desktopや、/tmpなどに置かれる。必要に応じて、カレントディレクトリにmvしよう。

3. 県境ベクターデータを解凍する:

unzip ibaragik.zip

4. GRASSにインポートする:

v.in.ogr dsn=./ibaragik/ibaragik output=ibaragik -o
(または、v.external dsn=./ibaragik/ibaragik layer=ibaragik output=ibaragik)

※2つは同じようなコマンドだが、v.extarnalで作成したデータは、読み取り専用である。

そのため、後に紹介するv.to.rastというコマンドが使えない。

ベクターデータの取扱い

上でインポートしたベクターデータを表示してみよう:

g.region vect=ibaragik
d.mon x0
d.vect ibaragik

d.zoomで適当に範囲を拡大・調整すること。

ibaragik.png

ここで、中央付近に×のマークが表示されている。これは"centroid"と呼ばれるものである。一般に、線で囲まれた領域(ポリゴンと呼ばれる)は、その中のある地点で代表することが多い。centroidはそのための点であり、たいていはそのポリゴンの重心がcentroidとされる。

これをさらに拡大してみよう:

d.zoom
ibaragik_s.png

どんなに拡大しても、県境線や海岸線はぎざぎざにならないことに注意しよう。普通、数値地形モデル(DEM)や衛星画像などのラスターデータは、拡大すると個々のピクセルが目立ち、ぎざぎざに見えてしまう。つまり、ピクセルの大きさ(解像度)よりも細かい構造は表現されない。しかし、ここで我々が見ている茨城県のデータは「ベクターデータ」であり、ベクターデータはどんなに拡大してもぎざぎざは見えない。「解像度」という概念がそもそも存在しないのである。

実は、ベクターデータは、地理情報を、幾何学的な構成要素のあつまりで表現するからこういうことになるのである。幾何学的な構造、つまり直線、円弧、多角形などは、いくつかの点の位置と、それを相互に結ぶ線を近似的に表す数学関数との組合せで表現できる。数学的には、点は大きさを持たないし線は幅を持たない。なので、どんなに拡大しても、そのたびに、点や線は書き直されるため、ぎざぎざは発生しない。

面積をしらべてみよう:

v.to.db -p map=ibaragik option=area column=1

すると次のような結果が表示される。

cat|area 0|6099245032.700148 

県境だけを描こう:

地形などのラスターデータを表示するとき、県境線が重ねて表示されると、見やすくなる。そのようなことをしたい場合、県をポリゴンとして描くのではなく、その境界(boundary)だけを描くようにしたい。それはこのようにする:

   d.erase
   d.vect ibaragik type=boundary
ibaragik_boundary.png

ベクターからラスターへの変換

 ベクターデータは、解像度に依存しないという利点を持つが、他のラスターデータと組み合わせて使う際には、そのままでは操作が面倒であることが多い。たとえば、日本全国の土地被覆に関するデータから、茨城県の部分だけを抽出しようとすると、茨城県の範囲をあらわすデータがまず必要になるが、そのデータはベクターよりもむしろラスターであるほうが便利である。

そこで、上で扱った茨城県のベクターデータを、ラスターデータに変換しよう。

v.to.rast input=ibaragik output=ibaragik col=CAT

※grass7.0.3では"col=CAT"ではなく"use=cat"としたほうが上手くいきます。(追記:2018/02/12 菊島)

できたラスター画像を表示してみよう:

d.rast ibaragik
ibaragik_rast.png

d.what.rastで確認すればわかるが、このラスター画像は、茨城県内はゼロ、県外はNullを値に持つ。

関東全域をやってみよう...

同様のことを、他の関東都県についても行ってみよう。まずShapeFileライブラリから、以下をダウンロードする(リンク切れしている模様です。追記:2018/02/12 菊島):

tochigik.zip

gunmak.zip

saitamak.zip

chibak.zip

tokyohk.zip

kanagawk.zip

そして以下のコマンドを実行する:

g.region w=138 e=141 n=38 s=34 res=0.002
d.erase
for i in chibak gunmak ibaragik kanagawk saitamak tochigik tokyohk; do
unzip $i.zip
v.in.ogr dsn=$i output=$i -o
d.vect $i
v.to.rast input=$i output=$i col=CAT
done

これらのデータを使って、前回の衛星画像(MODIS)に県境線を入れて表示してみよう:

g.region rast=MODIS_Tokyo_2000_121_b01
d.erase
d.rgb red=MODIS_Tokyo_2000_121_b01 blue=MODIS_Tokyo_2000_121_b03 green=MODIS_Tokyo_2000_121_b04
for i in chibak gunmak ibaragik kanagawk saitamak tochigik tokyohk; do 
d.vect $i type=boundary color=yellow
done
Kanto_vect.png

その他のおもなベクトルデータ

(2015/12/16 追記 ※以下のzipデータはダウンロードはできるが、解凍できない。おそらくリンク切れしている)

日本の交通網(道路や鉄道,トンネル): GlobalMap

mkdir transl_1_1
cd transl_1_1
wget http://www.globalmap.org/download/data/shp/1_1/transl_1_1.zip
unzip transl_1_1.zip
mv transl_1_1.zip ..
v.in.ogr dsn=. output=transl -o > /dev/null 2>&1
d.vect transl
v.to.rast input=transl output=transl col=RTT --o > /dev/null 2>&1
d.rast transl
transl_vect.png transl_rast.png

日本の水系網(河川やダム): GlobalMap

wget -c http://www1.gsi.go.jp/geowww/globalmap-gsi/download/hydrol.zip
mkdir hydrol
unzip hydrol.zip
mv hydrol.* hydrol/
v.in.ogr dsn=./hydrol output=hydrol -o > /dev/null 2>&1
for i in chibak gunmak ibaragik kanagawk saitamak tochigik tokyohk; do d.vect $i type=boundary; done
d.vect hydrol color=blue > /dev/null 2>&1
river_vect_Kanto.png

世界の国別のマスク: http://www.diva-gis.org/gdata

以下のように読み込み・ラスター変換可能
v.in.ogr dsn=./IDN_adm0.dbf output=Indonesia --o
g.region vect=Indonesia
v.to.rast input=Indonesia output=Indonesia col=CAT

その他のGlobalMapのベクターデータ: 

地球地図 日本の地球地図データ

更新情報

2014/06/25 筑波大学 牧野 悠 2015/12/16 筑波大学 片木 仁

Last modified:2018/02/12 16:13:49
Keyword(s):
References:[GIS入門]