Rmapを使った地図表示
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
COLOR(red){SIZE(30){Rmapを使った地図表示}}
[[Rmap:http://www.maths.lancs.ac.uk/Software/Rmap/]]はR...
http://spatial.nhh.no/R/Devel/
Rmapは多数の地図フォーマットをサポートし((Windowsバイナ...
ここでは、日本でも普及しているESRI シェープファイル((シ...
#contents
* Windows でのインストール [#x4300e2a]
バイナリ版は zipファイルをインストールして、shapelib.dl...
より入手して、R のインストールされたディレクトリのbinディ...
* パッケージのロード [#p3df5069]
Rmapインストール後、パッケージをロードします。
library(rmap)
* シェープファイルの所在 [#o2387631]
- 世界
-- [[DataServer: Free maps and GIS data
:http://www.diva-gis.org/data/DataServer.htm]] 世界各国
-- [[Shapefiles for Epi Info:http://www.cdc.gov/epiinfo/s...
- アメリカ
-- [[アメリカ地質調査所のナショナルアトラス(国勢地図帳)...
-- ESRI - Geography Network
- 日本
-- [[統計GISプラザ:http://gisplaza.stat.go.jp]]
シェープファイル形式の町丁字界とCSV形式の人口・世帯デー...
-- [[地球地図日本:http://www1.gsi.go.jp/geowww/globalmap-...
*変換ツール [#sfef0a08]
** 数値地図データ変換ツール(試用版) [#c722dc36]
50mメッシュ標高・250mメッシュ標高・1kmメッシュ標高/平均...
10,000総合・25,000行政界・海岸線をシェープファイルに変換
http://www.esrij.com/products/smap/index.shtml
**数値地図2500変換ツール(sdf2ogr) [#yf366326]
[[国土地理院::数値地図(空間データ基盤)の閲覧(試験公開):...
[[sdf2ogr:http://www.max.hi-ho.ne.jp/scream/sdf2ogr.html]]
*属性データ [#m26365b7]
[[GISで利用可能なRパッケージ内データ]]
* シェープファイルのロード [#o32131ab]
シェープファイルの読み込みは以下のようになります。
mySF <- shapefile("シェープファイル名(例:columbus.shp")
ここでは、例として以下のサイトより無償で入手できる日本...
http://www.esrij.com/gis_data/japanshp/japanshp.html
上のサイトより、ファイルをダウンロード・解凍後、以下の...
jpn <- shapefile("ダウンロード先/japan_jdg.shp")
シェープファイル読み込み時に以下のようなメッセージが出...
Warning message:
Invalid names in DBF file, new names are:
P_NUM is now P.NUM
H_NUM is now H.NUM
in: dbfproxy(dbf)
上で、DBaseのフィールドのうち、フィールド名に"_"を含ん...
* 地図の表示 [#s571ab32]
表示の方法は以下のとおりです。
plot(jpn)
以下の図1に表示の例を示します。
#ref(jpnmap.jpg,center)
CENTER: 図1 地図の表示例
単一色で塗りつぶすには、以下のように(赤色)します。
plot(jpn, f="red")
以下の図2に表示の例を示します。
#ref(jpnmapInRed.jpg,center)
CENTER: 図2 地図の表示例(赤で塗りつぶした場合)
* エクステント [#t9945978]
bnd<-defaultextent(jpn)
xmin<-bnd[1,1]
ymin<-bnd[1,2]
xmax<-bnd[2,1]
ymax<-bnd[2,2]
* 属性の表示 [#z2f8be24]
属性のフィールドの表示は以下のようにします。
names(jpn)
上のコマンドの実行結果は以下のとおりです。
[1] "PREF" "CITY1" "CITY2" "TOWN1" "TOWN2" "JCODE" "P.N...
[10] "FLAG2"
属性情報を一覧表示するには、以下のようにします。
as.data.frame(jpn)
属性情報の一覧表示は以下のようになります((今回使用した...
PREF CITY1 CITY2 TOWN1 TOWN2 JCODE P...
1 北海道 稚内市 稚内市 1214 4...
2 北海道 礼文町 礼文郡 礼文町 1517 ...
3 北海道 豊富町 天塩郡 豊富町 1516 ...
4 北海道 利尻富士町 利尻郡 利尻富士町 1519 ...
5 北海道 利尻町 利尻郡 利尻町 1518 ...
6 北海道 幌延町 天塩郡 幌延町 1488 ...
7 北海道 枝幸町 枝幸郡 枝幸町 1514 ...
8 北海道 中頓別町 枝幸郡 中頓別町 1513 ...
9 北海道 歌登町 枝幸郡 歌登町 1515 ...
10 北海道 天塩町 天塩郡 天塩町 1487 ...
都道府県名のフィールド PREF を使って、北海道だけを抽出...
hokkaido<-jpn[jpn$PREF == "北海道"]
表示は図3のようになります。
#ref(hokkaidomap.jpg,center)
CENTER: 図3 北海道の表示
南関東のみを扱いたければ次のようになります。
minamiKanto<-jpn[jpn$PREF == "埼玉県" | jpn$PREF == "千...
表示は図4のようになります。
#ref(minamikantomap.jpg,center)
CENTER: 図4 南関東の表示
*DBase のみのロード [#k728a05f]
db <- dbfproxy("("ダウンロード先/japan_jdg.dbf")
属性値の地理扱いは前の節を参照のこと
*Excelなどの他の属性データと地図の関係付け [#n4c43732]
match 関数を利用
* 地図投影変換の方法 [#i6af3c6d]
Rmap は100以上の地図投影法をサポートしています。
上の日本の行政界の地図は、座標は緯度経度で、測地系はJGD...
日本全図を表現するのに使用されている正距円錐図法(2標...
plot(jpn,proj="+proj=eqdc +ellps=GRS80 +units=m +lat_0=3...
投影変換結果をオブジェクトにするには
現状では投影変換の出力をシェープファイルなどの外部形式...
上の"proj"のパラメータの指定は以下のとおりです((パラメ...
- proj=地図投影法
- ellps=回転楕円体
- units=距離の単位
- lon_0=中心経度
- lat_0=中心緯度
- lat_1=第1標準緯線
- lat_2=第2標準緯線
表示は図5のようになります。
#ref(jpnmap_eqdc.jpg,center)
CENTER: 図5 正距円錐図法による投影変換
*拡大表示 [#df88eb72]
splancs の zoom 関数を利用して、表示したい領域の対角線上...
* コロプレス図(色分け主題図)の表示方法(([[RColoBrewer:h...
コロプレス図で連続量を扱う場合、以下の表示方法がありま...
** ユーザ定義の階級区分 [#tc8dd94c]
hokkaidoPop <- hokkaido$P.NUM
classes <- c(5000,10000,50000,100000,500000,1000000)
breaks <- length(classes) + 1
classNo <- hokkaidoPop < classes[1]
for(i in 1:(breaks - 1))
classNo <- classNo + (hokkaidoPop >= classes[i] & hokk...
classNo <- classNo + (hokkaidoPop >= max(classes)) * bre...
plot(hokkaido, f=gray(1 - classNo/breaks)) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(userDefinedHokkaido1.png,center)
CENTER: 図X ユーザ定義の階級区分(7階級)
** 等間隔 [#r639c697]
rangePop <- range(hokkaido$P.NUM)
breaks<-6 # 階級数
classNo <- trunc((hokkaido$P.NUM -rangePop[1])/(diff(ran...
classNo[classNo == breaks] <- breaks - 1
hist(classNo)
plot(hokkaido,f=gray(1 - classNo/breaks)) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(equalsizehokkaido.png,center)
CENTER: 図X 等間隔(6階級)
** 等サイズ [#q6b6438d]
breaks<-6 # 階級数
classNo <- trunc(rank(hokkaido$P.NUM)/(dim(hokkaido)[1] ...
classNo[classNo == breaks] <- breaks - 1
hist(classNo)
plot(hokkaido,f=gray(1 - classNo/breaks)) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(quantilehokkaido.png,center)
CENTER: 図X 等サイズ(6階級)
** 標準化 [#f5951fbc]
sd <- 1
pal <- cm.colors(8 / sd)
classNo <- trunc(scale(hokkaido$P.NUM) + 4 / sd) + 1
classNo[classNo <= 0] <- 1
classNo[classNo > (8 / sd)] <- (8 / sd)
hist(classNo)
plot(hokkaido,f=pal[classNo]) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(standardhokkaido.png,center)
CENTER: 図X 標準化
** 自然階級分類(Jenk's Natural Break) [#m209d952]
** 空間的コンテクストを考慮した階級区分 [#j66aa5ff]
** 未分類 [#lb02b6ba]
rangePop=range(hokkaido$P.NUM)
plot(hokkaido,f=gray(1 - (hokkaido$P.NUM - rangePop[1])/...
lines(hokkaido, col="red") #アウトラインを描く
#ref(unclassedhokkaido.png,center)
CENTER: 図X 未分類
**凡例表示 [#f7f3d8c3]
***legend関数 [#gc62fd70]
***layout関数 [#p5575b80]
** 階級分類の評価 [#te021748]
階級内の差が小さく、階級間の差を大きくする。
評価関数
**二変量のコロプレス図 [#w777c8e8]
**ドットマップ [#e2b3d654]
library(splancs) #splancs パッケージのロード
saitama<-jpn[jpn$PREF == "埼玉県"]
saitama.coords <- polycoords(saitama) #座標取得
np<-length(saitama.coords) #ポリゴンの数
plot(saitama, col="red")
for(i in 1:np)
points(csr(saitama.coords[[i]],as.integer(saitama$P_N...
pch=19,cex=0.1)
#ref(saitama_dotmap.png,center)
CENTER:図 埼玉県の人口のドットマップ(1点千人)
*テキストラベルの表示 [#h688337c]
属性のラベル表示は以下のようにおこないます(ポリゴンの...
まず、ポリゴンの重心を求める関数(Rmapの作者 Barry Rowli...
centroid <- function(poly) {
np<-dim(poly)[1]
poly<-rbind(poly,poly[1,])
# Initialize variables
area <- 0.0
xbara <- 0.0
ybara <- 0.0
for(i in 1:np){
area <- area - ( (poly[i+1,2]-poly[i,2])*(poly[i+1,1]+...
xbara <- xbara - ( ( (poly[i+1,2]-poly[i,2])/8.)*
((poly[i+1,1]+poly[i,1])**2 + ((pol...
ybara <- ybara + ( ( (poly[i+1,1]-poly[i,1])/8.)*
( (poly[i+1,2]+poly[i,2])**2 + ( (p...
}
c( xbara/area, ybara/area)
}
次にテキスト・ラベルを表示します。都市名を表示するので...
hokkaidocity <- hokkaido[hokkaido$JCODE < 1300] #市のみ...
citycoords <- polycoords(hokkaidocity) #各ポリ...
xy<-sapply(citycoords, centroid) #各ポリ...
plot(hokkaido, col="grey") #行政界...
text(xy[1,],xy[2,], labels=hokkaidocity$CITY1, col="red"...
#ref(textlabelshokkaido.png,center)
CENTER: 図X 北海道の都市名の表示
テキスト・ラベルの周囲を矩形で囲むには legend を使用し...
for(i in 1:length(hokkaidocity$CITY1))
legend(xy[1,i],xy[2,i], legend=hokkaidocity$CITY1[i],...
#ref(hoklabellegend.png,center)
CENTER: 図X 北海道の都市名を矩形で囲んで表示
*円ドット図 [#aa0890ff]
coords <- polycoords(hokkaido)
xy<-sapply(coords, centroid)
plot(hokkaido, col="grey")
points(xy[1,],xy[2,], col="blue",cex=2*(hokkaido$P.NUM/m...
#ref(circledothokkaido.png,center)
CENTER: 図X 円ドット図
円の大きさを決めるのに対数を利用する
*等値線図作成 [#g8081553]
**等間隔 [#x4238fb0]
-- contour 表示
-- countourLines 座標値を返す
**不等間隔 [#p3a898b0]
-- akima の intrerp で補間して、contour
-- TIN(ドロネイ)を使ったコンター
*フローデータ [#mcc45ada]
*ポリゴンのオーバーレイ解析 [#kc84a31e]
gpclib を使用
**Union(ポリゴンの合成) [#b9b85e55]
library(gpclib)
osaka<-jpn[jpn$PREF == "大阪府"]
plot(osaka)
#ref(osaka_original.png,center)
CENTER:図XXX 大阪府の各市区町村ポリゴン
osaka.coords <- polycoords(osaka) #座標取得
np<-length(osaka.coords) #ポリゴンの数
#gpclib の座標形式に変換
osaka.union = as(osaka.coords[[1]],"gpc.poly") #gpclib ...
for(i in 2:np){
poly <- as(osaka.coords[[i]],"gpc.poly") #gpclib のオ...
osaka.union<-union( osaka.union, poly) #Union
}
plot(osaka.union)
#ref(osaka_union.png,center)
CENTER:図XXX 大阪府のUnion結果(各市区町村ポリゴンを...
**Dissolve(任意の属性値ごとにポリゴンをグルーピングして...
osaka.hist <- table(as.integer(osaka$JCODE/100)) #大阪市...
osaka.dissolve <- NULL
for(i in 1:length(osaka.hist)){
coords <- polycoords(osaka[as.integer(osaka$JCODE/100)...
np<-length(coords) #ポリゴンの数
osaka.part = as(coords[[1]],"gpc.poly") #gpclib のオブ...
for(j in 2:np){
poly <- as(coords[[j]],"gpc.poly") #gpclib のオブジ...
osaka.part<-union( osaka.part, poly) #Union
}
if(i == 1)
osaka.dissolve <- osaka.part
else
osaka.dissolve <- append.poly(osaka.dissolve,osaka.p...
}
plot(osaka.dissolve)
#ref(osaka_dissolve.png,center)
CENTER:図XXX 大阪府の Dissolve 結果(大阪市(行政区),大阪...
**ポリゴンクリッピング [#hd9a1913]
上記の union によって作成された大阪府のポリゴンより、任...
matsubara <- as(polycoords(osaka[osaka$CITY1 == "松原市...
plot(setdiff(osaka.union, matsubara))
#ref(osaka_clipping.png,center)
CENTER:図XXX 大阪府のポリゴンクリッピング結果(松原市のポ...
*バッファー [#c374c493]
**ポイントのバッファー [#odff9516]
ポイントの座標を中心にして任意の半径の円を描画~
作成された各円をユニオン~
*カルトグラム [#m1396bf0]
**非連続型面カルトグラム [#sa9d430c]
columbus<-shapefile("columbus.shp") # シェープファイルの...
#
# 等サイズのコロプレス図
#
breaks<-6 # 階級数
classNo <- trunc(rank(columbus$CRIME)/(dim(columbus)[1] ...
classNo[classNo == breaks] <- breaks - 1
plot(columbus,f=gray(1 - classNo/breaks)) #地図を描く
lines(columbus, col="red") #アウトラインを描く
#
# カルトグラム計算
#
coords<-polycoords(columbus) #ポリゴンの座標抽出
densities<- sqrt(columbus$CRIME/columbus$AREA1) #密度(任...
maxDensity<-max(densities) #密度の最大値
k <- 1/maxDensity
L<-k * densities
centroidXY<-sapply(coords, centroid) #重心
for(i in 1:length(coords)){
newX<-L[i] * (coords[[i]][,1] - centroidXY[1,i]) + ce...
newY<-L[i] * (coords[[i]][,2] - centroidXY[2,i]) + ce...
polygon(newX,newY,col="red") #ポリゴンの描画
}
#ref(noncontiguous_area_cartogram.png,center)
CENTER:図XXX 非連続型面カルトグラムの例(赤く塗りつぶされ...
*maptools とのデータ交換 [#b6687ab3]
maptools の新版はシェープファイルの書き込みをサポートし...
**ポイント [#d4c112bc]
**ポリゴン [#k177b8af]
* 地図表示の問題点 [#k6a60626]
-道路データなどデータ量が多い場合、表示が遅くなる。
-やはり、R では日本語が一部しか表示されないこと。現状では...
* Rmap 関連情報サイト [#t44d1ee7]
-[[なかまさんのサイト:http://www.nakama.ne.jp/memo/cran-R...
Vine Linuxでのインストールと実行
終了行:
COLOR(red){SIZE(30){Rmapを使った地図表示}}
[[Rmap:http://www.maths.lancs.ac.uk/Software/Rmap/]]はR...
http://spatial.nhh.no/R/Devel/
Rmapは多数の地図フォーマットをサポートし((Windowsバイナ...
ここでは、日本でも普及しているESRI シェープファイル((シ...
#contents
* Windows でのインストール [#x4300e2a]
バイナリ版は zipファイルをインストールして、shapelib.dl...
より入手して、R のインストールされたディレクトリのbinディ...
* パッケージのロード [#p3df5069]
Rmapインストール後、パッケージをロードします。
library(rmap)
* シェープファイルの所在 [#o2387631]
- 世界
-- [[DataServer: Free maps and GIS data
:http://www.diva-gis.org/data/DataServer.htm]] 世界各国
-- [[Shapefiles for Epi Info:http://www.cdc.gov/epiinfo/s...
- アメリカ
-- [[アメリカ地質調査所のナショナルアトラス(国勢地図帳)...
-- ESRI - Geography Network
- 日本
-- [[統計GISプラザ:http://gisplaza.stat.go.jp]]
シェープファイル形式の町丁字界とCSV形式の人口・世帯デー...
-- [[地球地図日本:http://www1.gsi.go.jp/geowww/globalmap-...
*変換ツール [#sfef0a08]
** 数値地図データ変換ツール(試用版) [#c722dc36]
50mメッシュ標高・250mメッシュ標高・1kmメッシュ標高/平均...
10,000総合・25,000行政界・海岸線をシェープファイルに変換
http://www.esrij.com/products/smap/index.shtml
**数値地図2500変換ツール(sdf2ogr) [#yf366326]
[[国土地理院::数値地図(空間データ基盤)の閲覧(試験公開):...
[[sdf2ogr:http://www.max.hi-ho.ne.jp/scream/sdf2ogr.html]]
*属性データ [#m26365b7]
[[GISで利用可能なRパッケージ内データ]]
* シェープファイルのロード [#o32131ab]
シェープファイルの読み込みは以下のようになります。
mySF <- shapefile("シェープファイル名(例:columbus.shp")
ここでは、例として以下のサイトより無償で入手できる日本...
http://www.esrij.com/gis_data/japanshp/japanshp.html
上のサイトより、ファイルをダウンロード・解凍後、以下の...
jpn <- shapefile("ダウンロード先/japan_jdg.shp")
シェープファイル読み込み時に以下のようなメッセージが出...
Warning message:
Invalid names in DBF file, new names are:
P_NUM is now P.NUM
H_NUM is now H.NUM
in: dbfproxy(dbf)
上で、DBaseのフィールドのうち、フィールド名に"_"を含ん...
* 地図の表示 [#s571ab32]
表示の方法は以下のとおりです。
plot(jpn)
以下の図1に表示の例を示します。
#ref(jpnmap.jpg,center)
CENTER: 図1 地図の表示例
単一色で塗りつぶすには、以下のように(赤色)します。
plot(jpn, f="red")
以下の図2に表示の例を示します。
#ref(jpnmapInRed.jpg,center)
CENTER: 図2 地図の表示例(赤で塗りつぶした場合)
* エクステント [#t9945978]
bnd<-defaultextent(jpn)
xmin<-bnd[1,1]
ymin<-bnd[1,2]
xmax<-bnd[2,1]
ymax<-bnd[2,2]
* 属性の表示 [#z2f8be24]
属性のフィールドの表示は以下のようにします。
names(jpn)
上のコマンドの実行結果は以下のとおりです。
[1] "PREF" "CITY1" "CITY2" "TOWN1" "TOWN2" "JCODE" "P.N...
[10] "FLAG2"
属性情報を一覧表示するには、以下のようにします。
as.data.frame(jpn)
属性情報の一覧表示は以下のようになります((今回使用した...
PREF CITY1 CITY2 TOWN1 TOWN2 JCODE P...
1 北海道 稚内市 稚内市 1214 4...
2 北海道 礼文町 礼文郡 礼文町 1517 ...
3 北海道 豊富町 天塩郡 豊富町 1516 ...
4 北海道 利尻富士町 利尻郡 利尻富士町 1519 ...
5 北海道 利尻町 利尻郡 利尻町 1518 ...
6 北海道 幌延町 天塩郡 幌延町 1488 ...
7 北海道 枝幸町 枝幸郡 枝幸町 1514 ...
8 北海道 中頓別町 枝幸郡 中頓別町 1513 ...
9 北海道 歌登町 枝幸郡 歌登町 1515 ...
10 北海道 天塩町 天塩郡 天塩町 1487 ...
都道府県名のフィールド PREF を使って、北海道だけを抽出...
hokkaido<-jpn[jpn$PREF == "北海道"]
表示は図3のようになります。
#ref(hokkaidomap.jpg,center)
CENTER: 図3 北海道の表示
南関東のみを扱いたければ次のようになります。
minamiKanto<-jpn[jpn$PREF == "埼玉県" | jpn$PREF == "千...
表示は図4のようになります。
#ref(minamikantomap.jpg,center)
CENTER: 図4 南関東の表示
*DBase のみのロード [#k728a05f]
db <- dbfproxy("("ダウンロード先/japan_jdg.dbf")
属性値の地理扱いは前の節を参照のこと
*Excelなどの他の属性データと地図の関係付け [#n4c43732]
match 関数を利用
* 地図投影変換の方法 [#i6af3c6d]
Rmap は100以上の地図投影法をサポートしています。
上の日本の行政界の地図は、座標は緯度経度で、測地系はJGD...
日本全図を表現するのに使用されている正距円錐図法(2標...
plot(jpn,proj="+proj=eqdc +ellps=GRS80 +units=m +lat_0=3...
投影変換結果をオブジェクトにするには
現状では投影変換の出力をシェープファイルなどの外部形式...
上の"proj"のパラメータの指定は以下のとおりです((パラメ...
- proj=地図投影法
- ellps=回転楕円体
- units=距離の単位
- lon_0=中心経度
- lat_0=中心緯度
- lat_1=第1標準緯線
- lat_2=第2標準緯線
表示は図5のようになります。
#ref(jpnmap_eqdc.jpg,center)
CENTER: 図5 正距円錐図法による投影変換
*拡大表示 [#df88eb72]
splancs の zoom 関数を利用して、表示したい領域の対角線上...
* コロプレス図(色分け主題図)の表示方法(([[RColoBrewer:h...
コロプレス図で連続量を扱う場合、以下の表示方法がありま...
** ユーザ定義の階級区分 [#tc8dd94c]
hokkaidoPop <- hokkaido$P.NUM
classes <- c(5000,10000,50000,100000,500000,1000000)
breaks <- length(classes) + 1
classNo <- hokkaidoPop < classes[1]
for(i in 1:(breaks - 1))
classNo <- classNo + (hokkaidoPop >= classes[i] & hokk...
classNo <- classNo + (hokkaidoPop >= max(classes)) * bre...
plot(hokkaido, f=gray(1 - classNo/breaks)) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(userDefinedHokkaido1.png,center)
CENTER: 図X ユーザ定義の階級区分(7階級)
** 等間隔 [#r639c697]
rangePop <- range(hokkaido$P.NUM)
breaks<-6 # 階級数
classNo <- trunc((hokkaido$P.NUM -rangePop[1])/(diff(ran...
classNo[classNo == breaks] <- breaks - 1
hist(classNo)
plot(hokkaido,f=gray(1 - classNo/breaks)) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(equalsizehokkaido.png,center)
CENTER: 図X 等間隔(6階級)
** 等サイズ [#q6b6438d]
breaks<-6 # 階級数
classNo <- trunc(rank(hokkaido$P.NUM)/(dim(hokkaido)[1] ...
classNo[classNo == breaks] <- breaks - 1
hist(classNo)
plot(hokkaido,f=gray(1 - classNo/breaks)) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(quantilehokkaido.png,center)
CENTER: 図X 等サイズ(6階級)
** 標準化 [#f5951fbc]
sd <- 1
pal <- cm.colors(8 / sd)
classNo <- trunc(scale(hokkaido$P.NUM) + 4 / sd) + 1
classNo[classNo <= 0] <- 1
classNo[classNo > (8 / sd)] <- (8 / sd)
hist(classNo)
plot(hokkaido,f=pal[classNo]) #地図を描く
lines(hokkaido, col="red") #アウトラインを描く
#ref(standardhokkaido.png,center)
CENTER: 図X 標準化
** 自然階級分類(Jenk's Natural Break) [#m209d952]
** 空間的コンテクストを考慮した階級区分 [#j66aa5ff]
** 未分類 [#lb02b6ba]
rangePop=range(hokkaido$P.NUM)
plot(hokkaido,f=gray(1 - (hokkaido$P.NUM - rangePop[1])/...
lines(hokkaido, col="red") #アウトラインを描く
#ref(unclassedhokkaido.png,center)
CENTER: 図X 未分類
**凡例表示 [#f7f3d8c3]
***legend関数 [#gc62fd70]
***layout関数 [#p5575b80]
** 階級分類の評価 [#te021748]
階級内の差が小さく、階級間の差を大きくする。
評価関数
**二変量のコロプレス図 [#w777c8e8]
**ドットマップ [#e2b3d654]
library(splancs) #splancs パッケージのロード
saitama<-jpn[jpn$PREF == "埼玉県"]
saitama.coords <- polycoords(saitama) #座標取得
np<-length(saitama.coords) #ポリゴンの数
plot(saitama, col="red")
for(i in 1:np)
points(csr(saitama.coords[[i]],as.integer(saitama$P_N...
pch=19,cex=0.1)
#ref(saitama_dotmap.png,center)
CENTER:図 埼玉県の人口のドットマップ(1点千人)
*テキストラベルの表示 [#h688337c]
属性のラベル表示は以下のようにおこないます(ポリゴンの...
まず、ポリゴンの重心を求める関数(Rmapの作者 Barry Rowli...
centroid <- function(poly) {
np<-dim(poly)[1]
poly<-rbind(poly,poly[1,])
# Initialize variables
area <- 0.0
xbara <- 0.0
ybara <- 0.0
for(i in 1:np){
area <- area - ( (poly[i+1,2]-poly[i,2])*(poly[i+1,1]+...
xbara <- xbara - ( ( (poly[i+1,2]-poly[i,2])/8.)*
((poly[i+1,1]+poly[i,1])**2 + ((pol...
ybara <- ybara + ( ( (poly[i+1,1]-poly[i,1])/8.)*
( (poly[i+1,2]+poly[i,2])**2 + ( (p...
}
c( xbara/area, ybara/area)
}
次にテキスト・ラベルを表示します。都市名を表示するので...
hokkaidocity <- hokkaido[hokkaido$JCODE < 1300] #市のみ...
citycoords <- polycoords(hokkaidocity) #各ポリ...
xy<-sapply(citycoords, centroid) #各ポリ...
plot(hokkaido, col="grey") #行政界...
text(xy[1,],xy[2,], labels=hokkaidocity$CITY1, col="red"...
#ref(textlabelshokkaido.png,center)
CENTER: 図X 北海道の都市名の表示
テキスト・ラベルの周囲を矩形で囲むには legend を使用し...
for(i in 1:length(hokkaidocity$CITY1))
legend(xy[1,i],xy[2,i], legend=hokkaidocity$CITY1[i],...
#ref(hoklabellegend.png,center)
CENTER: 図X 北海道の都市名を矩形で囲んで表示
*円ドット図 [#aa0890ff]
coords <- polycoords(hokkaido)
xy<-sapply(coords, centroid)
plot(hokkaido, col="grey")
points(xy[1,],xy[2,], col="blue",cex=2*(hokkaido$P.NUM/m...
#ref(circledothokkaido.png,center)
CENTER: 図X 円ドット図
円の大きさを決めるのに対数を利用する
*等値線図作成 [#g8081553]
**等間隔 [#x4238fb0]
-- contour 表示
-- countourLines 座標値を返す
**不等間隔 [#p3a898b0]
-- akima の intrerp で補間して、contour
-- TIN(ドロネイ)を使ったコンター
*フローデータ [#mcc45ada]
*ポリゴンのオーバーレイ解析 [#kc84a31e]
gpclib を使用
**Union(ポリゴンの合成) [#b9b85e55]
library(gpclib)
osaka<-jpn[jpn$PREF == "大阪府"]
plot(osaka)
#ref(osaka_original.png,center)
CENTER:図XXX 大阪府の各市区町村ポリゴン
osaka.coords <- polycoords(osaka) #座標取得
np<-length(osaka.coords) #ポリゴンの数
#gpclib の座標形式に変換
osaka.union = as(osaka.coords[[1]],"gpc.poly") #gpclib ...
for(i in 2:np){
poly <- as(osaka.coords[[i]],"gpc.poly") #gpclib のオ...
osaka.union<-union( osaka.union, poly) #Union
}
plot(osaka.union)
#ref(osaka_union.png,center)
CENTER:図XXX 大阪府のUnion結果(各市区町村ポリゴンを...
**Dissolve(任意の属性値ごとにポリゴンをグルーピングして...
osaka.hist <- table(as.integer(osaka$JCODE/100)) #大阪市...
osaka.dissolve <- NULL
for(i in 1:length(osaka.hist)){
coords <- polycoords(osaka[as.integer(osaka$JCODE/100)...
np<-length(coords) #ポリゴンの数
osaka.part = as(coords[[1]],"gpc.poly") #gpclib のオブ...
for(j in 2:np){
poly <- as(coords[[j]],"gpc.poly") #gpclib のオブジ...
osaka.part<-union( osaka.part, poly) #Union
}
if(i == 1)
osaka.dissolve <- osaka.part
else
osaka.dissolve <- append.poly(osaka.dissolve,osaka.p...
}
plot(osaka.dissolve)
#ref(osaka_dissolve.png,center)
CENTER:図XXX 大阪府の Dissolve 結果(大阪市(行政区),大阪...
**ポリゴンクリッピング [#hd9a1913]
上記の union によって作成された大阪府のポリゴンより、任...
matsubara <- as(polycoords(osaka[osaka$CITY1 == "松原市...
plot(setdiff(osaka.union, matsubara))
#ref(osaka_clipping.png,center)
CENTER:図XXX 大阪府のポリゴンクリッピング結果(松原市のポ...
*バッファー [#c374c493]
**ポイントのバッファー [#odff9516]
ポイントの座標を中心にして任意の半径の円を描画~
作成された各円をユニオン~
*カルトグラム [#m1396bf0]
**非連続型面カルトグラム [#sa9d430c]
columbus<-shapefile("columbus.shp") # シェープファイルの...
#
# 等サイズのコロプレス図
#
breaks<-6 # 階級数
classNo <- trunc(rank(columbus$CRIME)/(dim(columbus)[1] ...
classNo[classNo == breaks] <- breaks - 1
plot(columbus,f=gray(1 - classNo/breaks)) #地図を描く
lines(columbus, col="red") #アウトラインを描く
#
# カルトグラム計算
#
coords<-polycoords(columbus) #ポリゴンの座標抽出
densities<- sqrt(columbus$CRIME/columbus$AREA1) #密度(任...
maxDensity<-max(densities) #密度の最大値
k <- 1/maxDensity
L<-k * densities
centroidXY<-sapply(coords, centroid) #重心
for(i in 1:length(coords)){
newX<-L[i] * (coords[[i]][,1] - centroidXY[1,i]) + ce...
newY<-L[i] * (coords[[i]][,2] - centroidXY[2,i]) + ce...
polygon(newX,newY,col="red") #ポリゴンの描画
}
#ref(noncontiguous_area_cartogram.png,center)
CENTER:図XXX 非連続型面カルトグラムの例(赤く塗りつぶされ...
*maptools とのデータ交換 [#b6687ab3]
maptools の新版はシェープファイルの書き込みをサポートし...
**ポイント [#d4c112bc]
**ポリゴン [#k177b8af]
* 地図表示の問題点 [#k6a60626]
-道路データなどデータ量が多い場合、表示が遅くなる。
-やはり、R では日本語が一部しか表示されないこと。現状では...
* Rmap 関連情報サイト [#t44d1ee7]
-[[なかまさんのサイト:http://www.nakama.ne.jp/memo/cran-R...
Vine Linuxでのインストールと実行
ページ名: