R による地理情報のデータビジュアライゼーション (1)

# 地理情報の前提知識

まずは基本的な知識についてざっと引用します。

## GIS

GIS とは Geographic Information System の略で、『ジー アイ エス』または『地理情報システム』と呼ばれています。地理情報（Geographic Information）という、位置に関連づけられた様々な情報を、作成、加工、管理、分析、可視化、共有するための情報技術（IT：Information Technology）です。
※ 引用元、参照 http://www.esrij.com/getting-started/what-is-gis/

## シェープファイル

シェープファイル（ESRI Shapefile）は、ESRI社の提唱した、公開されたベクタデータの業界標準フォーマットです。
ESRI・ERDAS製品はもちろん、多くのGISソフトウェアで利用が可能です。
しかし、無料のソフトを用いてシェープファイルの編集・加工をすることは（一部のソフトを除いて）できませんが、Rでは shapefiles, maptools, sp, rgdal を用いてシェープファイルの編集・加工をすることが可能です。

※ 引用元、参照 http://www.okada.jp.org/RWiki/?ShapeFile%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA

またシェープファイルのわかりやすい解説はこのあたりが良いでしょう。
http://tricolorcat.web.fc2.com/Shape/

## OpenStreetMap

OpenStreetMap(OSM)は、道路地図などの地理情報データを誰でも利用できるよう、フリーの地理情報データを作成することを目的としたプロジェクトです。誰でも自由に参加して、誰でも自由に編集でき、誰でも自由に利用する事が出来ます。本サイトは、日本語での情報提供や相互互助の支援を行っています。 編集は、本家サイトOSM.orgで行うことができます。

※ 引用元、参照 http://osm.jp/

# R で地理情報を利用する

次の例がわかりやすいでしょう。

Maps in R -- Examples
http://geog.uoregon.edu/geogr/topics/maps.htm

地図とビットマップ画像を重ねる
http://kenpg.seesaa.net/article/371900371.html

## R と maptools による地理情報の利用

### セットアップ

前提となる gpclib をシステムに用意する。

```bash
apt-get install libgpcl-dev
```

R のパッケージを入れる。

```r
install.packages('gpclib')
install.packages('maptools')
```

### シェープファイルの描画

インターネット上にさまざまなシェープファイルが公開されているのでこれを利用します。

```r
library(maptools)
shp <- readShapePoly("tokyo.osm-polygon.shp")
png("image.png")
plot(shp)
dev.off()
```

![graphic.png](https://qiita-image-store.s3.amazonaws.com/0/38501/6e31eb84-c0a3-6e0d-4496-54e645147f75.png)


## ggplot2 + maps による描画

参考 http://blog.goo.ne.jp/xmldtp/e/040c246067f177b432dfdd71f3369b9c

maps ライブラリは大雑把に地形を描くことができます。国、都市くらいのおおまかな地図なら maps が使えます。

上記の例に沿って台風の進路情報を地図上にプロットして可視化します。

```r
# ライブラリを読み込む
library(ggplot2)
library(maps)

# 緯度経度を指定する
map(xlim=c(121, 155), ylim=c(20, 50))

# データ取り込み (気象庁のデータを読み込む)
bst <- readLines('http://www.jma.go.jp/jma/jma-eng/jma-center/rsmc-hp-pub-eg/Besttracks/bst2013.txt')

# 加工
header <- read.table(textConnection(bst[grep("^66666", bst)]))
record<-read.table(textConnection(bst[-grep("^66666", bst)]),fill=TRUE)
record<-record[!is.na(record[,7]),]
header<-header[ , c(3,4,8)]   
names(header) <- c("NROW", "TC_NO", "NAME")
record<-record[ , c(1,3:7)]   
names(record) <- c("DATE_TIME", "GRADE", "LAT", "LON", "HPA", "KT")
record$TC_NO <- rep(header$TC_NO, header$NROW)
data <- merge(header, record, by = "TC_NO")
data <- transform(data, LAT = LAT / 10, LON = LON / 10)

# ビジュアライゼーション
range_lon<-range(data$LON)
range_lat<-range(data$LAT)
range_lon
range_lat

map<-data.frame(map(plot=FALSE,
xlim=c(range_lon[1]-10, range_lon[2]+10),
ylim=c(range_lat[1]-5, range_lat[2]+5))[c("x","y")])

ggplot(data, aes(LON, LAT, colour = NAME)) +
geom_point(aes(size = GRADE)) +
geom_path(aes(x, y, colour = NULL), map)

ggplot(data, aes(LON, LAT, colour = NAME)) +
geom_point(aes(size = GRADE), shape = 1, alpha = 0.5) +
geom_path() +
geom_path(aes(x, y, colour = NULL), map)

p <- ggplot(data, aes(LON, LAT, colour = NAME)) +
geom_point(aes(size = GRADE)) +
geom_path(aes(x, y, colour = NULL), map)
ggsave("image.png",p)
```

![test.png](https://qiita-image-store.s3.amazonaws.com/0/38501/3eac8f50-2390-06c7-3169-22f399b96bd5.png)

## まとめ

ひとまず R で地理情報を扱うための前提をざっくりと紹介しました。