OpenStreetMap(OSM)のデータにアクセスし,商店街と商店街の店舗を地図上に可視化.
shop
)とアメニティ施設(amenity
)を地図上に可視化.ライブラリ:tidyverse
,osmdata
,mapview
osmdata
:OSMデータにアクセスするためのRパッケージ.
緯度経度の探し方
opq()
:調べた緯度経度を用いて範囲を指定し,指定範囲のデータにアクセス.bbox()
はバウンディングボックスのこと.
add_osm_feature()
:注目する地物を指定.今回は店舗shop
を指定(JA:Key:shop.その他の選択肢の詳細はJA:Map
Features.).osmdata_sf()
:sfオブジェクトに変換
osm_points
),ライン(osm_lines
),ポリゴン(osm_polygons
)の3つのリスト形式データで構成.sasayama_shop <-
opq(bbox=c(139.56470,35.48814,139.56824,35.48617)) %>%
add_osm_feature(key="shop") %>%
osmdata_sf()
sasayama_shop[["osm_points"]]
:リスト内の特定の要素を抽出する方法.笹山商店街の商業施設の可視化
OpenStreetMap
のみ使用.店舗数の計算
count()
:今回の場合はポイントの合計を返す.
n | geometry |
---|---|
14 | MULTIPOINT ((139.5681 35.48… |
Zoom in
)をクリックして大きさを調整)を見ると,レストラン(🍴)やバー(カクテルグラスのマーク)にポイントが付いてないことがわかる.
shop
)ではなくアメニティ施設(amenity
)と登録されているため.amenity
をすべて表示するのではなく,restaurant
とbar
だけ抽出.sasayama_restaurant <-
opq(bbox=c(139.56470,35.48814,139.56824,35.48617)) %>%
add_osm_features(features=list (
"amenity"="restaurant",
"amenity"="bar")) %>%
osmdata_sf()
商業+アメニティ施設の可視化
sasayama_restaurant
のポイントデータのみ利用.sasayama_shop
とsasayama_restaurant
のシェープファイルを合併し,mapview()
で表示.#データ合併
sasayama_shopstreet <-
c(sasayama_shop, sasayama_restaurant)
#ポイントデータのみ利用
sasayama_shopstreet <-
sasayama_shopstreet[["osm_points"]]
#可視化
mapview(sasayama_shopstreet,
map.types=c("OpenStreetMap"))
店舗数の計算
n | geometry |
---|---|
17 | MULTIPOINT ((139.5681 35.48… |
shop
とamenity
で異なる点.そこで,先とは異なった形式でファイルを合併.sasayama_shop2
のシェープファイルから必要な列(変数)のみを選択(select()
).osm_id | name | shop | geometry | |
---|---|---|---|---|
6066191287 | 6066191287 | 笹山中央マート | mall | POINT (139.567 35.48712) |
6066191288 | 6066191288 | イチノセ電子サービス | electronics | POINT (139.566 35.48717) |
6066191291 | 6066191291 | 萩原鮮魚 | seafood | POINT (139.566 35.48706) |
6066191292 | 6066191292 | 石原青果 | greengrocer | POINT (139.5659 35.48714) |
6066191295 | 6066191295 | あぢゃぢゃまんま | deli | POINT (139.5658 35.48708) |
6066191297 | 6066191297 | ユウ | hairdresser | POINT (139.5658 35.48696) |
osm_id
),店舗名(name
),商品種別(shop
)のほか,geometryとしてポイント(POINT()
)が収録されたファイルになっている.sasayama_restaurant2 <-
sasayama_restaurant[["osm_points"]] %>%
select(osm_id, name, amenity)
#最初の6行
sasayama_restaurant2 %>%
head()
osm_id | name | amenity | geometry | |
---|---|---|---|---|
6066191289 | 6066191289 | 長寿庵 | restaurant | POINT (139.5661 35.48712) |
6066191296 | 6066191296 | 英鮨 | restaurant | POINT (139.5657 35.48702) |
6066191298 | 6066191298 | パブスナック ベル | bar | POINT (139.5656 35.48692) |
amenity
をshop
に変更し,ファイルをsasayama_restaurant2
の下に結合(rbind()
).
rbind()
:列名,列の数が揃う必要あり.#列名の変更
sasayama_restaurant2 <-
sasayama_restaurant2 %>%
rename(shop=amenity)
#データ結合
sasayama_shopstreet2 <-
rbind(sasayama_shop2, sasayama_restaurant2)
可視化
zcol
:色付けする列(変数)を指定.osm_points
),ライン(osm_lines
),ポリゴン(osm_polygons
)の3つのリスト形式データで構成.
add_osm_feature()
でhighway
にアクセス.NA
欠損値)道路も多いため,これは省く.sasayama_highway <-
opq(bbox=c(139.56470,35.48814,139.56824,35.48617)) %>%
add_osm_feature(key="highway") %>%
osmdata_sf()
sasayama_highway <-
sasayama_highway[["osm_lines"]]%>%
select(osm_id, name, highway)
#欠損値削除
sasayama_highway %>%
filter(!is.na(name)) ->
sasayama_highway
#データの最初の6行
sasayama_highway %>%
head( )
osm_id | name | highway | geometry | |
---|---|---|---|---|
170471658 | 170471658 | 笹山商店街 | unclassified | LINESTRING (139.564 35.4878… |
620264354 | 620264354 | 笹山アーケード商店街 | footway | LINESTRING (139.5656 35.486… |
商店街の可視化
color
:線の色付け指定.デフォルの色付けを使用しないとき.lwd
:線の太さを指定.#六角橋商店街商業施設
rokkakubashi_shop <-
opq(bbox=c(139.62333,35.49012,139.63031,35.48609)) %>%
add_osm_feature(key="shop") %>%
osmdata_sf()
#六角橋商店街アメニティ施設
rokkakubashi_amenity <-
opq(bbox=c(139.62333,35.49012,139.63031,35.48609)) %>%
add_osm_feature(key="amenity") %>%
osmdata_sf()
#ファイル合併
rokkakubashi_streetshop <-
c(rokkakubashi_shop, rokkakubashi_amenity)
n | geometry |
---|---|
153 | MULTIPOINT ((139.6266 35.48… |
rokkakubashi_highway <-
opq(bbox=c(139.62333,35.49012,139.63031,35.48609)) %>%
add_osm_feature(key="highway") %>%
osmdata_sf()
rokkakubashi_highway <-
rokkakubashi_highway[["osm_lines"]]%>%
select(osm_id, name, highway)
#欠損値削除
rokkakubashi_highway %>%
filter(!is.na(name)) ->
rokkakubashi_highway
#可視化
mapview(rokkakubashi_highway,
zcol="name",
color=viridis_pal(option="G"),
lwd=2,
map.types = c("CartoDB.Positron"))
filter()
:列(内の要素)を抽出.
shop
列のコンビニ(convenience
)とスーパー(supermarket
)とショッピングモール(mall
)を抽出.rokkakubashi_streetshop <-
rokkakubashi_streetshop %>%
filter(shop %in% c("convenience", "supermarket", "mall"))
col.regions
: ポイントの色付け.デフォルトの色を使用しないとき.burst
:凡例を分けるオプション.デフォルトはFALSE
.RによるGISデータの可視化
アイコン
横浜市全体の店舗の位置を調べるときのような広い範囲の場合は,getbb()
を指定.使い方はgetbb("yokohama jp")
のように具体的に地名と国名を入力.ただし,範囲が広いと情報取得に時間がかかり,場合によってはエラーになる.その場合は,もう一度Knit
を試みる.↩︎