GEOS, GDAL, PostGIS (地理情報システム) 及び関連ソフトウェアのインストール(Ubuntu 上)

このページでは,Ubuntu 上で地理情報システム(GIS)の基盤ソフトウェアである GEOS(幾何演算ライブラリ),PROJ(座標変換ライブラリ),HDF4HDF5(科学データ形式),GDAL/OGR(ラスタ・ベクタデータ変換ライブラリ),QGIS(デスクトップ GIS),PostgreSQLPostGIS(空間データベース)をインストールし,動作を確認する手順を説明する。

このページは,次の Web ページの内容をもとにしている。

https://gist.github.com/arthur-e/7d721f34e2536203513d

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは,パッケージ情報を最新の状態に保ち,インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。

Ubuntu のインストールはこちらの別ページで説明する。

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now

C/C++ コンパイラー,make,パッケージツール,その他のインストール

端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install build-essential gcc g++ make cmake libtool texinfo dpkg-dev pkg-config
sudo apt -y install swig curl
GEOS,PROJ,GDAL の最近のバージョンは,ビルドシステムとして CMake を使用する。ソースコードからのビルドを行う場合は cmake が必要である。

Python3 開発用ファイル,pip, setuptools, venv のインストール(Ubuntu 上)

Python のインストールは行わない(Ubuntu のシステム Python を用いる.)

Python, pip のコマンドでの起動のまとめ.

Ubuntu のシステム Python を用いるとき, python, pip は,次のコマンドで起動できる.

Ubuntu 23.04 以降のシステム Python は PEP 668 により外部管理環境(externally managed environment)として扱われる。そのため,pip によるシステム全体へのパッケージ導入はエラーになる。Python パッケージを追加する場合は,apt のパッケージ(例: python3-gdal, python3-geopandas)を用いるか,python3 -m venv で仮想環境を作成してその中で pip を実行する。

Ubuntu での Python 開発環境(JupyterLab, spyder, nteract)のインストール: 別ページ »で説明

Python3 開発用ファイル,pip, setuptools, venv のインストール

端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install python-is-python3 python3-dev python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential

Ubuntu で GEOS, PROJ, HDF4, HDF5, GDAL, GDAL-OGR, QGIS, PostgreSQL, PostGIS のインストール

  1. 端末を開く
  2. GEOS のインストール

    Ubuntu の公式パッケージを用いる。GEOS の Python バインディングは GEOS 本体から削除されているため,Python から幾何演算を行う場合は Shapelypython3-shapely)を用いる。

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install libgeos-dev libgeos++-dev geos-bin python3-shapely
    geos-config --version
    
    ソースコードからビルドする場合は,次のコマンドを実行する(バージョン 3.14.0 の例。GEOS 3.9 以降は CMake でビルドする)。
    cd /usr/local/
    sudo mkdir geos
    sudo chown $USER geos
    cd geos
    curl -O https://download.osgeo.org/geos/geos-3.14.0.tar.bz2
    tar -xvjof geos-3.14.0.tar.bz2
    cd geos-3.14.0
    cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
    cmake --build build -j$(nproc)
    sudo cmake --install build
    sudo ldconfig
    
  3. PROJ のインストール

    PROJ は座標参照系の変換を行うライブラリである。Ubuntu の公式パッケージを用いる。

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install proj-bin libproj-dev proj-data
    projinfo
    
    ソースコードからビルドする場合は,次のコマンドを実行する(バージョン 9.8.1 の例。PROJ 9 系は CMake でビルドし,SQLite3libtifflibcurl が必要である)。
    sudo apt -y install cmake sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev
    cd /usr/local/
    sudo mkdir proj
    sudo chown $USER proj
    cd proj
    curl -O https://download.osgeo.org/proj/proj-9.8.1.tar.gz
    tar -xzvof proj-9.8.1.tar.gz
    cd proj-9.8.1
    cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
    cmake --build build -j$(nproc)
    sudo cmake --install build
    sudo ldconfig
    
  4. HDF4, HDF5 のインストール

    HDF4,HDF5 は科学データ用のファイル形式であり,GDAL が衛星画像等の読み込みに用いる。Ubuntu の公式パッケージを用いる。

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install libhdf4-0 libhdf4-dev
    sudo apt -y install libhdf5-dev hdf5-tools
    h5dump --version
    
  5. GDAL, GDAL-OGR のインストール
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install gdal-bin libgdal-dev
    sudo apt -y install python3-gdal
    sudo apt -y install python3-geopandas
    gdalinfo --version
    
    Python の GDAL パッケージを pip で導入する場合,libgdal-dev のバージョンと同じバージョンを指定する必要がある。バージョンは gdal-config --version で確認できる。
  6. QGIS のインストール
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install qgis
    sudo apt -y install python3-qgis
    sudo apt -y install qgis-plugin-grass
    
  7. TopoJSON のインストール

    TopoJSON は GeoJSON を位相構造をもつ形式に変換するツールである。Node.js の npm を用いてインストールする。

    sudo apt -y install nodejs npm
    sudo npm install -g topojson
    
  8. PostgreSQL のインストール

    Ubuntu のバージョンごとに既定の PostgreSQL メジャーバージョンが異なる(Ubuntu 22.04 は 14,Ubuntu 24.04 は 16,Ubuntu 26.04 は 18)。メタパッケージを指定することで,そのバージョンに対応した PostgreSQL がインストールされる。

    # PostgreSQL
    sudo apt -y install postgresql postgresql-client postgresql-client-common postgresql-common
    sudo apt -y install postgresql-contrib
    sudo apt -y install postgresql-server-dev-all libpq-dev
    # PostgreSQL for Python projects
    sudo apt -y install python3-psycopg2
    
    GUI の管理ツールを使用する場合は pgAdmin 4 を用いる(pgadmin3 は開発終了により Ubuntu のパッケージから削除されている)。pgAdmin 4 は pgAdmin の APT リポジトリから導入する。
  9. PostgreSQL のバージョンとサービスの確認
    psql --version
    pg_lsclusters
    
  10. 利用者の作成と、PostgreSQL データベース管理者権限の付与
    • 利用者名: dbadmin
    • パスワード: 秘密の文字列 (コマンド実行時に設定すること)
    sudo su -c "createuser dbadmin --login --inherit --superuser --createdb --createrole --pwprompt" - postgres
    pg_lsclusters
    
  11. 試しに、データベース名 hoge のデータベース作成と確認を行う

    エラーメッセージが出なければOK

    sudo -u postgres createdb -O dbadmin hoge
    psql -h localhost -U dbadmin hoge
    \q
    
  12. PostGIS のインストール

    PostGIS のパッケージ名には,対応する PostgreSQL のメジャーバージョンが含まれる。先に psql --version で確認したメジャーバージョンに合わせて指定する(次の例は PostgreSQL 16 の場合)。

    # パッケージリストの情報を更新
    sudo apt update
    # PostgreSQL のメジャーバージョンを確認
    psql --version
    # 確認したメジャーバージョン(例: 16)に合わせて指定
    sudo apt -y install postgis postgresql-16-postgis-3 postgresql-16-postgis-3-scripts
    
    ソースコードからビルドする場合は,次のコマンドを実行する(バージョン 3.6.2 の例)。PostGIS 3.6 は PostgreSQL 12 以降,PROJ 6.1 以降,GEOS 3.8 以降を必要とする。
    sudo apt -y install libxml2-dev libgeos-dev libproj-dev libgdal-dev libjson-c-dev libprotobuf-c-dev protobuf-c-compiler
    cd /usr/local/
    sudo mkdir postgis
    sudo chown $USER postgis
    cd postgis
    curl -O https://download.osgeo.org/postgis/source/postgis-3.6.2.tar.gz
    tar -xzvof postgis-3.6.2.tar.gz
    cd postgis-3.6.2
    ./configure --with-pgconfig=/usr/bin/pg_config --with-xml2config=/usr/bin/xml2-config
    make
    sudo make install
    
  13. データベース名 hoge のデータベースに PostGIS 拡張を行ってみる

    エラーメッセージが出なければOK

    psql -h localhost -U dbadmin hoge
    create extension postgis;
    create extension postgis_topology;
    select postgis_full_version();
    \q
    
  14. データベース名 hoge のデータベースで、テーブルを定義し、レコードを挿入してみる

    エラーメッセージが出なければOK

    psql -h localhost -U dbadmin hoge
    create table P (id integer, name text, geo geography(Point, 4326));
    insert into P values(1, 'hoge park', ST_GeogFromText('SRID=4326;POINT(-50.1 50.2)'));
    select * from P;
    \q
    
  15. Pythonで、次のプログラムを実行してみる

    パスワード(下のプログラムでは「my password」)は、正しいパスワードに置き換えて実行すること

    import psycopg2
    import geopandas
    conn = psycopg2.connect(database="hoge", user="dbadmin", password="my password", host="localhost")
    q = "select * from P;"
    a = geopandas.GeoDataFrame.from_postgis(q, conn, geom_col='geo')
    print(a)
    
  16. PostGIS のテンプレートデータベースの設定

    テンプレートデータベースを作成しておくと,createdb -T により PostGIS 拡張が有効なデータベースを繰り返し作成できる。

    export POSTGIS_TEMPLATE=template_postgis
    sudo su -c "createdb $POSTGIS_TEMPLATE" - postgres
    sudo -u postgres psql -d $POSTGIS_TEMPLATE -c "CREATE EXTENSION postgis;"
    sudo -u postgres psql -d $POSTGIS_TEMPLATE -c "CREATE EXTENSION postgis_topology;"
    sudo -u postgres psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='$POSTGIS_TEMPLATE';"
    sudo -u postgres psql -d $POSTGIS_TEMPLATE -c "GRANT ALL ON geometry_columns TO PUBLIC;"
    sudo -u postgres psql -d $POSTGIS_TEMPLATE -c "GRANT SELECT ON spatial_ref_sys TO PUBLIC;"
    

    エラーメッセージが出ていないことを確認する

  17. テンプレートデータベースからのデータベース作成の確認
    sudo -u postgres createdb -O dbadmin -T template_postgis fuga
    psql -h localhost -U dbadmin fuga -c "select postgis_full_version();"