Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
FOSS4Gで地理空間情報もかんたん
Kosuke Asahi
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門
Hideo Harada
121203kansai gspaceforumnishimura
Yuichiro Nishimura
20121109 foss4g handsonaok
和人 青木
FOSS4G 2012 Tokyo GRASSハンズオン(GRASSを用いた衛星・GISデータ処理の基礎)
IWASAKI NOBUSUKE
地理空間とOSGeoとPostGISとを簡単に紹介してみます
boiledorange73
130504_日本人会講演会_SOBへようこそ_田中大和
Yamato Tanaka
FOSS4Gを利用したWebでの地理空間情報公開入門
Kosuke Asahi
1
of
51
Top clipped slide
20170909 reafletでお手軽可視化 on_r_20分ver_up用
Sep. 10, 2017
•
0 likes
1 likes
×
Be the first to like this
Show More
•
1,379 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
fukuoka.R #09 https://fukuoka-r.connpass.com/event/63700/
Nobuaki Oshiro
Follow
ヤフー株式会社
Advertisement
Advertisement
Advertisement
Recommended
FOSS4Gで地理院地図
Hidenori Fujimura
5.8K views
•
34 slides
FOSS4G 2011 Tokyo GRASSハンズオン
IWASAKI NOBUSUKE
3.2K views
•
92 slides
第20回GIS学会GRASSハンズオン
IWASAKI NOBUSUKE
3.6K views
•
103 slides
Foss4 gマイクロジオデータ解析入門
Hiroaki Sengoku
15.3K views
•
118 slides
QuantumGISを使ったPostgreSQL/PostGIS利用方法紹介
Yoichi Kayama
3K views
•
54 slides
FOSS4G Osaka プレゼンテーション(岩崎)
IWASAKI NOBUSUKE
1.2K views
•
56 slides
More Related Content
Similar to 20170909 reafletでお手軽可視化 on_r_20分ver_up用
(20)
FOSS4Gで地理空間情報もかんたん
Kosuke Asahi
•
2.4K views
FOSS4G 2014 Hokkaidoハンズオン - PostGIS入門
Hideo Harada
•
8.1K views
121203kansai gspaceforumnishimura
Yuichiro Nishimura
•
1.2K views
20121109 foss4g handsonaok
和人 青木
•
1.1K views
FOSS4G 2012 Tokyo GRASSハンズオン(GRASSを用いた衛星・GISデータ処理の基礎)
IWASAKI NOBUSUKE
•
3.7K views
地理空間とOSGeoとPostGISとを簡単に紹介してみます
boiledorange73
•
24.2K views
130504_日本人会講演会_SOBへようこそ_田中大和
Yamato Tanaka
•
629 views
FOSS4Gを利用したWebでの地理空間情報公開入門
Kosuke Asahi
•
5K views
FOSS4G OKINAWA QGIS入門編ワークショップ
IWASAKI NOBUSUKE
•
4.5K views
タイル地図がおもしろい
Kohei Otsuka
•
15.1K views
pgGeocoderのご紹介
Ko Nagase
•
1.6K views
QGISアプリケーションを用いた明治時代初期の土地利用DBの構築
IWASAKI NOBUSUKE
•
3K views
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
•
4.4K views
20111122◯◯市gis事例研究会
和仁 浅野
•
1.4K views
A new generation Geospatial information use environment driven by open data ...
Yoichi Kayama
•
603 views
[DL輪読会]Learning to Navigate in Cities Without a Map
Deep Learning JP
•
1.4K views
121105 foss4 g_tokyo_qgis_handson
Takayuki Nuimura
•
3.9K views
QgisとRで野生動物の追跡結果を解析してみよう
NozomiIriomote
•
17.1K views
データパイプラインツールLuigiを使ってCS立体図をワンストップ演算する FOSS4G 2017 Tokyo
Kunihiko Miyoshi
•
2.5K views
QGISセミナー初級 ~QGISの使い方・基礎編~ Ver. 2.4版
FOSS4G_MEXT
•
57.1K views
More from Nobuaki Oshiro
(20)
20181117_データ分析プロジェクトの流れを理解する_PDCAとKPIツリー
Nobuaki Oshiro
•
1.4K views
20170826 fukuoka.r告知_reafletでお手軽可視化_on_r
Nobuaki Oshiro
•
896 views
20170707 rでkaggle入門
Nobuaki Oshiro
•
4K views
20170312 r言語環境構築&dplyr ハンズオン
Nobuaki Oshiro
•
1.1K views
20161127 doradora09 japanr2016_lt
Nobuaki Oshiro
•
8.3K views
10分で分かるr言語入門ver2.15 15 1010
Nobuaki Oshiro
•
3.2K views
10分で分かるr言語入門ver2.14 15 0905
Nobuaki Oshiro
•
2.2K views
10分で分かるr言語入門ver2 upload用
Nobuaki Oshiro
•
9.6K views
15 0117 kh-coderご紹介 for R users
Nobuaki Oshiro
•
3.5K views
15 0117 kh-coderご紹介
Nobuaki Oshiro
•
862 views
15 0117 r言語活用事例-外部公開用
Nobuaki Oshiro
•
3.1K views
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
Nobuaki Oshiro
•
9K views
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
•
3.6K views
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
•
3.4K views
10分で分かるr言語入門ver2.8 14 0712
Nobuaki Oshiro
•
3K views
10分で分かるr言語入門ver2.7
Nobuaki Oshiro
•
7.2K views
10分で分かるr言語入門ver2 6
Nobuaki Oshiro
•
9.8K views
10分で分かるr言語入門ver2.5
Nobuaki Oshiro
•
36.6K views
10分で分かるr言語入門ver2.4
Nobuaki Oshiro
•
3.9K views
Doradora09 lt tokyo_r33
Nobuaki Oshiro
•
1.4K views
Advertisement
Recently uploaded
(20)
開発環境向けEKSのコスト最適
ducphan87
•
13 views
GitHub最新情報キャッチアップ 2023年6月
Kazumi IWANAGA
•
7 views
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
Deep Learning JP
•
101 views
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
•
12 views
Kubernetes超入門
Takashi Suzuki
•
5 views
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
Deep Learning JP
•
19 views
JSTQB_テストプロセスの概念モデル.pdf
akipii Oga
•
311 views
mi-2. データサイエンス・AIの事例
kunihikokaneko1
•
4 views
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
Rakuten Group, Inc.
•
40 views
統計学の攻略_統計的仮説検定の9パターン.pdf
akipii Oga
•
314 views
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装
Takanari Tokuwa
•
73 views
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
Deep Learning JP
•
159 views
統計学の攻略_推測統計学の考え方.pdf
akipii Oga
•
323 views
ChatGPT触ってみた
infinite_loop
•
64 views
mi-6. 画像分類システム
kunihikokaneko1
•
4 views
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
Deep Learning JP
•
93 views
DrupalをDockerで起動してみる
iPride Co., Ltd.
•
22 views
Windows ChatGPT Bing AI.pptx
Atomu Hidaka
•
7 views
HTTPの仕組みについて
iPride Co., Ltd.
•
12 views
統計学の攻略_正規分布ファミリーの全体像.pdf
akipii Oga
•
318 views
20170909 reafletでお手軽可視化 on_r_20分ver_up用
leafletでお⼿軽可視化 (20分バージョン) 2017/09/09 doradora09
⾃⼰紹介
⾃⼰紹介 • ⼤城信晃 • twitter
: doradora09 • 沖縄 出⾝ -> 東京 -> 福岡 • Webエンジニア -> データ分析者 • ヤフー -> DATUM STUDIO -> LINE Fukuoka • 執筆 • Rで始めるビジネス統計分析 (2014) • 勉強会 • TokyoR運営 (2010-2017) • fukuoka.R運営にJOIN (2017- ) • 意思決定のためのデータ分析勉強会 in Fukuoka(2017- )
本⽇のお話 ①leafletパッケージ ②緯度経度の取得 ③測地、投影座標系の変換 地図へのお⼿軽可視化 + 関連情報のご紹介
①leafletパッケージ
leafletとは (wikipediaより) • Leaflet
は広く使われているWeb地図のための JavaScriptライブラリである。 2011年に最初にリ リースされた[2]。 • モバイルとデスクトップのプラットフォームのほと んどに対応し、HTML5とCSS3に対応している。 OpenLayersやGoogle Maps API(英語版)とともに 最も⼈気のあるJavaScript地図ライブラリの⼀つで あり、FourSquare、Pinterest、Flickrなどの有名な サイトで使われている。 https://ja.wikipedia.org/wiki/Leaflet
{leaflet}パッケージ • Rからleafletを呼び出せるようにしたラッパーパッケージ • JSがかけなくてもお⼿軽に利⽤できます
基本操作 • 数⾏書くだけで動作します #インストール install.packages("leaflet") library(leaflet) #緯度経度をセット df <-
data.frame (id=1:2, lat=c(33.58974, 33.58904), lng=c(130.42059, 130.3996), pop=c("hakata", "tenjin") ) # 描画 m <- leaflet(df) %>% addTiles() %>% addMarkers(lng=~lng, lat=~lat, popup=~pop) m
基本操作 • 数⾏書くだけで動作します #インストール install.packages("leaflet") library(leaflet) #緯度経度をセット df <-
data.frame (id=1:2, lat=c(33.58974, 33.58904), lng=c(130.42059, 130.3996), pop=c("hakata", "tenjin") ) # 描画 m <- leaflet(df) %>% addTiles() %>% addMarkers(lng=~lng, lat=~lat, popup=~pop) m
#インストール install.packages("leaflet") library(leaflet) #緯度経度をセット df <- data.frame
(id=1:2, lat=c(33.58974, 33.58904), lng=c(130.42059, 130.3996), pop=c("hakata", "tenjin") ) # 描画 m <- leaflet(df) %>% addTiles() %>% addMarkers(lng=~lng, lat=~lat, popup=~pop) m 基本操作 • 数⾏書くだけで動作します マーカーのID 緯度情報 経度情報 ポップアップ 情報 表⽰内容を 指定
応⽤ • popupの中はHTMLの 記述も可能です • 画像やリンクも貼れます ##
popup⽤意 pop <- c('⼭⼝酒造場<br /><img src="img/⼭⼝酒造場.jpg" width=200>', '⼋⼥中央⼤茶園<br /><img src="img/茶畑.jpg" width=200>', '繁桝<br /><img src="img/しげます.jpg" width=200>', '喜多屋<br /><img src="img/喜多屋.jpg" width=200>')
おすすめ機能:クラスター化 • 縮尺によってかたまりで俯瞰したい場合に便利 #クラスター化 df2 <-
data.frame(id=1:100, lng=130+rnorm(1000), lat=33+rnorm(1000)) leaflet(df2) %>% addTiles() %>% addMarkers(~lng, ~lat, label=~paste0(id,"番"), clusterOptions= markerClusterOptions())
おすすめ機能:クラスター化 • 縮尺によってかたまりで俯瞰したい場合に便利 #クラスター化 df2 <-
data.frame(id=1:100, lng=130+rnorm(1000), lat=33+rnorm(1000)) leaflet(df2) %>% addTiles() %>% addMarkers(~lng, ~lat, label=~paste0(id,"番"), clusterOptions= markerClusterOptions())
デモ
その他、できること • %>%を使った重ね書き • 初回表⽰時の位置やズームの設定(setView) •
サークル表⽰(addCircles)、ライン表⽰(addPolylines) • 地図タイルの変更(addTilesのattributionパラメタ) • 判例の表⽰(addLegend) • などなど、カスタマイズも可能
詳細はkazutan先⽣の こちらの資料が詳しいです https://rpubs.com/kazutan/leaflet_slide
注意 • Rのleafletパッケージの場合、⼤量のデータを可視化しようと するとブラウザが耐えられなくなるケースがあります (1万点以上はきつかったような・・) • その場合はQJISなど専⽤ツールでの可視化をおすすめします
続いての話題 ①leafretパッケージ ②緯度経度の取得 ③測地、投影座標系の変換
②緯度、経度の取得 • leafletの使い⽅はなんとなく分かったものの、元データを⼿に ⼊れなければプロットはできない • 緯度経度情報の取得⽅法についていくつか説明します ①地図サービス ②API ③⼀括変換サービス
調査⽅法①: 地図サービスで1つずつ調べる https://mapfan.com/map/spots/SCH,J,2GR?full=true
調査⽅法②: GoogleのAPIを使う 座標を住所に変換する場合は以下が便利 (ただし、2500件/dayのAPI制限あり) >install.packages('ggmap') >library(ggmap) # 住所・緯度経度対応⽤ >ggmap::geocode(ʻ博多駅ʼ,
source=“google”, output=“latlon”) Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=%E5%8D%9A%E5%A4%9A%E9%A7%85& sensor=false lon lat 1 130.4212 33.59024
調査⽅法③: ⼀括変換サービスを使う 東京⼤学空間情報科学研究センターが提供する「CSVアドレスマッチングサービス」 http://newspat.csis.u-tokyo.ac.jp/geocode-cgi/geocode.cgi?action=start
注意: 測地、投影座標系を揃えること • 緯度経度、と⼀⾔に⾏っても測り⽅によって誤差が⽣じること があります
例:このビルの場合 福岡県福岡市博多区博多駅中央街8番1号 世界測地系: 33.5882078, 130.4190611 ⽇本測地系:
33.5849443, 130.4214012
それぞれをleafletでプロット 測地系の違いだけで数百メートルずれることもある 地図サービスとしては致命的
その他の例: 測地系による同⼀座標の位置の違い 地図側が採⽤している測地系、投影座標系と データの測地系、投影座標系を揃える必要がある
続いての話題 ①leafletパッケージ ②緯度経度の取得 ③測地、投影座標系の変換 • 基礎知識 • パッケージ
③測地、投影座標系の変換 • まずは基礎知識、その後Rのspパッケージのご紹介
測地系とESPGコード: ⾊々な種類がある 測地成果 測地系 楕円体
投影座標系 EPSGコード 測地成果2000 世界測地系 JGD2000 GRS80楕円体 緯度経度 4612 UTM座標系 3097〜3101 平⾯直⾓座標 2443〜2461 WGS84系 WGS84楕円体 緯度経度 4326 UTM座標系 32651〜32656 旧成果 ⽇本測地系TOKYO ベッセル楕円体 緯度経度 4301 UTM座標系 102151〜102156 平⾯直⾓座標系 30161〜30179 ※後述するRの{sp}パッケージで測地系を変換する際は、ESPGコードを使⽤する GISのための測地成果、測地系、楕円体、投影座標系、EPSGコードのまとめ http://d.hatena.ne.jp/tmizu23/20091215/1260868350
測地系 測地系の種類 測地系とは、地球上の位置を経緯度(経度・緯度)及び標⾼ を⽤いる座標によって表すとき、前提とする条件 ・⽇本測地系(TOKYO) → 2002年までは使⽤されていた⽇本の測地基準系 ・世界測地系(JGD2000, WGS84など) →⽇本測地系より新しく、⽇本でも測地基準系を世界測地系 に移⾏している
測地系による違い 国⼟交通省地理院 (3 ⽇本測地系と世界測地系) http://www.gsi.go.jp/LAW/G2000-g2000-h3.htm 東京付近では、⽇本測地系 の経緯度で表されている地 点を、世界測地系の経緯度 で表すと、北⻄⽅向に450m ずれている →
正確な位置をプロットす る際に、測地系は無視でき ないもの
測地系を変換しなかった例 某社のAPIから取得した物件 データの緯度経度を元に Google Map上にプロット 原因は、Google Mapでは世 界測地系を採⽤しているの に対し、元データは⽇本測 地系を元に経度緯度を設定 しているため Google
Maps APIで緯度経度を元にプロットした マーカーの位置がずれる(測地系変換) https://shimz.me/blog/google-map-api/3103
投影座標系 座標系とは、地球上の位置を座標で表すための原点や座標の 単位などの取り決めのこと ・GISで使⽤される主な座標系 - 地理座標系 - UTM座標系 -
平⾯直⾓座標系
地理座標系 地理座標系 http://desktop.arcgis.com/ja/arcmap/10.3/guide-books /map-projections/geographic-coordinate-system.htm 地理座標系とは、経度は⾚ 道を基点(0°)として南北の、 緯度は旧グリニッジ天⽂台 跡を基点として東⻄の、そ れぞれ⾓度を数値で表した 座標系
UTM座標系 コトバンク (ユニバーサル横メルカトル図法) https://kotobank.jp/word/ユニバーサル横メルカトル図法 UTM座標系とは、東⻄⽅向 に⽔平に保たれた円筒の中 に地球をはめ込んで、地球 の中⼼と地表⾯上の点とを 結んだ直線が円筒と交わる 点に印を付けて、円筒を展 開したもの。
平⾯直⾓座標系 国⼟地理院 (わかりやすい平⾯直⾓座標系) http://www.gsi.go.jp/sokuchikijun/jpc.html#10 1/2500地図のような⽐較的 狭い範囲の地図 に適した座 標系 ⽇本国内を⼟地の状況に合 わせて19に分割し、第1 系〜
第19系と番号付けら れる。 ※地図を扱う上では⽬的と する地点がどの系に含まれ るかを知る必要あり
(再掲)測地系とESPGコード: データと地図のEPSGコードを揃える必要がある 測地成果 測地系 楕円体
投影座標系 EPSGコード 測地成果2000 世界測地系 JGD2000 GRS80楕円体 緯度経度 4612 UTM座標系 3097〜3101 平⾯直⾓座標 2443〜2461 WGS84系 WGS84楕円体 緯度経度 4326 UTM座標系 32651〜32656 旧成果 ⽇本測地系TOKYO ベッセル楕円体 緯度経度 4301 UTM座標系 102151〜102156 平⾯直⾓座標系 30161〜30179 ※後述するRの{sp}パッケージで測地系を変換する際は、ESPGコードを使⽤する GISのための測地成果、測地系、楕円体、投影座標系、EPSGコードのまとめ http://d.hatena.ne.jp/tmizu23/20091215/1260868350
③測地、投影座標系の変換 • Rではspパッケージ • 2003年くらいから使われている模様 •
ちなみに近年ではsfというパッケージもあるようです • (今後はこっちが主流?今回は割愛) • Simple featureのデータうまく扱える sfパッケージ参考: http://notchained.hatenablog.com/entry/2017/01/06/213333
{sp}パッケージ • spは、data.frameを拡張した地理情報データのためのデータ形 式と、それを操作する基礎的な関数群を提供するパッケージ • spTransformで投影座標系の変換が可能 https://www.rdocumentation.org/packages/sp/versions/1.2-5
例:先ほどのJPJRビルの例 ## spパッケージで⽇本測地系 ->
世界測地系へ変換 library(sp) # 変換元データの⽤意。 locations <- data.frame(latitude=c(33.5849443), longitude=c(130.4214012)) ##⽇本測地系 # SPデータへの変換と測地系設定 coordinates(locations) <- c("longitude", "latitude") proj4string(locations) <- CRS("+init=epsg:4301") ## 変換前のepsgコード # WGS84への測地系変換。 locations2 <- spTransform(locations, CRS("+init=epsg:4326")) ## 変換後のepsgコード ## ビフォーアフター locations locations2
例:先ほどのJPJRビルの例 ## spパッケージで⽇本測地系 ->
世界測地系へ変換 library(sp) # 変換元データの⽤意。 locations <- data.frame(latitude=c(33.5849443), longitude=c(130.4214012)) ##⽇本測地系 # SPデータへの変換と測地系設定 coordinates(locations) <- c("longitude", "latitude") proj4string(locations) <- CRS("+init=epsg:4301") ## 変換前のepsgコード # WGS84への測地系変換。 locations2 <- spTransform(locations, CRS("+init=epsg:4326")) ## 変換後のepsgコード ## ビフォーアフター locations locations2 > locations SpatialPoints: longitude latitude [1,] 130.4214 33.58494 > locations2 SpatialPoints: longitude latitude [1,] 130.4191 33.58821
正解との⽐較 福岡県福岡市博多区博多駅中央街8番1号 ⽇本測地系: 130.4214012, 33.5849443 世界測地系:
130.4190611, 33.5882078 > locations SpatialPoints: longitude latitude [1,] 130.4214 33.58494 > locations2 SpatialPoints: longitude latitude [1,] 130.4191 33.58821 桁を四捨五⼊して揃えると⼀致。 これで測地系の異なるデータもプロットが可能になる
紹介:もう少し複雑なケース
例:ウイスキーの蒸留所データを 地図上にプロットしたい https://www.mathstat.strath.ac.uk/outreach/nessie/datasets/whiskies.txt スコットランドのストラスクライド⼤学が提供する86種類のウイスキーの フレーバーに関するオープンデータ
問題は、地図にプロットしようとしても そのままではプロットできないという点
こちらもspパッケージでトライ http://www.pu-hiroshima.ac.jp/~ttetsuji/R/[69]sp-class.html library(sp) library(readr) library(rgdal) library(tidyr) library(dplyr) #ウイスキーデータ dat <- readr::read_csv("https://www.mathstat.strath.ac.uk/outreach/nessie/datasets/whiskies.txt") >
dat[,c(2,16:17)] Source: local data frame [86 x 3] Distillery Latitude Longitude (chr) (int) (int) 1 Aberfeldy 286580 749680 ##⚫このままでは使えない 2 Aberlour 326340 842570 3 AnCnoc 352960 839320
変換前のepsgコードの⾒極めが⼤切 # 地理座標系の変換(Ordnance Survey
National Grid reference system (epsg27700) ->epsg4326) class(dat) <- "data.frame" df_sp_whiskeies <- SpatialPointsDataFrame(coords = cbind(dat$Latitude, dat$Longitude), data = dat, proj4string = CRS("+init=epsg:27700")) sp_whiskeies_proj <- spTransform(df_sp_whiskeies, CRS("+init=epsg:4326")) # leafletで表⽰する場合の緯度経度を抽出したデータフレームを作成 df.coords <- sp_whiskeies_proj %>% as.data.frame() %>% dplyr::select(starts_with("coords")) %>% dplyr::rename(lat = coords.x2, lon = coords.x1) glimpse(df.coords) #変換後の座標 > head(df.coords) lon lat 1 -3.850199 56.62519 ##⚫OK 2 -3.229644 57.46739 3 -2.785295 57.44175
蒸溜所の⼀覧のプロットが完成! # leafletで可視化 leaflet() %>% addMarkers(data
= df.coords) %>% addTiles() 1 Aberfeldy 286580 749680 2 Aberlour 326340 842570 3 AnCnoc 352960 839320 1 -3.850199 56.62519 2 -3.229644 57.46739 3 -2.785295 57.44175
ところで、個⼈的な疑問 • 元々のデータのEPSGコードを知る⽅法 • 元々のデータの作者に聞くしかないでしょうか? •
⾃動変換、とか総当たり、とか良い⽅法がありましたらアドバ イスいただけると幸いです
まとめ • 数⾏書くだけで地図上への可視化が可能なleaflet • 旅の思い出をサクッと可視化するのも⾯⽩いかもしれません •
地図への描画の際は測地系や投影座標系を揃えること • Rなら座標取得、変換、地図上への可視化まで⼀通りのパッ ケージが揃っていて便利です • 緯度経度取得: ggmap::geocode • 座標変換:{sp}パッケージ • 今後は{sf}パッケージが便利かも?
Enjoy !
Advertisement