owned this note
owned this note
Published
Linked with GitHub
---
title: Geo+Python Notes
tags: UrbanDataMeetup,geo,Python
image: https://i.imgur.com/XLpxA13.png
lang: ja-jp
---
# Geo+Python
==誰でも編集可能です。 :pencil2: / :book: アイコンからMarkdownで書けます。
みんなで作るログにご協力ください。:pray:==
このノートのリンクは
bit.ly/20191027geo
## 開催概要
![](https://i.imgur.com/QmHtiuG.png)
:link: [Connpass](https://udceasttokyo.connpass.com/event/147710/)
:link: [GooglePhotos 191027Geo+Python](https://photos.app.goo.gl/vM4ppqh2UfonMwBq8)
### 開催概要
日時: 10/27(日)13:00〜18:00 (開場12:45〜)
場所: 東京大学 駒場第二キャンパス 生産技術研究所 As311・312
アクセス: https://www.iis.u-tokyo.ac.jp/ja/access/
募集人数: 30名
### 内容
**PyCon JP 2019のポスターセッションで発表した [「Geo + Python JP」](https://hackmd.io/N6n7rDSUSs6OPFOUbbPSZg) の内容をもとに、その解説とゆるいハンズオンを行います。**
ここ数年のオープンデータ推進の成果として、公的機関から位置や区域に関する地理空間情報(Geoデータ)が公開され、誰でもそのデータを手軽に利用できるようになりました。これらのデータとGIS(地理情報システム)のツールをMIXすることで様々なアウトプットが可能になります。
4名のGeoマニアのゆかいな仲間たちが、それぞれ地理空間情報(Geoデータ)をどのように利用しているか事例とともに、PythonとGeoデータによる様々な可視化や解析方法の一端をご紹介します!
### 今回解説する事例
- パーソントリップODの可視化(Geopandas + KeplerGL)
- GeoDjangoで地図アプリケーション
- OSMnxについて(Saving live network (OSMnx + QGIS))
- Google Colaboratoryを利用した地理空間情報の可視化 (matplotlib Basemap + Cartopy)
- Google Colaboratoryのパワーで点群可視化をワンストップ化(lasto3dtiles + Cesium)
### 講師:
- Mami Enomoto
- Kunihiko Miyoshi
- Hiroshi Omata
- Yasuto Furukawa
### ゲストWi-Fi
UTokyo Guest アカウントの取得方法
“UTokyo-Guest” という SSID に接続してください。
携帯電話による認証を行った上で無料で利用できます。ソフトバンク社が提供するサービスを用いており、東京大学のネットワークではありません。
アカウント取得については、接続時に表示される web ページの案内に従ってください。
https://www.softbank.jp/biz/nw/wifispot/freewifi/
### 注意事項
- 大学内で利用可能なWifiはありますが、モバイルWifiなどお持ちの方は持参をおすすめします。
- 大学内で利用可能なWifi「UTokyo-Guest」のご案内(※音声電話認証が必要です)は[コチラ](https://www.u-tokyo.ac.jp/adm/dics/ja/wlan.html?fbclid=IwAR39AApR-C81uzMxj8QzuJt4J2jHp_j8XXCesOwnDdRe6Q5cfPNDAgy8ZjE)
- 飲食はOKですが、通常の範囲内でおやつ程度でおねがいします。
- 自販機はありますが、生協はしまってます、学外のコンビニちょっと遠いので、買ってくるといいと思います。
- 途中入退場可です。
- リクルーティング目的での参加はご遠慮下さい
- 忘れものをしても、自己責任です。対応出来ませんのでご了承ください。
# タイムライン
- 13:00-15:00 Geo + Python 解説
- 15:00-17:30 やってみよう!<br>
- もくもく&がやがや 各自Geoデータの分析や可視化に挑戦してみましょう。<br>
- 適宜サポートします。<br>
- 17:30-18:00 共有
- 18:00 撤収
# 参加者
自分を表す==キーワード3つ== 書いて下さい。
呼ばれたい名前でOKです。本名フルネームでなくてもOKです。
SNSなどリンクがあればフォローしやすいです。
**太字**は発表者さん
==当日みんなで追記する==
- 呼ばれたい名前 + 自分を表すキーワード3つ AAA, BBB, CCC
- **榎本真美(Mami). 土木インフラ, 地図, aibo**
- Semple 不動産, 初心者, データ取引
- Yoshi 通信会社, 位置情報, AI
- Otsuka 不動産, 地図, 衛星画像
- u1([ゆーいち](https://twitter.com/jinmopj)) + 建築不動産, 池袋, Quantopianに最近興味津々
- さかた 土木, 赤羽, 図書館
- nitsumari 2019年始動,ポンコツ,重機
- **ふるかー, Openなにがし, GIS, シビックテック**
- Kenichi 土木, 百合ヶ丘, 初心者
- Pon geo初心者,CG,Houdini,[@Pon__CG](https://twitter.com/Pon__CG)
- 30 商圏分析,GPS,Python初心者
- 下村 プログラマ, パズル, ゲーム
- yasu, 通信会社、キャッシュレス、営業
- kazu, 近道・抜け道調べ、オリエンテーリング、Ansible
- ぶらっく 初心者、デザイン、CG
- むらやん, ゼネコン, 技術開発, 業界のIT推進したい
- kaizumaki + JS,Django,シビックテック
- [しんせいたろう](https://twitter.com/shinseitaro/) モグモグDjango, DRF, 個人投資家
- jpk バックオフィス, Python初心者, データサイエンスに関心
- Shishizo,geoはじめて,中央線,いろいろはじめたばかり
- kanji, 機械学習,リモセン,R
- 牛島, GIS,Trajectory,UrbanComputing
- kinari 地理学, GIS, python
- **みよし([@colspan](https://twitter.com/colspan)) データ可視化, 北海道出身, 流山市在住**
- こじま([@nerimplo](https://twitter.com/nerimplo)), IT(フリーランス、不動産), 練馬, Python
- sao 土木,初心者,DX
- **homata(@homata) オープンデータ、Geo、kawasaki**
- まめ いろいろと初心者, DB, 機械学習
- ひのうえ, 初心者, マーケター
## 発表1(榎本)
- Geoデータ10分講座
- GeoPandas + KeplerGL
**発表資料**
- [発表資料](https://hackmd.io/@mamix1116/BkYU8yk9S)
- [Jupyter notebook (GitHub)](https://github.com/mamix1116/geo_python_cookbook/blob/master/notebook/KeplerGL_PersonTripOD.ipynb)
- [Demo](https://mamix1116.github.io/geo_python_cookbook/map/my_PersonTripOD_map.html) (Jupyter notebookの結果のMap)
---
- 長いほう(けーど)がlong
- 地球は丸くない(じゃがいもみたいな形)
- じゃがいもの凸凹くぼみをどう表現するの??
- ジオイド
- 地球楕円体
- 測地系というルールで決まってます
- 世界測地系
- JGD2000, JGD2011 -> 最近
- WGS84 -> GPS
- 日本測地系 (ローカル測地系)
- Tokyo -> 古い
- 測地系を変えるとずれる
- 座標系
- 地理座標系 -> 緯度経度
- 平面直角座標系 -> 狭い地域の地図
- Webメルカトル -> Web地図
- 座標系が違うとどっかいく
- http://www.epsg-registry.org/
- https://kepler.gl/
- [JupyterでKepler.glを使う](https://github.com/keplergl/kepler.gl/blob/master/docs/keplergl-jupyter/user-guide.md)
- https://www.geospatial.jp/gp_front/
- 東京都オープンデータ いろいろあるよ
- http://opendata-portal.metro.tokyo.jp/www/index.html
- 緯度経度とメートル変換(再投影・投影変換)
- http://geopandas.org/projections.html#re-projecting
- pythonからはずれるけど、ogr2ogrとかでもできる
---
## 発表2(小俣)
- 様々な図法の紹介
- Google ColaboとCartopy
- [サンプル](https://colab.research.google.com/drive/1DnNtkFgN4dtIvU5bBFiEP2XxpIpVbOmX)
- [GeoDjangoではじめる地理空間情報](https://homata.gitbook.io/geodjango/)
- [GeoDjangoでWeb地図をつくろう! by @mamix1116: 注PostGIS導入済み環境](https://medium.com/infradatachallenge/idc-river-ce0f6cd3da43)
GeoとPythonといえば…
* GIS/Mapping
* Geography / Geophysics / Geodesy / Geomatics
* Earth Sciences / Environmental Sciences
* Geovisualization
* Smart Cities
* Spatial Data / Geodata
* Geospatial Webservices
* Big Data
* Data Processing
* (Spatial) Databases
* Computer Vision
* Remote Sensing
* Image Processing
* Machine Learning / Deep Learning
* Mobile Mapping
* Indoor Mapping and Modelling
* Robotics and Mapping
![](https://i.imgur.com/i9IVhzg.png)
---
- サンプル開けますか?
- →権限がなくて開けないですね…
- 権限を閲覧可に修正しました。開けますか?
- →開けました!
- 確認ありがとうございます。
- Google Colaboratoryで地図の可視化を行うに参考となるURLはありますか?
- メルカトル図法
- 人が住んでいるところを重点的に見せるため、ある程度妥協
- 北や南はかなり歪んでいる(e.g. ロシアやアイスランドが実際よりも大きく見える)
---
日本語は恐らく `!pip install japanize-matplotlib` で文字化けしなくなると思います。
-> ありがとうございます
---
Q:Google Colaboratory を使う理由は、無料のWebホスティング環境を使えることですか?
A:無料でGPU環境を使えるというところです。
-> 手軽に環境が用意できる点
-> 今回はやりませんでしたが、機械学習との連携をしたい場合を想定をしています。
## 発表3(古川)
> 道路ネットワークの計算と表示をおこなってくれるOSMnxライブラリを使った事例紹介などを漫談します
- [発表資料](https://hackmd.io/@yfuruchin/geopy191027)
- OSMnx
- https://github.com/gboeing/osmnx
- OSMのOverpassAPIをたたくのでネット接続必要。レスポンスそんなに早くない。
- GRASS, PgRouting があるよ
- [OSRM](http://project-osrm.org/)も使えるかも
- https://pypi.org/project/osrm-py/
-
- OSMのデータ精度に依存する
- GeoPandas
- http://geopandas.org/
- [GeoPandasは100万行の夢を見るか](https://qiita.com/Yfuruchin/items/6b6f5b6e787e83ea2709)
- GISのソフトベースでしかできなかったことが、pythonでできちゃう
- 世界的なオープンソースGISカンファレンス(FOSS4G)でもワークショップをやっている
- Google colab でさっくり動くとすごい便利かも
- OSGeo財団(The Open Source Geospatial Foundation)
* [OSGeo財団の日本における公式の支部](https://www.osgeo.jp/)
* オープンソース地理空間ソフトウェアの支援と構築のために設立された財団
* FOSS4GというGISカンファレンスを開催
* GIS系のオープンソースライブラリのプロジェクトを立ち上げている
- QGIS
- 世界中でここ数年急激に利用が伸びているオープンソースGIS(位置情報システム)
https://www.qgis.org/ja/site/forusers/download.html
- 国内におけるGISソフトのGoogle Trend index
https://public.flourish.studio/visualisation/430022/
![](https://i.imgur.com/BomQqi0.gif)
---
## 発表4(三好)
発表資料 : https://hackmd.io/@colspan/one-stop-3dtiles-on-GoogleColab
Google Colaboratory : https://colab.research.google.com/drive/1zekaXKdcGFl6mlwr0E-5Wa14U7_fcPAB
- 点群データの可視化
- Cesium https://cesium.com/cesiumjs/ 3次元地図ライブラリ
- cesiumpy https://github.com/sinhrks/cesiumpy
- 3dtiles https://github.com/AnalyticalGraphicsInc/3d-tiles
- Leaflet https://leafletjs.com/
- [LuigiでPipelineをつくる](http://mattiacinelli.com/tutorial-on-luigi-pipeline-part-1-introduction/)
- ngrok https://ngrok.com/
---
---
八ッ場ダム(様)クッキーあるよー
- 先着10名様
![](https://i.imgur.com/tNIby3C.jpg)
---
# もくもく&がやがや
## 各自Geoデータの分析や可視化に挑戦してみましょう
![](https://i.imgur.com/YVNmKGL.png)
## GeoDjango
- 地図の表示をしたい
- メンバー
- TBA
## MapBox -> kepler.gl
- いじりたい
- kepler.gl をセルフホストする
- 誰かが書いてくれたDockerfile https://github.com/crazycapivara/docker-kepler.gl
- `docker pull crazycapivara/kepler.gl`
- `docker run --name kepler.gl -p 8080:80 -d crazycapivara/kepler.gl`
とりあえずDockerでできた。以下は全国のダムデータ。(kaizumaki)
![](https://i.imgur.com/YRcg1Px.png)
- 自分の[Google のロケーション履歴]を表示させようと思ったが、上記と同じく形式がGeoJsonでない、形式で、変換をしないと読み込めないので、苦戦した
- https://support.google.com/accounts/answer/3118687?hl=ja
- [GeoJSONの仕様 公式サイト](https://geojson.org/)
- [GeoJSONの仕様(日本語)](https://s.kitazaki.name/docs/geojson-spec-ja.html)
- [mamiさんの発表](https://github.com/mamix1116/geo_python_cookbook/blob/master/notebook/KeplerGL_PersonTripOD.ipynb)のパーソントリップデータ試してみる
- パーソントリップデータのURLを[第1.0版]()だと、XMLデータしかないので、[第2.2版](http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-S05-b-v2_2.html)にURLを直したい
- Jupyterからいじってみたい
- JupyterからKeplerにデータを読み込ませるときは、DFで渡せるのでGeoJsonなどのフォーマットをこだわる必要が無いのが良さ。
- →Widget表示がうまく表示できなかった...
- [OpenDroneMap](https://www.opendronemap.org/)
- [GitHub](https://github.com/OpenDroneMap)
- 使い方の整理をします
- メンバー
- @homata
まだ途中です
![](https://i.imgur.com/cAXxEky.png)
## GeoPandas🌏🐼
- なんとなく仲良くなる
- とりあえず使ってみる
- 触ってみる
- 公式Exampleは[ここ](https://geopandas.readthedocs.io/en/latest/gallery/)
- 地図上にプロットした複数の点を検索できるようなやつをつくりたい
- ふるかーさんQiitaのトレースもよいかも
- +Bokeh
- https://qiita.com/yuji38kwmt/items/4edf1d87568a860fc3b8
- folium
- 国土数値情報APIを叩くスクリプト
- https://www.gis-py.com/entry/kokudo-api
- Leafletのラッパー?であるfoliumというライブラリでインタラクティブなマップを作る。
- 作業ノートブック
- https://colab.research.google.com/drive/1oTYFauqVxJZcACFztPPFS2Ewr25u74LA
- ヒートマップをやってみたい(pon)
- http://geopandas.org/gallery/plotting_with_geoplot.html
- ![](https://i.imgur.com/y0W353v.png)
- 東京の人口密度を表示。こちらの記事の写経をしました! https://qiita.com/biskwikman/items/b09de2b470e1dabcaed2
- 得た知見
- e-statsというサイトからシェープファイルをダウンロードしgeojsonに変換して読み込み
- 東京全体だと諸島が入ってしまうのでフィルターで除外
- データの項目を削除したり追加して利用しやすくする
- 人口密度をカラースキームでわかりやすく表示
- 初心者なので、これのチュートリアル系でもやろうかな?
- とりあえず、
https://www.gis-py.com/entry/2018/10/09/115021
http://geopandas.org/gallery/plotting_with_geoplot.html
は動いた
- GeoJSONサンプルデータは[こちら](https://www.dropbox.com/s/2icd66q9v3tbhp5/geopandas_sample_data.zip?dl=0
)
- ポイント(10万個・180個)
- 六角メッシュポリゴン(6万個・60個)
- EPSG:3857
- ![](https://i.imgur.com/o6JU7QC.jpg)
- Google colb にインストールしたいけどなんか不具合があるので動かしたい
- Geoplotでエラー
- Google Colaboratory上で動かす場合は以下のコマンドを最初に打ってmoduleをinstallする必要がある
- すばらC!
- apt-getでlibproj-frb proj-data proj-bin libgeos-devを入れないとgeoplotが入らない
```
!pip install geopandas
!apt-get install libproj-dev proj-data proj-bin
!apt-get install libgeos-dev
!pip install geoplot
```
- 仙石さんのこれも参考になるかも
- [GeoPandasがうまく実行できないときの対処法](https://qiita.com/xianshiyuming/items/49b3b9b09bb92805dae4)
- >GeoPandas=0.5.0(2019年5月時点で最新)の場合には、Githubの本家から直接インストールすることをおすすめします。PyPIに登録されているversionはoveralayの関数の修正が反映されていないようですが、github上では修正後版がmasterブランチにマージされているようです。
- このサンプルでもエラーでたw
- Colaboratory上でのサンプルデータの使い方
https://qiita.com/uni-3/items/201aaa2708260cc790b8
- macでlocalに入れたい場合はここを参考に。
https://qiita.com/hiroga/items/80b03b3cbf80650c2c2d
- Google colab のGPUを焼きまくるサンプルコードつくるとか
- 自分で書いた空間結合を行うローカル環境用[サンプルコード](https://qiita.com/Yfuruchin/items/6b6f5b6e787e83ea2709#%E3%81%84%E3%81%96%E7%A9%BA%E9%96%93%E7%B5%90%E5%90%88)がGoogleでは通らないマン
```
usr/local/lib/python3.6/dist-packages/geopandas/base.py:105: UserWarning: Cannot generate spatial index: Missing package `rtree`.
warn("Cannot generate spatial index: Missing package `rtree`.")
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-9697c3c30f98> in <module>()
16
17 # 空間結合
---> 18 spj = gpd.sjoin(df_hx, df_pt, op='within')
19
20 # GeoJSONで書き出し
2 frames
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
/usr/local/lib/python3.6/dist-packages/geopandas/tools/sjoin.py in <lambda>(x)
117 # tree_idx_df == 'left'
118 idxmatch = right_df.geometry.apply(lambda x: x.bounds).apply(
--> 119 lambda x: list(tree_idx.intersection(x)) if not x == () else []
120 )
121 idxmatch = idxmatch[idxmatch.apply(len) > 0]
AttributeError: 'NoneType' object has no attribute 'intersection'
```
↑ 確かに同じエラーが出た。
- 背景もってくるのはGoogle上でできた
```
import geopandas
import contextily as ctx
df = df.to_crs(epsg=3857)
ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax)
```
![](https://i.imgur.com/oVnur32.png)
```
ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax, url=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()
```
![](https://i.imgur.com/fvQG2wn.png)
- GeoPandasでなんらかのデータ可視化(むらやん)
港区の用途地域を可視化しました!
![](https://i.imgur.com/IhY1orS.png)
何の色が何の用途地域なのか表示できていない…
## OSMnx
- とりあえず触ってみて理解を深めたい。
- 各建物などの位置情報を使って現在地からの距離の計算をしたい
- ゴール
- installのやるかたをさぐる
- XYから検索してみる
- などなど
-
- メンバー
- TBA
- 参考情報
- https://qiita.com/keijipoon/items/afa555326b1e5043588f
- [京都のある地点の経路](http://pn11.hatenablog.com/entry/2018/07/21/113742)
- [写経に使えそうな...](https://github.com/Yfuruchin/pyconjp2019_geopyrhon/blob/master/points2networkshp.ipynb)
- [公式が用意しているExample](https://github.com/gboeing/osmnx-examples)
- Install方法
- condaを使う方法
- https://osmnx.readthedocs.io/en/stable/
- https://github.com/gboeing/osmnx
- condaがあればサクッとできました。
1. `conda create -n ox -c conda-forge python=3 osmnx`
2. `conda activate ox`
3. あとはjupyter notebookをpip installすればいい。
- Colaboratoryでインストールする方法
- [そのままコピーできるColab Notebook](https://colab.research.google.com/drive/13OJuSO3BSvo8ACJEdYvBBsp0-A7By6HL)
- colaboratory install
[How to install libspatialindex on Google Collaboratory](https://stackoverflow.com/questions/48293601/how-to-install-libspatialindex-on-google-collaboratory?source=post_page---------------------------)
```
!apt-get install -qq curl g++ make
!curl -L http://download.osgeo.org/libspatialindex/spatialindex-src-1.8.5.tar.gz | tar xz
import os
os.chdir('spatialindex-src-1.8.5')
!./configure
!make
!make install
!pip install rtree
!ldconfig
from rtree import index
from rtree.index import Rtree
p = index.Property()
idx = index.Index(properties=p)
idx
```
- 公式によるExample
- https://github.com/gboeing/osmnx-examples/tree/master/notebooks
-
- 気付き
- 古川さんのスライドにもあったようにgraph_from_placeメソッドが遅い。めっちゃ遅い。`G = ox.graph_from_place('Manhattan Island, New York City, New York, USA', network_type='drive')`で2分くらいかかった。
- マンハッタン島の道路網データ全部もってくるので時間かかるのかも
- とはいえ、遅いっちゃあ遅いw
- 活用例
- 地点A,B間の最短経路を描画する
- NetworkXを別途インストール
- `conda install networkx`
- NetworkXで経路オブジェクトを作り、plot_graph_routeメソッドで描画する感じ。
- [参考ページ](https://medium.com/@bobhaffner/osmnx-intro-and-routing-1fd744ba23d8)
- やりたいこと/不明点など
- graph_from_placeメソッドからstreet networksの全リスト(?)を取得したい...
### sample
```
# 適当な自治体名を指定して、その地域の道路網を表示(データ量が多いので重い
ox.plot_graph(ox.graph_from_place('新宿区'))
# 座標値を指定してその周囲の道路網を表示
point = (35.6918383, 139.702996)
street_graph = ox.graph_from_point(point,
distance=300,
distance_type='network',
network_type='drive', # 歩道の場合は'walk'
simplify=False)
ox.plot_graph(street_graph)
```
## その他
- u1([ゆーいち](https://twitter.com/jinmopj))
- ColaboratoryでKepler.glを使う
- S05-b-10_SYUTO-1-g_PersonTripODAmount.shpだけじゃダメ
- S05-b-10_SYUTO-1-g_PersonTripODAmount.shx
- S05-b-10_SYUTO-1-g_PersonTripODAmount.dbf
- ipywidgetsが使えない
- 三好さんが紹介されていたNgrokで描画
- [GitHubに公開しました](https://github.com/jinmopj/geo/blob/master/KeplerGL_PersonTripOD_Colaboratory.ipynb)
- 「地図のお化粧」をpythonやQGISでやりたい
- 地図データ
- 色んな情報を重ね合わせて表示したい特に行政の(オープン)データ(を探す?)
- Cesiumpyのパッチを書く(@colspan)
### 3. GeoPandas
二輪version
![](https://i.imgur.com/z90iQdt.png)