Pythonで地物の最大最小座標の枠に入る地物を抽出する

Pythonで地物の最大最小座標の枠に入る地物を抽出します.

# ファイル構成

project_dir
├── /data
│   ├── /R2_boundary/04_miyagi/04_miyagi.shp
│   ├── /osm/tohoku/gis_osm_roads_free_1.shp
│   └── (省略)
└── merge_bound.ipynb <- 実行用ノートブック

# 地物の最大最小座標に入るか判定

地物の最大最小座標に入るか判定します.

import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
from shapely.ops import unary_union

# osmデータのshpファイル読込
osm_gdf = gpd.read_file("./data/osm/tohoku/gis_osm_roads_free_1.shp")
display(osm_gdf.head())

# 境界データのshpファイル読込
pref_gdf = gpd.read_file("./data/R2_boundary/04_miyagi/04_miyagi.shp")
# display(pref_gdf.head(2))

# 境界データをmerge
bound = gpd.GeoSeries(unary_union(pref_gdf.geometry))
bound.crs = "epsg:4326"

# 境界データの最大最小座標
# minx, miny, maxx, maxy
bminx, bminy, bmaxx, bmaxy = bound.bounds.values[0]
# print(bminx, bminy, bmaxx, bmaxy)

# LINESTRINGの最大最小座標
osm_bounds = osm_gdf.bounds
osm_gdf_concat = pd.concat([osm_gdf, osm_bounds], axis=1)

# 境界データの最大最小座標に入るか判定
xbool = osm_gdf_concat["minx"].apply(lambda x: (x > bminx) & (x < bmaxx))
ybool = osm_gdf_concat["miny"].apply(lambda y: (y > bminy) & (y < bmaxy))
pref_minmax_gdf = osm_gdf_concat[xbool&ybool]

# 行数の確認
print(len(osm_gdf_concat), len(pref_minmax_gdf))
# 1028288 262077

# まとめ

Pythonで地物の最大最小座標の枠に入る地物を抽出しました。

# 参考サイト

Pythonで特定の地物と重なる地物を抽出する

Pythonで特定の地物と重なる地物を抽出する

Pythonで特定の地物と重なる地物を抽出します.

※ただし、時間がかかる

G空間統計の人流データを可視化していく03(OD付き滞在人口データ)

G空間統計の人流データを可視化していく03(OD付き滞在人口データ)

G空間統計の人流データで仙台市青葉区のOD付き滞在人口データについて加工します。