Geo+Python

誰でも編集可能です。 :pencil2: / :book: アイコンからMarkdownで書けます。
みんなで作るログにご協力ください。:pray:

このノートのリンクは
bit.ly/20191027geo

開催概要

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

:link: Connpass

:link: GooglePhotos 191027Geo+Python

開催概要

日時: 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」 の内容をもとに、その解説とゆるいハンズオンを行います。

ここ数年のオープンデータ推進の成果として、公的機関から位置や区域に関する地理空間情報(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」のご案内(※音声電話認証が必要です)はコチラ
  • 飲食はOKですが、通常の範囲内でおやつ程度でおねがいします。
  • 自販機はありますが、生協はしまってます、学外のコンビニちょっと遠いので、買ってくるといいと思います。
  • 途中入退場可です。
  • リクルーティング目的での参加はご遠慮下さい
  • 忘れものをしても、自己責任です。対応出来ませんのでご了承ください。

タイムライン

  • 13:00-15:00 Geo + Python 解説
  • 15:00-17:30 やってみよう!

      - もくもく&がやがや 各自Geoデータの分析や可視化に挑戦してみましょう。

      - 適宜サポートします。
  • 17:30-18:00 共有
  • 18:00 撤収

参加者

自分を表すキーワード3つ 書いて下さい。
呼ばれたい名前でOKです。本名フルネームでなくてもOKです。
SNSなどリンクがあればフォローしやすいです。

太字は発表者さん

当日みんなで追記する

  • 呼ばれたい名前 + 自分を表すキーワード3つ AAA, BBB, CCC
  • 榎本真美(Mami). 土木インフラ, 地図, aibo
  • Semple 不動産, 初心者, データ取引
  • Yoshi 通信会社, 位置情報, AI
  • Otsuka 不動産, 地図, 衛星画像
  • u1(ゆーいち) + 建築不動産, 池袋, Quantopianに最近興味津々
  • さかた 土木, 赤羽, 図書館
  • nitsumari 2019年始動,ポンコツ,重機
  • ふるかー, Openなにがし, GIS, シビックテック
  • Kenichi 土木, 百合ヶ丘, 初心者
  • Pon geo初心者,CG,Houdini,@Pon__CG
  • 30 商圏分析,GPS,Python初心者
  • 下村 プログラマ, パズル, ゲーム
  • yasu, 通信会社、キャッシュレス、営業
  • kazu, 近道・抜け道調べ、オリエンテーリング、Ansible
  • ぶらっく 初心者、デザイン、CG
  • むらやん, ゼネコン, 技術開発, 業界のIT推進したい
  • kaizumaki + JS,Django,シビックテック
  • しんせいたろう モグモグDjango, DRF, 個人投資家
  • jpk バックオフィス, Python初心者, データサイエンスに関心
  • Shishizo,geoはじめて,中央線,いろいろはじめたばかり
  • kanji, 機械学習,リモセン,R
  • 牛島, GIS,Trajectory,UrbanComputing
  • kinari 地理学, GIS, python
  • みよし(@colspan) データ可視化, 北海道出身, 流山市在住
  • こじま(@nerimplo), IT(フリーランス、不動産), 練馬, Python
  • sao 土木,初心者,DX
  • homata(@homata) オープンデータ、Geo、kawasaki
  • まめ いろいろと初心者, DB, 機械学習
  • ひのうえ, 初心者, マーケター

発表1(榎本)

  • Geoデータ10分講座
  • GeoPandas + KeplerGL

発表資料



発表2(小俣)

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


  • サンプル開けますか?

    • →権限がなくて開けないですね…
    • 権限を閲覧可に修正しました。開けますか?
    • →開けました!
    • 確認ありがとうございます。
    • Google Colaboratoryで地図の可視化を行うに参考となるURLはありますか?
  • メルカトル図法

    • 人が住んでいるところを重点的に見せるため、ある程度妥協
    • 北や南はかなり歪んでいる(e.g. ロシアやアイスランドが実際よりも大きく見える)

日本語は恐らく !pip install japanize-matplotlib で文字化けしなくなると思います。
-> ありがとうございます


Q:Google Colaboratory を使う理由は、無料のWebホスティング環境を使えることですか?
A:無料でGPU環境を使えるというところです。
-> 手軽に環境が用意できる点
-> 今回はやりませんでしたが、機械学習との連携をしたい場合を想定をしています。

発表3(古川)

道路ネットワークの計算と表示をおこなってくれるOSMnxライブラリを使った事例紹介などを漫談します


発表4(三好)

発表資料 : https://hackmd.io/@colspan/one-stop-3dtiles-on-GoogleColab
Google Colaboratory : https://colab.research.google.com/drive/1zekaXKdcGFl6mlwr0E-5Wa14U7_fcPAB



八ッ場ダム(様)クッキーあるよー

  • 先着10名様

もくもく&がやがや

各自Geoデータの分析や可視化に挑戦してみましょう

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)
  • 自分の[Google のロケーション履歴]を表示させようと思ったが、上記と同じく形式がGeoJsonでない、形式で、変換をしないと読み込めないので、苦戦した

  • GeoJSONの仕様 公式サイト

  • mamiさんの発表のパーソントリップデータ試してみる

    • パーソントリップデータのURLを第1.0版だと、XMLデータしかないので、第2.2版にURLを直したい
  • Jupyterからいじってみたい

    • JupyterからKeplerにデータを読み込ませるときは、DFで渡せるのでGeoJsonなどのフォーマットをこだわる必要が無いのが良さ。
    • →Widget表示がうまく表示できなかった
  • OpenDroneMap

    • GitHub
    • 使い方の整理をします
    • メンバー
      • @homata

    まだ途中です

GeoPandas🌏🐼

!pip install geopandas
!apt-get install libproj-dev proj-data proj-bin
!apt-get install libgeos-dev
!pip install geoplot
  • 仙石さんのこれも参考になるかも

    • GeoPandasがうまく実行できないときの対処法
    • 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を焼きまくるサンプルコードつくるとか

  • 自分で書いた空間結合を行うローカル環境用サンプルコードが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)

ax = df.plot(figsize=(10, 10), alpha=0.5, edgecolor='k')
ctx.add_basemap(ax, url=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()

  • GeoPandasでなんらかのデータ可視化(むらやん)
    港区の用途地域を可視化しました!

    何の色が何の用途地域なのか表示できていない…

OSMnx

  • とりあえず触ってみて理解を深めたい。

  • 各建物などの位置情報を使って現在地からの距離の計算をしたい

  • ゴール

    • installのやるかたをさぐる
    • XYから検索してみる
    • などなど
  • メンバー

    • TBA
  • 参考情報

  • Install方法

  • Colaboratoryでインストールする方法

  • colaboratory install
    How to install libspatialindex on Google Collaboratory

    ​​​​!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

  • 気付き

    • 古川さんのスライドにもあったように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メソッドで描画する感じ。
      • 参考ページ
  • やりたいこと/不明点など

    • 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(ゆーいち)
    • 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に公開しました
  • 「地図のお化粧」をpythonやQGISでやりたい
  • 地図データ
    • 色んな情報を重ね合わせて表示したい特に行政の(オープン)データ(を探す?)
  • Cesiumpyのパッチを書く(@colspan)

3. GeoPandas

二輪version

Select a repo