postgis使用ガイド
postgis
はPostgreSQLの地理空間拡張モジュールで、幾何および地理空間タイプと関数を提供し、PostgreSQLが地理空間データを格納およびクエリできるようにします。本記事では、ServBayでpostgis
をインストールし使用する方法を詳しく紹介します。
postgisインストール
ServBayにはpostgis
拡張モジュールが付属しているので、データベースで有効にするだけです。以下はpostgis
を有効にする手順です:
PostgreSQLデータベースに接続する:
bashpsql -U your_username -d your_database
1拡張を作成する:
sqlCREATE EXTENSION postgis;
1インストールを確認する:
sql\dx
1
postgis設定
postgis
を有効にしたら、地理空間データタイプを作成および管理し、さまざまな地理空間関数を使用して操作できます。
地理空間テーブルの作成
地理空間データを含むテーブルを作成する方法の一例を示します。
テーブルの作成:
sqlCREATE TABLE locations ( id SERIAL PRIMARY KEY, name VARCHAR(100), geom GEOMETRY(Point, 4326) );
1
2
3
4
5サンプルデータの挿入:
sqlINSERT INTO locations (name, geom) VALUES ('Location A', ST_GeomFromText('POINT(116.4074 39.9042)', 4326)), ('Location B', ST_GeomFromText('POINT(121.4737 31.2304)', 4326));
1
2
3
地理空間インデックスの作成
クエリパフォーマンスを向上させるために、地理空間列にインデックスを作成することをお勧めします。
- GISTインデックスの作成:sql
CREATE INDEX idx_geom ON locations USING GIST (geom);
1
postgisを使用した地理空間クエリ
いくつかの一般的な地理空間クエリの例を示します。
距離のクエリ
- 2つの点の間の距離をクエリする:sql
SELECT ST_Distance( ST_GeomFromText('POINT(116.4074 39.9042)', 4326), ST_GeomFromText('POINT(121.4737 31.2304)', 4326) );
1
2
3
4
含有関係のクエリ
- 特定の領域内に点があるかどうかをクエリする:sql
SELECT name FROM locations WHERE ST_Contains( ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326), geom );
1
2
3
4
5
最寄りの場所のクエリ
- 特定の点の周辺にある場所をクエリする:sql
SELECT name FROM locations ORDER BY geom <-> ST_GeomFromText('POINT(116.4074 39.9042)', 4326) LIMIT 5;
1
2
3
postgisを使用した地理空間分析
postgis
は豊富な地理空間分析関数を提供します。以下はいくつかの一般的な分析機能です。
バッファー分析
- バッファーを作成する:sql
SELECT ST_Buffer(geom, 0.01) FROM locations WHERE name = 'Location A';
1
インターセクション分析
- 2つの幾何オブジェクトの交差をクエリする:sql
SELECT ST_Intersection( ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326), geom ) FROM locations WHERE name = 'Location A';
1
2
3
4
ユニオン分析
- 複数の幾何オブジェクトを結合する:sql
SELECT ST_Union(geom) FROM locations;
1
地理空間データの可視化
さまざまなGISツール(例:QGIS)やWebマッピングサービス(例:Leaflet, OpenLayers)を使用して、postgis
の地理空間データを視覚化できます。
QGISを使用する
PostgreSQLデータベースに接続する:
- QGISを開く
- 「データソースマネージャ」 -> 「PostGIS」を選択
- データベース接続情報を入力し、接続します
地理空間データをロードする:
- ロードするテーブルまたはビューを選択
- 「追加」ボタンをクリック
Leafletを使用する
- Webマップを作成する:html
<!DOCTYPE html> <html> <head> <title>Leaflet PostGIS Example</title> <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script> </head> <body> <div id="map" style="width: 600px; height: 400px;"></div> <script> var map = L.map('map').setView([39.9042, 116.4074], 10); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); // PostGISデータからマーカーを追加 var marker = L.marker([39.9042, 116.4074]).addTo(map) .bindPopup('Location A') .openPopup(); </script> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
まとめ
postgis
は強力な地理空間拡張モジュールで、シンプルな設定と使用で、PostgreSQLで効率的な地理空間データの格納とクエリを実現できます。ServBayにはpostgis
拡張モジュールが付属しているので、この記事の手順に従ってインストールと設定を行うだけで使用を開始できます。さまざまな地理空間クエリと分析機能を通じて、地理空間データをより有効に活用して、アプリケーションに信頼性のあるデータベースサポートを提供できます。