5.6 sfパッケージによる空間データ処置の実例
パッケージ
# install.packages(c("sf", "NipponMap", "RColorBrewer"))
library(sf)
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1; sf_use_s2() is TRUE
library(NipponMap)
library(RColorBrewer)
データ
- system.fileはパッケージ内部のファイルを探すための関数
shp <- system.file("shapes/jpn.shp", package = "NipponMap")
pref <- read_sf(shp)
pref
## Simple feature collection with 47 features and 5 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 127.6461 ymin: 26.0709 xmax: 148.8678 ymax: 45.5331
## CRS: NA
## # A tibble: 47 × 6
## SP_ID jiscode name population region geometry
## <chr> <chr> <chr> <dbl> <chr> <POLYGON>
## 1 1 01 Hokkaido 5506419 Hokkaido ((139.7707 42.3018, 139.8711 42.…
## 2 2 02 Aomori 1373339 Tohoku ((140.8727 40.48187, 140.6595 40…
## 3 3 03 Iwate 1330147 Tohoku ((140.7862 39.85982, 140.8199 39…
## 4 4 04 Miyagi 2348165 Tohoku ((140.2802 38.01415, 140.2802 38…
## 5 5 05 Akita 1085997 Tohoku ((140.7895 39.86026, 140.8253 39…
## 6 6 06 Yamagata 1168924 Tohoku ((140.2802 38.01415, 140.2799 37…
## 7 7 07 Fukushima 2029064 Tohoku ((140.2799 37.9721, 140.2799 37.…
## 8 8 08 Ibaraki 2969770 Kanto ((139.7322 36.08471, 139.7058 36…
## 9 9 09 Tochigi 2007683 Kanto ((139.4263 36.33584, 139.3703 36…
## 10 10 10 Gunma 2008068 Kanto ((139.3836 36.35887, 139.6541 36…
## # ℹ 37 more rows
st_crs(pref)
## Coordinate Reference System: NA
st_crs(pref) <- 4326
st_crs(pref)
## Coordinate Reference System:
## User input: EPSG:4326
## wkt:
## GEOGCRS["WGS 84",
## DATUM["World Geodetic System 1984",
## ELLIPSOID["WGS 84",6378137,298.257223563,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## CS[ellipsoidal,2],
## AXIS["geodetic latitude (Lat)",north,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433]],
## AXIS["geodetic longitude (Lon)",east,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433]],
## USAGE[
## SCOPE["unknown"],
## AREA["World"],
## BBOX[-90,-180,90,180]],
## ID["EPSG",4326]]
投影変換
- 距離の計算などを行うために、投影変換が必要。
- 平面直角座標系第9系(EPSG: 6677)に変換
pref_tr <- st_transform(pref, crs = 6677)
- 各県の重心をst_centroid(pref_tr)で計算。
- メートル単位の位置座標をst_coordinates()で示す。
st_coordinates(st_centroid(pref_tr))
## Warning: st_centroid assumes attributes are constant over geometries
## X Y
## [1,] 196224.2824 810081.2252
## [2,] 84655.7095 532108.5734
## [3,] 131703.1173 399919.8404
## [4,] 96017.9602 273316.1844
## [5,] 48881.5628 416347.1935
## [6,] 23755.3191 271399.0833
## [7,] 34266.1553 153839.0704
## [8,] 44215.9529 37128.0710
## [9,] -871.9157 76479.3353
## [10,] -76310.4859 56936.7880
## [11,] -43533.5526 -553.8963
## [12,] 34413.5114 -51484.9921
## [13,] -34852.2698 -33855.7322
## [14,] -43884.2433 -65626.1280
## [15,] -79717.9893 162827.0732
## [16,] -230935.0153 73201.4063
## [17,] -274961.0384 86240.8624
## [18,] -325340.5584 -12355.4692
## [19,] -110559.2326 -41748.5331
## [20,] -161840.0905 15641.9943
## [21,] -251072.6811 -20199.7179
## [22,] -136000.3959 -109305.3331
## [23,] -238755.3609 -102430.2375
## [24,] -317901.0856 -155946.0509
## [25,] -337500.5177 -79848.9249
## [26,] -399277.1317 -74798.3965
## [27,] -396392.6852 -144278.6496
## [28,] -456294.9490 -90138.1773
## [29,] -365480.6626 -180323.9483
## [30,] -399112.6329 -223922.1975
## [31,] -542967.9991 -53780.8032
## [32,] -670574.0069 -85899.8114
## [33,] -550683.7390 -106026.7720
## [34,] -645936.7624 -128587.4491
## [35,] -764207.8268 -167439.4100
## [36,] -515993.9098 -217340.9137
## [37,] -539725.3675 -183320.0065
## [38,] -647794.7435 -243432.0426
## [39,] -600797.2096 -267587.4156
## [40,] -852329.4713 -235718.1884
## [41,] -906344.6457 -258580.0314
## [42,] -928055.9891 -293559.2984
## [43,] -844978.0139 -336080.8817
## [44,] -783834.7892 -280424.3105
## [45,] -806696.3552 -391493.7123
## [46,] -876460.2743 -447720.1656
## [47,] -1189252.4588 -999282.1039
5.7 sfパッケージによる地図化の実例
pref2 <- pref[pref$name != "Okinawa",]
都道府県人口の地図化(1)
plot(pref2[, "population"])

都道府県人口の地図化(2)
display.brewer.all()

- 色分け数 nc = 7, nbreaks = nc と設定
- 配色 RdYlGn (Red-Yellow-Green)
- axes = True: 緯度経度を表示
nc <- 7 #色分け数 nc = 7
pal <- brewer.pal(nc, "RdYlGn") # 配色 RdYlGn (Red-Yellow-Green)
plot(pref2[,"population"], pal = pal, axes = TRUE, nbreaks = nc)

都道府県人口の地図化(3)
breaks <- c(0, 1000000, 2000000, 3000000, 5000000, 8000000, max(pref2$population) )
nc <- length(breaks) - 1
pal <- rev(brewer.pal(nc, "RdYlGn"))
plot(pref2[,"population"], pal = pal, axes = TRUE, breaks = breaks)

plot(pref2[,"population"], pal = pal, axes = TRUE, breaks = breaks,
key.pos = 1, key.length = 0.8)
