Abstract
ポリゴンデータから重心を出してプロットする国土数値情報の駅データを加工して、ポイントデータにする
以下のURLからデータをダウンロードする。
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-v2_3.html
使うパッケージは以下
library(sf)
## Linking to GEOS 3.8.1, GDAL 3.2.1, PROJ 7.2.1
library(here)
## here() starts at /Users/mac-user/Desktop/park-direct
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.5 ✓ dplyr 1.0.7
## ✓ tidyr 1.1.4 ✓ stringr 1.4.0
## ✓ readr 2.0.2 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(mapview)
## Warning: replacing previous import 'terra::extend' by 'raster::extend' when
## loading 'satellite'
## Warning: replacing previous import 'terra::crop' by 'raster::crop' when loading
## 'satellite'
## Warning: multiple methods tables found for 'crop'
## Warning: multiple methods tables found for 'extend'
sfパッケージを使って, shpファイルを読み込む.
st_set_crs
関数で座標系の指定をしている
data <- read_sf(here("N02-20_GML","N02-20_Station.shp"), options="ENCODING=CP932") %>%
st_set_crs(6668)
# データが読み込めているか確認
head(data)
## Simple feature collection with 6 features and 5 fields
## Geometry type: LINESTRING
## Dimension: XY
## Bounding box: xmin: 127.7028 ymin: 26.23035 xmax: 139.78 ymax: 35.66328
## Geodetic CRS: JGD2011
## # A tibble: 6 × 6
## N02_001 N02_002 N02_003 N02_004 N02_005 geometry
## <chr> <chr> <chr> <chr> <chr> <LINESTRING [°]>
## 1 11 2 指宿枕崎線 九州旅客鉄道 二月田 (130.6303 31.25405, 130.…
## 2 23 5 沖縄都市モノレール線 沖縄都市モノレール 古島 (127.7028 26.23035, 127.…
## 3 24 5 東京臨海新交通臨海線 ゆりかもめ お台場… (139.7782 35.62961, 139.…
## 4 24 5 東京臨海新交通臨海線 ゆりかもめ 東京国… (139.7733 35.62109, 139.…
## 5 24 5 東京臨海新交通臨海線 ゆりかもめ テレコ… (139.78 35.61791, 139.77…
## 6 24 5 東京臨海新交通臨海線 ゆりかもめ 汐留 (139.7604 35.66328, 139.…
# データの型の確認
glimpse(data)
## Rows: 10,267
## Columns: 6
## $ N02_001 <chr> "11", "23", "24", "24", "24", "24", "24", "24", "24", "24", "…
## $ N02_002 <chr> "2", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "…
## $ N02_003 <chr> "指宿枕崎線", "沖縄都市モノレール線", "東京臨海新交通臨海線",…
## $ N02_004 <chr> "九州旅客鉄道", "沖縄都市モノレール", "ゆりかもめ", "ゆりかも…
## $ N02_005 <chr> "二月田", "古島", "お台場海浜公園", "東京国際クルーズターミナ…
## $ geometry <LINESTRING [°]> LINESTRING (130.6303 31.254..., LINESTRING (127.70…
ポリゴンデータとして位置情報が入ってる
st_centroid
関数を使う。
data2 <- data %>%
mutate(centroid = st_centroid(data$geometry))
ちゃんと駅がプロットできてるか確認してみる。
mapviewパッケージを使う。
mapview::mapview(data2$centroid)
割とうまくいってそう。
今回はcsvファイルにしたかったので、shpファイルをデータフレームに変換する。
st_drop_geometry
で地理データではなくしている。
data3 <- data2 %>%
dplyr::mutate(coords = purrr::map(centroid,
~ as.data.frame(sf::st_coordinates(.x)))) %>%
tidyr::unnest(cols = coords) %>%
st_drop_geometry()
head(data3)
## # A tibble: 6 × 8
## N02_001 N02_002 N02_003 N02_004 N02_005 centroid X Y
## <chr> <chr> <chr> <chr> <chr> <POINT [°]> <dbl> <dbl>
## 1 11 2 指宿枕崎線 九州旅… 二月田 (130.6301 31.25432) 131. 31.3
## 2 23 5 沖縄都市モノレ… 沖縄都… 古島 (127.7029 26.23064) 128. 26.2
## 3 24 5 東京臨海新交通… ゆりか… お台場… (139.7785 35.62981) 140. 35.6
## 4 24 5 東京臨海新交通… ゆりか… 東京国… (139.7731 35.62136) 140. 35.6
## 5 24 5 東京臨海新交通… ゆりか… テレコ… (139.7797 35.61773) 140. 35.6
## 6 24 5 東京臨海新交通… ゆりか… 汐留 (139.7601 35.66299) 140. 35.7
緯度軽度が生成された。csvにしたければ、centroid列を除外してしまえばOK。
data3 <- data3[,-6]
あとはwrite.csv
とかでcsvファイルが完成。
以上!!