GEOS, GDAL, PostGIS (地理情報システム) 及び関連ソフトウェアのインストール(Ubuntu 上)
このページでは,Ubuntu 上で地理情報システム(GIS)の基盤ソフトウェアである GEOS(幾何演算ライブラリ),PROJ(座標変換ライブラリ),HDF4,HDF5(科学データ形式),GDAL/OGR(ラスタ・ベクタデータ変換ライブラリ),QGIS(デスクトップ GIS),PostgreSQL と PostGIS(空間データベース)をインストールし,動作を確認する手順を説明する。
このページは,次の Web ページの内容をもとにしている。
https://gist.github.com/arthur-e/7d721f34e2536203513d
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは,パッケージ情報を最新の状態に保ち,インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。
# パッケージリストの情報を更新
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
Python3 開発用ファイル,pip, setuptools, venv のインストール(Ubuntu 上)
Python のインストールは行わない(Ubuntu のシステム Python を用いる.)
Ubuntu のシステム Python を用いるとき, python, pip は,次のコマンドで起動できる.
- python3 (Ubuntu のシステム Python)
- pip3 (pip 3)
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 のインストール
- 端末を開く
- GEOS のインストール
Ubuntu の公式パッケージを用いる。GEOS の Python バインディングは GEOS 本体から削除されているため,Python から幾何演算を行う場合は Shapely(
python3-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 - PROJ のインストール
PROJ は座標参照系の変換を行うライブラリである。Ubuntu の公式パッケージを用いる。
# パッケージリストの情報を更新 sudo apt update sudo apt -y install proj-bin libproj-dev proj-data projinfoソースコードからビルドする場合は,次のコマンドを実行する(バージョン 9.8.1 の例。PROJ 9 系は CMake でビルドし,SQLite3,libtiff,libcurl が必要である)。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 - 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 - 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 --versionPython の GDAL パッケージを pip で導入する場合,libgdal-dev のバージョンと同じバージョンを指定する必要がある。バージョンはgdal-config --versionで確認できる。 - QGIS のインストール
# パッケージリストの情報を更新 sudo apt update sudo apt -y install qgis sudo apt -y install python3-qgis sudo apt -y install qgis-plugin-grass - TopoJSON のインストール
TopoJSON は GeoJSON を位相構造をもつ形式に変換するツールである。Node.js の npm を用いてインストールする。
sudo apt -y install nodejs npm sudo npm install -g topojson - 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-psycopg2GUI の管理ツールを使用する場合は pgAdmin 4 を用いる(pgadmin3 は開発終了により Ubuntu のパッケージから削除されている)。pgAdmin 4 は pgAdmin の APT リポジトリから導入する。 - PostgreSQL のバージョンとサービスの確認
psql --version pg_lsclusters
- 利用者の作成と、PostgreSQL データベース管理者権限の付与
- 利用者名: dbadmin
- パスワード: 秘密の文字列 (コマンド実行時に設定すること)
sudo su -c "createuser dbadmin --login --inherit --superuser --createdb --createrole --pwprompt" - postgres pg_lsclusters - 試しに、データベース名 hoge のデータベース作成と確認を行う
エラーメッセージが出なければOK
sudo -u postgres createdb -O dbadmin hoge psql -h localhost -U dbadmin hoge \q
- 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
- データベース名 hoge のデータベースに PostGIS 拡張を行ってみる
エラーメッセージが出なければOK
psql -h localhost -U dbadmin hoge create extension postgis; create extension postgis_topology; select postgis_full_version(); \q
- データベース名 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
- 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)
- 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;"エラーメッセージが出ていないことを確認する
- テンプレートデータベースからのデータベース作成の確認
sudo -u postgres createdb -O dbadmin -T template_postgis fuga psql -h localhost -U dbadmin fuga -c "select postgis_full_version();"