windowsでgooglemapやgoogleearthでポリゴン作って、どのエリアかを判定できるようにする

WindowsでPostGISをインストールし、KMLファイルをインポートする手順を詳細に説明します。


1. 必要なソフトウェアの準備

1-1. PostgreSQLのインストール

  1. PostgreSQLの公式サイトからインストーラーをダウンロードします:
    https://www.postgresql.org/download/windows/

  2. ダウンロードしたインストーラーを実行し、セットアップを進めます。

    • インストール時に Stack Builder を選択してください(後でPostGISをインストールするために使用します)。

    • PostgreSQLのポート番号(デフォルト: 5432)、ユーザー名、パスワードをメモしておいてください。


1-2. PostGISのインストール

  1. PostgreSQLインストール後、Stack Builderを起動します。

  2. 使用するPostgreSQLインスタンスを選択し、次の手順で進みます。

  3. Spatial Extensions > PostGIS を選択してインストールします。

  4. インストールが完了したら、PostGIS拡張を有効にします(後述の手順にて)。


1-3. GDALのインストール

PostGISはogr2ogrツールを使用してKMLファイルをインポートできます。このツールはGDALに含まれています。

  1. OSGeo4W をインストールします。

  2. インストール時に「Advanced Install」を選択します。

  3. 検索欄で「gdal」を検索し、GDAL Command Line Tools を選択してインストールします。

  4. インストール後、ogr2ogrコマンドが使えるように環境変数にGDALのパスを追加します(例: C:\OSGeo4W64\bin)。


2. PostGISをセットアップ

2-1. PostGIS拡張を有効にする

PostGISを有効化するには、PostgreSQLのコマンドラインツール(psql)またはGUIツール(pgAdmin)を使用します。

  1. pgAdminを起動し、データベースに接続します。

  2. 新しいデータベースを作成します(例: my_spatial_db)。

  3. 作成したデータベースを選択し、以下の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にインポート

  1. コマンドプロンプトまたはPowerShellを開きます。

  2. 以下のコマンドを実行して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
  1. パラメータの説明:

    • 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ファイルのパス。

  2. インポートが成功したら、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. よくあるエラーと対処方法

  1. ogr2ogrが見つからない

    • 環境変数にGDALのパスを追加してください。

  2. PostGIS拡張が有効にならない

    • CREATE EXTENSION postgis; を実行してください。

  3. SRIDの不一致

    • -t_srs "EPSG:4326" で座標系を統一してください。


以上で、Windows環境でPostGISを使ってKMLをインポートし、Pythonで利用する方法の説明は完了です!

いいなと思ったら応援しよう!