0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

〇〇市のエリアに重なる図郭を抽出する

0
Last updated at Posted at 2025-12-15

はじめに

G空間情報センターから点群データをダウンロードする時、Webページに表示されるインデックスマップ上でメッシュをポチポチっとクリックしてダウンロードしたい場所を選択したりします。

image.png

そこで〇〇市のエリアのメッシュを全部選択してダウンロードするにはどうすれば良いか悩んだことはありませんか?私はありませんでした!昨日までは…

さて、のっぴきならない理由で特定の市町村の範囲と重なる点群データをダウンロードしなくてはならなくなった時にはどうすれば良いでしょうか?

点群データの分割範囲

点群データのファイル名は大抵 08OC7572.zip という形式になっています。これはデータの分割単位が国土基本図の図郭に基づいているため図郭コードがファイル名になっているものです。

08は平面直角座標の8系、OCはレベル50000、75はレベル5000、72はレベル500のコードに対応します。

国土基本図の図郭を生成

図郭のポリゴンおよびコードを生成するツールには以下のようなものがあります。

Pythonパッケージ

japan_basic_section (by のこのこさん)

平面直角座標系の番号を指定することで GeoDataFrameを生成することが出来ます。

from japan_basic_section.grid import Grid
from japan_basic_section.origin_coords import get_coord_info

system_number = 8
info = get_coord_info(system_number)

g = Grid(system_number, 50000)
grid_50000 = g.make_grid()

crs = info[1]["JGD2011"]
grid_50000 = grid_50000.set_crs(crs)

生成された GeoDataFrameの index に 図郭コード が入っています。

image.png

さて、一つの平面直角座標系の全体をグリッドに区切ると図郭数はいくつになるでしょうか。

地図情報レベル 図郭数 範囲(東西x南北)
50000 160 40km x 30km
5000 16000 4km x 3km
500 1600000 400m x 300m

レベル500ではグリッドの数が多いので DataFrame の行数も多くなります。生成にも時間がかかるのでご注意。

QGISプラグイン

Japanese Grid Mesh(by MIERUNE)

こちらはプラグインなので QGISの GUIでパラメータを指定できます。「メッシュの作成範囲」を指定できるので必要最小限の図郭で済ませることが出来て有り難いです。また地域メッシュの作成機能も備えています。

image.png

image.png

行政区域ポリゴンデータの入手

行政区域のポリゴンデータは、例によって国土数値情報ダウンロードサイトから入手します。

静岡県点群データに合わせるため、静岡県の行政区域ポリゴンを入手します。Virtual Shizuoka の計測年度に合わせて、とりあえず2020年度の行政区域データ N03-20200101_22_GML.zip をダウンロード。

2024年以降だと浜松市の区が合併して変化しているので要注意。

file_path = Path("data/国土数値情報/行政区域/N03-20200101_22_GML/N03-20_22_200101.shp")

df_admin_area = gpd.read_file(file_path, encoding='shift_jis')

# JGD2011, 平面直角座標8系に設定
df_admin_area.to_crs(epsg=6676, inplace=True)

df_admin_area['N03_003'] = df_admin_area['N03_003'].fillna('')

属性としては以下のような情報が含まれています。郡名については None になっている行にfillna()を使って空文字列を入れています。

属性名 属性情報
N03_001 都道府県名
N03_002 北海道の振興局名
N03_003 郡名
N03_004 市区町村名
N03_005 政令指定都市の行政区名
N03_006 行政区コード

plot()するとこのように描画されました。

image.png

ポリゴンの結合

シェープファイルを読み込んだ状態では、地物の数が1753個あります。同じ市町村が複数のポリゴンに分かれているためです。これらをdissolve()を使って集約、結合してみます。結合のキーとしては(郡名, 市区町村名)を指定します。

df_admin_area_dissolved = df_admin_area.dissolve(by=['N03_003', 'N03_004'])

結合後の地物の行数は43となります。

図郭ポリゴンの読み込み

今回はQGISプラグインで生成した図郭ポリゴンを利用します。

分かりやすくする為にレベル5000のデータを使っていますが、点群データのファイル名に対応させるにはレベル500の図郭コードが必要です。

file_path_grid_5000 = Path("data/国土基本図図郭/Grid_5000_shizuoka.gpkg")

df_grid_5000 = gpd.read_file(file_path_grid_5000)

QGISプラグインで生成したグリッドの数は2600個。静岡県全体を覆う図郭(下図の赤色部分)に限定すると 778個のグリッドがありました。

image.png

行政区域ポリゴンと図郭を重ねる

特定の市町村の行政区域ポリゴンに重なる部分がある図郭ポリゴンを抽出します。空間演算の交差(intersect)を計算します。

df_city = df_admin_area_dissolved.loc[('','磐田市')]

mask = df_grid_5000.geometry.intersects(df_city.geometry)

ax = df_admin_area_dissolved.plot(edgecolor='blue', alpha=0.4)

df_grid_5000[mask].plot(ax=ax, color='red', alpha=0.4)

intersectsによって、ポリゴン同士が交差している部分があればTrueが返ってきます。

Trueに対応する行を抽出すると、指定した市町村に対応するグリッドが抽出できました。

image.png

磐田市を覆う図郭はレベル5000の場合 29個となりました。

df_grid_5000[mask]['MapName'].to_list()

[
 '08OC06','08OC14','08OC15','08OC16','08OC24',
 '08OC25','08OC26','08OC34','08OC35','08OC44',
 '08OC45','08OC54','08OC55','08OC56','08OC64',
 '08OC65','08OC66','08OC73','08OC74','08OC75',
 '08OC76','08OC83','08OC84','08OC85','08OC86',
 '08OC93','08OC94','08OC95','08OC96']

To be continued...

レベル500の図郭ポリゴンを使って前述と同様に処理を行うと1514個の図郭が重なりました。

image.png

ではこの図郭コードを使って点群データをダウンロードしてみましょう(多分続く…)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?