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を試みる.↩︎