PostgreSQLで緯度経度データを扱うためのチュートリアル
PostgreSQLにおける緯度経度データ型
-
double precision
- 最も一般的なデータ型
- 15桁の精度
- 多くの場合、十分な精度
- 多くのGIS関数との互換性
-
geography
- 地球楕円体に基づく座標系
- 測地計算に最適
- より正確な距離・面積計算
- 比較的新しいデータ型
- 一部のGIS関数との互換性がない可能性
-
point
- 2次元空間の点
- 緯度経度以外にも使用可能
- シンプルなデータ型
データ型選択のポイント
- 精度
geography
:より精密な計算が必要な場合
- 機能
- 測地計算:
geography
が必要
- 測地計算:
データ型ごとの詳細
double precision
- 浮動小数点数型
- 8バイト
- 緯度経度以外に、数値データ全般に使用可能
例:
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
latitude DOUBLE PRECISION,
longitude DOUBLE PRECISION
);
geography
- 地理データ型
- 距離・面積計算の精度が向上
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
location geography(Point, 4326)
);
Point
:点4326
:WGS84座標系
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
location point
);
point
:シンプルなデータ型
データ型を選択する際は、精度、機能、互換性などを考慮する必要があります。
-- テーブル作成
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
latitude DOUBLE PRECISION,
longitude DOUBLE PRECISION
);
-- データ挿入
INSERT INTO locations (latitude, longitude) VALUES
(45.5236, -122.6750), -- ポートランド
(37.7749, -122.4194), -- サンフランシスコ
(40.7127, -74.0059); -- ニューヨーク
-- 距離計算
SELECT ST_Distance(
ST_GeographyFromText('POINT(-122.6750 45.5236)'),
ST_GeographyFromText('POINT(-74.0059 40.7127)')
);
-- 結果
-- 4,440.924 km
-- 最も近い場所の検索
SELECT * FROM locations
ORDER BY ST_Distance(location, ST_GeographyFromText('POINT(-122.6750 45.5236)'))
LIMIT 1;
-- 結果
-- id | latitude | longitude
-- -- | -- | --
-- 1 | 45.5236 | -122.6750
ST_Distance
:2つの点間の距離を計算ST_GeographyFromText
:文字列から地理データ型を作成ORDER BY
:距離でソート
注意事項
- サンプルコードはPostgreSQL 14.xを想定しています。
- GIS関数はPostgreSQLのバージョンによって異なる場合があります。
緯度経度データを扱うその他の方法
PostGIS拡張モジュール
PostGISは、PostgreSQLに空間データ型と関数群を追加する拡張モジュールです。PostGISを使用すると、より高度な空間データ処理が可能になります。
ライブラリ
PHP、Python、Javaなど、さまざまな言語で空間データ処理を行うライブラリが提供されています。これらのライブラリを使用すると、PostgreSQLと連携して緯度経度データを扱うことができます。
Webサービス
Google Maps PlatformなどのWebサービスを使用すると、緯度経度データに基づいて地図や経路検索などの機能を提供することができます。
GISソフトウェア
QGIS、ArcGISなどのGISソフトウェアを使用すると、PostgreSQLと連携して緯度経度データを可視化したり、分析したりすることができます。
方法選択のポイント
- 必要とする機能
- 開発環境
- 予算
例
- 距離計算、面積計算などの基本的な機能のみ必要であれば、PostgreSQL標準のデータ型と関数で十分
- 高度な空間データ処理が必要であれば、PostGISなどの拡張モジュールを使用
- 地図表示などの機能が必要であれば、Webサービスを使用
- GISソフトウェアは、データ可視化や分析に最適
PostgreSQLで緯度経度データを扱う方法は様々です。必要とする機能、開発環境、予算などを考慮して、最適な方法を選択することが重要です。
postgresql types latitude-longitude