Pythonでボロノイ図作成

GISアプリ

 

Pythonでボロノイ図作成

Pythonを使ってボロノイ図を作成する方法についてご紹介します。
前回の記事「ボロノイ図を使った最寄り医療機関の可視化」では、ボロノイ図を用いた医療機関の可視化を紹介しましたが、今回はそのボロノイ図をPythonでどのように作成するか、ソースコードの解説を行います。

入力ファイルについて

ボロノイ図を作成するためには、「緯度」「経度」という特定のカラム名が含まれたCSVファイルが必要です。
このカラム名は漢字で固定されており、入力データに必ずこの名称で情報が存在していなければなりません。
以下のようなCSVファイル形式が適しています。

入力ファイルの例

    経度,緯度
    139.6917,35.6895
    135.5023,34.6937
    140.1234,36.5678

ソースコードの解説

以下に、Pythonを使ってボロノイ図を生成し、GeoJSON形式で出力するスクリプトの全体を示します。
このスクリプトでは、特定の形式に従ったCSVファイル(「緯度」と「経度」カラムを持つ)を読み込み、そのデータをもとにボロノイ分割を行います。

必要なライブラリ

pip install pandas geopandas scipy shapely chardet

CSVファイルの読み込み

def load_csv(file_path):
    with open(file_path, 'rb') as f:
        result = chardet.detect(f.read())
    encoding = result['encoding']
    df = pd.read_csv(file_path, encoding=encoding)
    return df

ボロノイポリゴンの生成

def generate_voronoi(df):
    points = df[['経度', '緯度']].values  # 「経度」と「緯度」のカラムを使用
    vor = Voronoi(points)
    polygons = []
    for region in vor.regions:
        if not region or -1 in region:
            continue
        polygon = [vor.vertices[i] for i in region]
        polygons.append(Polygon(polygon))
    return polygons

GeoJSONへのエクスポート

def export_to_geojson(polygons, output_file):
    gdf = gpd.GeoDataFrame(geometry=polygons)
    gdf.to_file(output_file, driver='GeoJSON', encoding='utf-8')

メイン処理

def main():
    script_path = os.path.dirname(os.path.abspath(__file__))
    csv_file = os.path.join(script_path, 'input.csv')
    geojson_file = os.path.join(script_path, 'output.geojson')
    
    df = load_csv(csv_file)
    polygons = generate_voronoi(df)
    export_to_geojson(polygons, geojson_file)
    print(f"GeoJSONファイルが{geojson_file}に保存されました。")

結論

Pythonを使って「緯度」と「経度」カラムを持つCSVファイルを基にボロノイ図を作成する方法を紹介しました。
カラム名は固定ですが、データさえ整備されていれば、このスクリプトを使用することで、簡単に領域分割が可能です。
応用例として、最寄り施設の表示や地域分析など、幅広い分野で活用できるでしょう。

#Python #データサイエンス #GIS #ボロノイ図 #プログラミング #データ可視化 #GeoJSON #地理情報

 

コメント

タイトルとURLをコピーしました