Javascript (C3, D3_地図のお試し03)
■表示の線幅の問題だった。
前々回に見た日本地図の細部がつぶれているように見えたので、あれこれと試しているけど、結論としてただの線の設定の問題だった。
なお、地理院地図Vectorのサイトでjsonデータとして保存できていたのは地図のデザインファイル(表示設定のようなもの)で、表示している地図データそのものが保存されていたわけではなかった。見える範囲で画像としての保存はできたので、一部地域を使うだけなら、このサイトで編集すれば十分かと思う。
前回や前々回で見ていた画像が下のようなもの。このとき、線の幅の設定が、.attr("stroke-width", 0.5) となっていた。

これを0.05に変えると下になる。

上の図で黒くつぶれているように見えたのは線が太すぎただけで、データとしては精度が高いものだった。
そもそもどんなデータが欲しいか考えてみたら、このくらいの精度のものがあればよい(だいたい100万分の1くらい。10kmが1cm)。ので、上の日本地図データでも十分かと思う。

線の幅が原因と気づかずに、このくらいの地図データを探したら、同じく国土地理院のサイトで地球地図日本というデータもあった。こちらはdbf, prj, shp, shx拡張子の4つのファイルのダウンロードとなる。
Chat GPTで表示の仕方やgeojsonへの変換の仕方を聞いて確認を進めた。下のPythonコードがdbf, prj, shp, shx拡張子ファイルからgeojsonへの変換。
import geopandas as gpd
import pandas as pd
# 各Shapefileを読み込み
miscl = gpd.read_file("sample69-2_miscl_jpn.shp")
rail = gpd.read_file("sample69-2_raill_jpn.shp")
coast = gpd.read_file("sample068_coastl_jpn.shp")
miscl["type"] = "miscl"
rail["type"] = "rail"
coast["type"] = "coast"
# すべてを結合(同じ座標系ならOK)
merged = gpd.GeoDataFrame(pd.concat([miscl, rail, coast], ignore_index=True))
# CRS(座標系)が揃っていない場合は統一
merged = merged.to_crs(miscl.crs)
# GeoJSONに出力
merged.to_file("merged_map.geojson", driver="GeoJSON")
print("✅ マージ完了:merged_map.geojson を作成しました")
作成したgeojsonを表示させると下になる(最大まで拡大した状態)。100万分の1くらいのデータはある。

あと、こちらのデータは交通や水系といったデータもあるので、それを重ね合わせることもできた。そういった情報も追加できるならこの地球地図日本データを使おうかと思う。
