国境線/海岸線/都市
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

↑この図では、各国/島の中心位置が+で表示されているのがうざいので、 こんどは海岸線と国境だけ表示しよう:
d.erase d.vect border type=boundary > /dev/null 2>&1

国別のラスターマップを作る
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 # 都市名の表示。

もっとたくさんの都市を登録するには....
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
これを、上と同様にして登録すれば良い。 注: ラベルなどに"(ダブルクオート)が入っていると、きちんと認識されない。
Keyword(s):
References:[GIS入門]