とらりもんHOME  Index  Search  Changes  Login

国境線/海岸線/都市

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

国土数値情報

v.in.asciiのオンラインマニュアル

shapeファイルのインポート

ここでは、世界の海岸線と国境線を表現したshapeファイルをGRASSに読み込んでみよう。

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

grass57

フリーの海岸線/国境データをダウンロードして展開する:

wget -c http://mappinghacks.com/data/world_borders.zip
unzip world_borders.zip

(※2015/12/16 追記 上記URLはリンク切れしている)

すると、以下の3つのファイルが現れるはずである:

world_borders.shp   ... 図形情報 (海岸線を構成する点の座標など)
world_borders.dbf   ... 属性情報 (国名など)
world_borders.shx   ... 図形情報と属性情報の対応関係

このように、shape形式のベクターデータは、3つのファイルで構成される。

海岸線/国境データをGRASSに読み込む:

v.external dsn=./ layer=world_borders output=border > /dev/null 2>&1

ちなみに、↑の > /dev/null 2>&1という部分を省略すると、コマンドの実行中に コンソールに大量にメッセージや情報が表示されて、処理が遅くなってしまう (ためしてみよ)。

読み込んだベクターデータ"border"の情報をみる:

v.info border
+----------------------------------------------------------------------------+
| Layer:    border                         Organization:                     |
| Mapset:   PERMANENT                      Source Date:                      |
| Location: latlon                         Name of creator:                  |
| Database: /homegis/rs02                                                    |
| Title:                                                                     |
| Map Scale:  1:1                                                            |
| Map format: ogr                                                            |
|----------------------------------------------------------------------------|
|   Type of Map:  Vector (level: 2)                                          |
|                                                                            |
|   Number of points:       0               Number of areas:      3797       |
|   Number of lines:        0               Number of islands:    3797       |
|   Number of boundaries:   3797            Number of faces:      0          |
|   Number of centroids:    3784            Number of kernels:    0          |
|                                                                            |
|   Map is 3D:              0                                                |
|   Number of dblinks:      1                                                |
|                                                                            |
|   Projection: Latitude-Longitude (zone 0)                                  |
|            N: 83.624        S: -90.000                                     |
|            E: 180.000       W: -180.000                                    |
|            B: 0.000          T: 0.000                                      |
|                                                                            |
|   Digitize threshold: 0.00000                                              |
|   Comments:                                                                |
|                                                                            |
+----------------------------------------------------------------------------+

↑このうち、centroidというのは、各ポリゴン(国や島)の中心(重心)位置であり、そのポリゴンの代表点である。 国境線や海岸線のデータとしては不要である。

つぎに、ベクターデータ"border"を、地図として表示する:

d.mon x0
d.vect border > /dev/null 2>&1
border.png

↑この図では、各国/島の中心位置が+で表示されているのがうざいので、 こんどは海岸線と国境だけ表示しよう:

d.erase
d.vect border type=boundary > /dev/null 2>&1
border_line.png

国別のラスターマップを作る

v.what.rast border

によって、国別のカテゴリーはCATというカラムに入っていることがわかる。そこで、

v.to.rast input=border output=country col=CAT
d.rast country

pointデータの作成と登録

最もシンプルなvectorデータは、pointデータ、すなわち、点のデータである。pointデータを作成し、GRASSに読み込む実習として、世界の大都市(300万人以上)の位置と名前を処理してみよう。

1. 都市のpointデータの作成する。以下の内容を、テキストファイル"cities_GRASS.txt"に作成せよ。

120.97|14.62|Manila
121.47|31.23|Shanghai
106.83|-6.18|Jakarta
116.40|39.93|Beijing
103.85|1.30|Singapore
129.03|35.11|Pusan

2. 登録

cat cities_GRASS.txt | \
v.in.ascii out=city xcol=1 ycol=2 columns='x double, y double, label varchar(40)'

3. 表示

d.rast GTOPO_E100N40                     # 地形データの表示
d.vect border type=boundary                   # 海岸線と国境線の表示
d.vect city                              # 都市の位置をマークで表示。
d.vect city display=attr attrcol=label   # 都市名の表示。 
SE_Asia_vector.png

もっとたくさんの都市を登録するには....

wget -c http://mappinghacks.com/data/cities.txt

このデータは、2バイト文字を含んでいたり、htmlタグを含んでいたりするので、扱いにくい部分を置換したりそぎおとす:

tail +2 cities.txt | \ 
perl -pe 's/\r\n/\n/' | \
sed 's/"//g' | \
sed 's/ /-/g' | \
sed 's/ã/a/g' | \
sed 's/á/a/g' | \
sed 's/ā/a/g' | \
sed 's/ġ/g/g' | \
sed 's/è/e/g' | \
sed 's/é/e/g' | \
sed 's/í/i/g' | \
sed 's/İ/I/g' | \
sed 's/Ō/o/g' | \
sed 's/ō/o/g' | \
sed 's/ŏ/o/g' | \
sed 's/ā/a/g' | \
sed 's/ş/sh/g' | \
sed 's/ū/y/g' | \
sed 's/ū/y/g' | \
sed 's/−//g' | \
grep -v '&' | \
grep '.' | \
awk '$(NF-2)>3000000 {print $NF"|"$(NF-1)"|"$1}' > cities_GRASS.txt こうして作成したpointデータ

(cities_GRASS.txt)は、以下のようなテキストファイルになっている: 7

2.82|18.96|Mumbai 
-58.37|-34.61|Buenos-Aires 
67.01|24.86|Karachi
120.97|14.62|Manila
77.21|28.67|Dilli
-46.63|-23.53|Sao-Paulo
126.99|37.56|Soul
28.96|41.01|Istanbul
121.47|31.23|Shanghai
90.39|23.70|Dhaka
106.83|-6.18|Jakarta
-99.14|19.43|Mexico
37.62|55.75|Moskva
3.47|6.45|Lagos
139.77|35.67|Tokyo
-77.05|-12.07|Lima
-73.94|40.67|New-York
31.25|30.06|al-Qahira
51.43|35.67|Tehran
-0.10|51.52|London
-74.09|4.63|Bogota
116.40|39.93|Beijing
100.50|13.73|Krung-Thep
15.32|-4.31|Kinshasa
-43.20|-22.91|Rio-de-Janeiro
44.44|33.33|Bagdad
74.35|31.56|Lahore
88.36|22.57|Kolkata
30.32|59.93|Sankt-Peterburg
-79.38|43.65|Toronto
77.56|12.97|Bengalyru
80.27|13.09|Chennai
-70.64|-33.46|Santiago
96.15|16.79|Yangon
117.20|39.13|Tianjin
151.21|-33.87|Sydney
103.85|1.30|Singapore
114.27|30.58|Wuhan
-118.41|34.11|Los-Angeles
72.58|23.03|Ahmadabad
144.96|-37.81|Melbourne
78.48|17.40|Haidarabad
123.45|41.80|Shenyang
129.03|35.11|Pusan
139.62|35.47|Yokohama
113.25|23.12|Guangzhou
32.85|39.93|Ankara
-4.03|5.33|Abidjan
106.69|10.78|Thanh-Pho-Ho-Chi-Minh
-7.62|33.60|ad-Dar-al-Bayda
8.52|12.00|Kano
13.38|52.52|Berlin
-73.57|45.52|Montreal
-3.71|40.42|Madrid
3.93|7.38|Ibadan
112.74|-7.24|Surabaya
これを、上と同様にして登録すれば良い。 注: ラベルなどに"(ダブルクオート)が入っていると、きちんと認識されない。 
Last modified:2015/12/16 13:36:13
Keyword(s):
References:[GIS入門]