[PYTHON] Création de données nationales sur les limites des villes / quartiers / villes / villages à partir des données nationales sur les informations numériques sur les terres par GeoPandas

Aperçu

Vous voudrez peut-être utiliser la géométrie, qui est les données nationales sur les limites de la ville / quartier / ville / village ou les données sur les limites de la préfecture, mais il peut être difficile de l'obtenir, alors prenez note.

Par exemple, les National Municipal Boundary Data fournis par ESRI Japan sont faciles à utiliser, mais ArcGIS Les conditions d'utilisation sont qu'il ne peut être utilisé qu'avec des produits / arcgis /).

Par conséquent, cette fois, en utilisant les Informations numériques sur les terres nationales (données de la zone administrative) comme source, la fonction geoPandas sera utilisée pour la géométrie. J'ai étudié comment intégrer les informations pour créer des données sur les limites des villes / quartiers / villes / villages.

Courir

[Attention] Clarification de la source (informations numériques sur les terres nationales)

--Il est nécessaire de vérifier et de respecter les Conditions d'utilisation pour les informations numériques foncières nationales. ―― Vous pouvez l'utiliser librement, y compris à des fins commerciales, mais vous devez spécifier la source. ―― Vous pouvez éditer et traiter, mais vous devez l'écrire.

Environnement d'exécution (présentation)

--Linux (en utilisant le docker, image de base: Ubuntu18.04)

Acquisition et lecture de données

-Téléchargez les données du "National and World Survey System" à partir de National Land Numerical Information et utilisez le chemin approprié. Décompressez et décompressez --Nom de fichier tel que "N03-190101_GML.zip" ――Notez que les données pour H31 sont proches de 400 Mo, ce qui est assez lourd (augmente-t-il d'année en année?)

import geopandas as gpd

gdf = gpd.read_file("/path/to/N03-19_190101.shp") #Spécifiez le fichier shp du chemin extrait
display(gdf) #Vérifiez grossièrement le contenu

	N03_001	N03_002	N03_003	N03_004	N03_007	geometry
0 Bureau de promotion générale de Hokkaido Okhotsk Aucun Kitami City 01208 POLYGON((144.08144 44.12506, 144.08143 44.125...
1 Hokkaido Okhotsk General Promotion Bureau Aucun Kitami City 01208 POLYGON((143.78333 44.18453, 143.78281 44.183...
2 Bureau de promotion générale de Hokkaido Okhotsk Aucun Amisato City 01211 POLYGONE((144.29495 44.00826, 144.29501 44.008...
3 Bureau de promotion générale de Hokkaido Okhotsk Aucun Amisato City 01211 POLYGONE((144.29602 44.01118, 144.29572 44.010...
4 Hokkaido Okhotsk Bureau de promotion générale Aucun Amisato City 01211 POLYGONE((144.29266 44.01945, 144.29295 44.018...
...	...	...	...	...	...	...
117575 Préfecture d'Okinawa Aucun 47382 POLYGON, Yonakuni-cho, Yaeyama-gun((122.98986 24.47191, 122.98999 24.471...
117576 Préfecture d'Okinawa Aucun 47382 POLYGON, Yonakuni-cho, Yaeyama-gun((122.96591 24.47171, 122.96587 24.471...
117577 Préfecture d'Okinawa Aucun 47382 POLYGONE, Yonakuni-cho, Yaeyama-gun((122.99042 24.47248, 122.99036 24.472...
117578 Préfecture d'Okinawa Aucun 47382 POLYGON, Yonakuni-cho, Yaeyama-gun((122.99804 24.47512, 122.99820 24.475...
117579 Okinawa Prefecture Aucun Aucun Affiliation indécis terre Aucun POLYGONE((127.84164 26.43531, 127.84167 26.435...

117580 rows × 6 columns

Intégration avec dissolve

gdf_dissolved = gdf.dropna(subset=['N03_007']).dissolve(by='N03_007')
display(gdf_dissolved)

	geometry	N03_001	N03_002	N03_003	N03_004
N03_007					
01101	POLYGON ((141.34233 43.06682, 141.34285 43.066...Bureau de promotion de Hokkaido Ishikari Chuo-ku, Sapporo
01102	POLYGON ((141.40839 43.18395, 141.40833 43.183...Bureau de promotion de Hokkaido Ishikari Kita-ku, Sapporo
01103	POLYGON ((141.44707 43.15616, 141.44694 43.155...Bureau de promotion de Hokkaido Ishikari Higashi-ku, Sapporo
01104	POLYGON ((141.46244 43.10010, 141.46265 43.100...Bureau de promotion de Hokkaido Ishikari Shiraishi-ku, Sapporo
01105	POLYGON ((141.38463 43.04670, 141.38479 43.046...Hokkaido Ishikari Promotion Bureau Toyohei Ward, Sapporo City
...	...	...	...	...	...
47361	MULTIPOLYGON (((126.82034 26.26934, 126.82043 ...Préfecture d'Okinawa Aucun Kumejima-cho, Shimajiri-gun
47362	MULTIPOLYGON (((127.76445 26.12312, 127.76447 ...Préfecture d'Okinawa Aucun Yaese-cho, Shimajiri-gun
47375	MULTIPOLYGON (((124.72860 24.65694, 124.72852 ...Préfecture d'Okinawa Aucun Village de Tarama, comté de Miyako
47381	MULTIPOLYGON (((123.75465 24.06330, 123.75463 ...Préfecture d'Okinawa Aucun Taketomi-cho, Yaeyama-gun
47382	MULTIPOLYGON (((123.01358 24.43628, 123.01352 ...Préfecture d'Okinawa Aucun Yonakuni-cho, Yaeyama-gun

1902 rows × 5 columns

Il se résume en un tel nombre

Supplément:

Ici, j'ai parcouru les limites de la ville, du quartier, de la ville et du village, mais si vous êtes dans la limite de la préfecture, vous pouvez le faire comme gdf.dissolve (by =" N03_001 ") → Cela a pris 12 minutes dans mon environnement. .. ..

sauvegarder

fichier shp:

gdf_dissolved.to_file("/path/to/<nom de fichier>.shp", encoding='utf-8')

geojson:

#le pilote doit être spécifié
gdf_dissolved.to_file("/path/to/<nom de fichier>.geojson", driver="GeoJSON", encoding='utf-8')

Simplifier (facultatif)

Y a-t-il beaucoup de points pour les données de limite de ville / quartier / ville / village créées ci-dessus? La taille des données est d'un ordre de grandeur plus grande que les données des limites municipales fournies par ESRI Japon (un peu plus de 6 Mo avec compression zip). Par conséquent, réduisez la taille des données en les éclaircissant si nécessaire (simplifier).

** La zone autour de la limite peut être un peu cliquetante **, alors faites attention à cela.

--Pour la GeoSeries méthode simplifiée à utiliser, les arguments tolérance: nombre (obligatoire) ʻet préserver_topologie: bool (facultatif, Vrai par défaut) ) `Précisez

Par exemple

gdf_simple = gdf_dissolved.copy()
gdf_simple['geometry'] = gdf_simple['geometry'].simplify(tolerance=0.00085)

Si vous enregistrez le gdf_simple ainsi créé en tant que fichier shp, il fera environ 12 Mo. Celui qui vient d'être dissous faisait plus de 200 Mo, donc il peut être assez léger. (C'était assez difficile d'ajuster la valeur de tolérance car je ne savais pas quoi faire ...)

Si vous visualisez ce que vous avez fait avec les paramètres ci-dessus sur la carte,

image.png

Se sentir comme. Cela dépend de la valeur de simplifier, mais à première vue, cela ressemble à ça.

Une fois étendu,

image.png

Vous pouvez voir que la zone autour de la frontière devient un peu suspecte autant que simple → Il semble nécessaire d'ajuster la tolérance et de préserver la topologie de manière appropriée en fonction de l'objectif à ce moment-là.

référence

Références telles que méthodes:

Données SIG gratuites:

Recommended Posts

Création de données nationales sur les limites des villes / quartiers / villes / villages à partir des données nationales sur les informations numériques sur les terres par GeoPandas
Essayez d'afficher les données ferroviaires des informations numériques des terres nationales en 3D
Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python
Animation des géodonnées par geopandas