hibitekitou
GeoPandas のお勉強(ゴミコードのみ)
cg |2024-05-11
import geopandas as gpd import pandas as pd import random import svgwrite import re import datetime print( datetime.datetime.now()) #基盤地図情報のgeoJSONデータを読み込み gdf = gpd.read_file('./N03-20230101_12_GML/N03-23_12_230101.geojson', encoding='SHIFT-JIS') #列の名前を変更 gdf_renamed = gdf.rename(columns={"N03_001":"Prefectures", \ "N03_002":"BranchGov", \ "N03_003":"County", \ "N03_004":"City", \ "N03_007":"AreaCode"}) #東京都以外の"City"列の名前に「区」が含まれる行の"City"列の値を"Country"と同じにする gdf_renamed.loc[ (gdf_renamed["Prefectures"]!="東京都") & (gdf_renamed['City'].str.contains("区")) , 'City'] = gdf_renamed["County"] #同じ市町村名を持つ行は一つの行にまとめる gdf_grouped = gdf_renamed.dissolve(by=['Prefectures','City'], as_index=False) #各市町村に適当すぎる色をつける hexColors = [] for i in range(len(gdf_grouped)): hexColor = '#' + format(random.randrange(255), '02x') + \ format(random.randrange(255), '02x') + \ format(random.randrange(255), '02x') hexColors.append(hexColor) cityNames = [] for i , row in gdf_grouped.iterrows(): cityNames.append( row["City"] ) pdf_colors = pd.DataFrame({ 'City':cityNames, 'Color':hexColors}) pdf_mrgedColor = pd.merge(gdf_grouped, pdf_colors ,on='City' ) gdf_withColor = gpd.GeoDataFrame(pdf_mrgedColor) #図法をWebメルカトルに gdf_WebMerc = gdf_withColor.to_crs("EPSG:3857") #ポイント削減 gds_WebMercSimple = gdf_WebMerc["geometry"].simplify(tolerance=10.) #svgファイルへの書き出し docSize = 2000 viewBoxSize = "0 0 %d %d"%(docSize, docSize) bbox = gdf_WebMerc.total_bounds xLength = bbox[2] - bbox[0] yLength = bbox[3] - bbox[1] if xLength > yLength: scale = docSize / xLength else: scale = docSize / yLength gds_WebMercSimple = gds_WebMercSimple.translate( -bbox[0] - xLength*0.5 , -bbox[1] - yLength*0.5) gds_WebMercSimple = gds_WebMercSimple.scale(scale, -scale, origin=(docSize * 0.5 ,docSize * 0.5)) gdf_WebMercDeleted = gdf_WebMerc.drop('geometry', axis=1) gdf_WebMercDeleted['geometry'] = gds_WebMercSimple dwg = svgwrite.Drawing( "chibaMapWebMelc.svg", size=( docSize , docSize ), profile='tiny') grp1 = dwg.add(dwg.g(id='市町村')) for i , row in gdf_WebMercDeleted.iterrows(): city_svg = row.geometry.svg() startIndies = [m.span() for m in re.finditer('M', city_svg)] endIndies = [m.span() for m in re.finditer('z', city_svg)] svgpath = "" for j in range(len(startIndies)): svgpath += city_svg[startIndies[j][0]:endIndies[j][1]] path = dwg.path( svgpath , stroke='none', stroke_width=3.0, fill=row['Color'], id=row['Prefectures'] + row['City']) grp1.add( path ) dwg.save() print( datetime.datetime.now())
コメント ( 0 )|Trackback ( )
« GeoPandas の...・名古屋行き »
コメント |
コメントはありません。 |
コメントを投稿する |
ブログ作成者から承認されるまでコメントは反映されません |