🗺️

はじめてのGeoPandas~Docker環境構築~

2024/10/25に公開

概要

GeoPandasをローカル環境で実行するためのDocker環境構築方法を紹介します。

「環境構築とか面倒!実行環境だけ欲しい!」という場合は、GoogleColabを使うのが一番手っ取り早いです。

Google Colabを使ったサンプルコードはこちらです。
GeoPandasとFoliumで地図表示.ipynb

GeoPandasとは

GeoPandasは、地理空間データを扱うためのオープンソースです。PandasとShapelyを拡張し、地理空間データの分析や可視化を可能にします。

jupyter notebookの環境構築

次のDockerfileとcompose.ymlを同階層に配置します。

Dockerfile

FROM continuumio/miniconda3

RUN set -x

RUN apt update -y && apt upgrade -y \
    && apt install -y wget sudo vim libpoppler-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN conda update -y conda && \
    conda install geopandas

RUN conda config --append channels conda-forge && \
    conda install -y \
        geodatasets \
        jupyter

このDockerfileでは、condaを使用してgeopandasconda-forgeチャンネル(地理空間Pythonパッケージが含まれるcondaのパッケージ群)をインストールします。GeoPandas公式が推奨しているため、パッケージ管理にpipではなく、condaを使用しています。

# geopandasをインストール
RUN conda update -y conda && \
    conda install geopandas

RUN conda config --append channels conda-forge && \
    conda install -y \
        geodatasets \# サンプルデータ
        jupyter# jupyter notebook

compose.yml

services:
  gis:
    build:
      context: .
    container_name: gis_container
    volumes:
      - .:/workdir
    ports:
      - "8888:8888"
    working_dir: /workdir
    command: jupyter notebook --allow-root --no-browser --port=8888 --ip=0.0.0.0
    tty: true

コンテナ起動時にjupyter notebookを起動させます。

jupyter notebook --allow-root --no-browser --port=8888 --ip=0.0.0.0

jupyter notebookコマンドのオプション内訳です。

  • --allow-root : rootユーザーでの実行を許可(セキュリティリスクがあるため、本番環境では設定しないでください)
  • --no-browser : ブラウザを自動起動しない(コンテナにはブラウザを入れていないため)
  • --port=8888 : ポート8888を使用
  • --ip=0.0.0.0 : すべてのIPアドレスからのアクセスを許可

実行手順

以下のコマンドを実行し、Dockerログに表示されるリンクにアクセスします。

docker compose build
docker compose up -d

Docker Desktopのログ内にあるリンクをクリックします。

Jupyterコンソールが表示されるので、 File > View > Notebookを選択し、ノートブックを新規作成してください。

JjupyterNotebookの実行画面が表示されます。

ログ上のトークンが見つからない場合

以下の手順でJupyterコンソールにアクセスします。

  1. ターミナルで、コンテナ内に入り?token=以下のトークンをコピー
$ docker compose exec gis bash
# トークンは毎回変わる
(base) root@xxx:/workdir# jupyter server list
Currently running servers:
http://690629e959da:8888/?token=2f48c1e64cd6d24520b7f754fdd8852139883350058b2ef5 :: /workdir
  1. http://127.0.0.1:8888にアクセス
  2. ”Password or token:”の入力欄にコピーしたトークンを貼り付けてログイン

Chromeブラウザ使用時に画面が真っ白になる場合

Chromeでlocalhostにアクセスしても、画面が真っ白で表示され、302エラーになる場合があります。この場合、キャッシュの消去とハード再読み込みを行なってください。

サンプルコード

GeoPandas公式の「Introduction to GeoPandas」にあるサンプルコードを実行してみます。

import geopandas
from geodatasets import get_path

path_to_data = get_path("nybb")
gdf = geopandas.read_file(path_to_data)

# データの内容を確認
print("カラム一覧:")
print(gdf.columns)
print("\nニューヨークの行政区表:")
gdf

ニューヨークの行政区のポリゴンデータが表示されました。

PROJエラーが出た場合

次のようなGeoPandasの依存パッケージであるPROJパスが見つからないというエラーが出ることがあります。

ERROR 1: PROJ: proj_create_from_database: Open of /opt/conda/share/proj failed

その場合、コンソール先頭にPROJのパスを指定すると解消されます。

import os
#座標変換ライブラリPROJのデータベースパスを指定する
os.environ["PROJ_LIB"]='/opt/conda/share/proj'

参考
https://gis.stackexchange.com/questions/364421/how-to-make-proj-work-via-anaconda-in-google-colab

終わりに

Dockerを使ったGeoPandasの環境構築方法を紹介しました。
参考になれば幸いです。

参考リンク

GeoPandas公式 Getting Started>Installation
https://geopandas.org/en/stable/getting_started/install.html

Discussion