windowsでgooglemapやgoogleearthでポリゴン作って、どのエリアかを判定できるようにする
WindowsでPostGISをインストールし、KMLファイルをインポートする手順を詳細に説明します。
1. 必要なソフトウェアの準備
1-1. PostgreSQLのインストール
PostgreSQLの公式サイトからインストーラーをダウンロードします:
https://www.postgresql.org/download/windows/ダウンロードしたインストーラーを実行し、セットアップを進めます。
インストール時に Stack Builder を選択してください(後でPostGISをインストールするために使用します)。
PostgreSQLのポート番号(デフォルト: 5432)、ユーザー名、パスワードをメモしておいてください。
1-2. PostGISのインストール
PostgreSQLインストール後、Stack Builderを起動します。
使用するPostgreSQLインスタンスを選択し、次の手順で進みます。
Spatial Extensions > PostGIS を選択してインストールします。
インストールが完了したら、PostGIS拡張を有効にします(後述の手順にて)。
1-3. GDALのインストール
PostGISはogr2ogrツールを使用してKMLファイルをインポートできます。このツールはGDALに含まれています。
OSGeo4W をインストールします。
インストール時に「Advanced Install」を選択します。
検索欄で「gdal」を検索し、GDAL Command Line Tools を選択してインストールします。
インストール後、ogr2ogrコマンドが使えるように環境変数にGDALのパスを追加します(例: C:\OSGeo4W64\bin)。
2. PostGISをセットアップ
2-1. PostGIS拡張を有効にする
PostGISを有効化するには、PostgreSQLのコマンドラインツール(psql)またはGUIツール(pgAdmin)を使用します。
pgAdminを起動し、データベースに接続します。
新しいデータベースを作成します(例: my_spatial_db)。
作成したデータベースを選択し、以下のSQLを実行します:
CREATE EXTENSION postgis;
4.以下のSQLでPostGISが有効になったことを確認します:
SELECT postgis_full_version();
2-2. 空間テーブルの確認
PostGISを有効にすると、geometry_columnsやspatial_ref_sysなどのPostGIS固有のテーブルが作成されます。これらは地理空間データを管理するために使用されます。
3. KMLファイルをPostGISにインポート
3-1. ogr2ogrでKMLをPostGISにインポート
コマンドプロンプトまたはPowerShellを開きます。
以下のコマンドを実行してKMLファイルをPostGISにインポートします。
ogr2ogr -f "PostgreSQL" PG:"host=localhost dbname=my_spatial_db user=postgres password=your_password" \
-lco GEOMETRY_NAME=geom -nln areas -t_srs "EPSG:4326" path_to_your_file.kml
パラメータの説明:
PG:"...":PostGISデータベースへの接続情報
host=localhost:データベースサーバーのホスト名
dbname=my_spatial_db:データベース名
user=postgres:PostgreSQLユーザー名
password=your_password:ユーザーパスワード
-lco GEOMETRY_NAME=geom:geomという名前のカラムにジオメトリデータを格納。
-nln areas:新しいテーブル名をareasに設定。
-t_srs "EPSG:4326":WGS 84座標系(緯度経度)に変換。
path_to_your_file.kml:インポートするKMLファイルのパス。
インポートが成功したら、PostGISデータベース内にKMLファイルの内容が反映されます。
3-2. データ確認
pgAdminやSQLでデータが正しくインポートされたか確認します。
SELECT id, name, ST_AsText(geom) FROM areas;
これにより、ポリゴンのデータやその名称が表示されます。
4. PythonでPostGISを操作
Pythonを使って、KMLからインポートしたデータを利用してエリア判定を行うコード例を示します。
必要なライブラリのインストール
bash
コードをコピーする
pip install psycopg2
Pythonコード例
import psycopg2
# PostgreSQL接続情報
DB_HOST = 'localhost'
DB_PORT = 5432
DB_NAME = 'my_spatial_db'
DB_USER = 'postgres'
DB_PASSWORD = 'your_password'
def find_area(latitude, longitude):
try:
# PostgreSQLに接続
conn = psycopg2.connect(
host=DB_HOST,
port=DB_PORT,
database=DB_NAME,
user=DB_USER,
password=DB_PASSWORD
)
cursor = conn.cursor()
# 緯度経度を基にエリアを検索
query = """
SELECT name
FROM areas
WHERE ST_Contains(
geom,
ST_SetSRID(ST_Point(%s, %s), 4326)
);
"""
cursor.execute(query, (longitude, latitude))
result = cursor.fetchone()
# 結果を返す
if result:
return f"指定された緯度経度は「{result[0]}」に該当します。"
else:
return "該当するエリアが見つかりませんでした。"
except Exception as e:
return f"エラーが発生しました: {e}"
finally:
if cursor:
cursor.close()
if conn:
conn.close()
# サンプルの緯度経度
latitude = 35.2
longitude = 139.3
# エリア判定を実行
print(find_area(latitude, longitude))
5. よくあるエラーと対処方法
ogr2ogrが見つからない
環境変数にGDALのパスを追加してください。
PostGIS拡張が有効にならない
CREATE EXTENSION postgis; を実行してください。
SRIDの不一致
-t_srs "EPSG:4326" で座標系を統一してください。
以上で、Windows環境でPostGISを使ってKMLをインポートし、Pythonで利用する方法の説明は完了です!