Closed yamamoto-ryuzo closed 10 months ago
あ!GIFにご作法が乗ってました・・・ 内容は、また、確認しようと思いますが、忘れたらいけないので投げておきます。
本日よりGIF対応版?ジオコーディングの属性定義を整理開始しました。
ジオコーディングのデータそのものではなく、それを作成した過程を共有していただく事は可能でしょうか?位置座標データ作成過程をシステム化できればと思います。
azure mapsを使ってジオコーディング結果 日本だと市区町村レベルまでしか入力できないみたい(https://learn.microsoft.com/ja-jp/azure/azure-maps/geocoding-coverage#asia-pacific)
入力1:日本東京千代田市 出力1:{'summary': {'query': '日 本 东 京 千 代 田 市', 'queryType': 'NON_NEAR', 'queryTime': 60, 'numResults': 1, 'offset': 0, 'totalResults': 1, 'fuzzyLevel': 2}, 'results': [{'type': 'Geography', 'id': 'ct4l5cvfxjS5r5lWQsVTkA', 'score': 8.2069892883, 'entityType': 'MunicipalitySubdivision', 'matchConfidence': {'score': 0.29142195913622027}, 'address': {'municipalitySubdivision': '千葉', 'municipality': '東京', 'countrySubdivision': 'Kanto', 'countrySubdivisionName': 'Kanto', 'countryCode': 'JP', 'country': '日本', 'countryCodeISO3': 'JPN', 'freeformAddress': '東京 千葉, Kanto'}, 'position': {'lat': 35.58038, 'lon': 140.11346}, 'viewport': {'topLeftPoint': {'lat': 35.64492, 'lon': 140.07999}, 'btmRightPoint': {'lat': 35.56562, 'lon': 140.14694}}, 'boundingBox': {'topLeftPoint': {'lat': 35.64492, 'lon': 140.07999}, 'btmRightPoint': {'lat': 35.56562, 'lon': 140.14694}}, 'dataSources': {'geometry': {'id': '00004153-3200-3c00-0000-000065a03f04'}}}]}
入力2:日本東京都千代田区丸の内一丁目 出力2:{'summary': {'query': '日 本 东 京 都 千 代 田 区 丸 の 内 一 丁 目', 'queryType': 'NON_NEAR', 'queryTime': 95, 'numResults': 0, 'offset': 0, 'totalResults': 0, 'fuzzyLevel': 2}, 'results': []}
国が進めているのは、アドレス・ベースレジストリの整備です。 その範疇内でジオコーディングの場合は、 https://drive.google.com/file/d/1Y4Ap3UUP72Z5xA2N_mzKC--NALKJaeTr/view?usp=drive_link こんな感じのデータを作るので、そこを検索してもらう感じになると思います。
どうしても、座標を取得したいというのなら有料サービスになるかと思います。 デジ庁案件を考えるのなら、どちらかは、戀川さんに確認してもらう必要があると思います。
明日は、こちらのアドレス・ベースレジストリの情報を充実させようかと思います。 北九州と目黒区を作成予定です。
目黒区のデータはこちらに整理いします。 住居表示:整備済み(再加工が必要)
https://catalog.registries.digital.go.jp/rc/dataset/ 必要なデータセットは 市区町村名 住居表示-住居マスター位置参照拡張 データセット 市区町村名 住居表示-街区マスター位置参照拡張 データセット
東京都 目黒区 住居表示-住居マスター位置参照拡張 データセット 【課題】街区までの日本語表示がない
【課題】街区までしかデータがないため役に立たない 東京都 目黒区 住居表示-街区マスター位置参照拡張 データセット
【住居データの整備について】 この二つをミックスして利用!できるようにするとこうなる! 目黒区 https://drive.google.com/drive/folders/1Ap3LdjcRhbvniyGIc43rLsK-OuiomXoD
北九州市のデータはこちらに整理いします。 住居表示:整備済み(再加工が必要) https://catalog.registries.digital.go.jp/rc/dataset/?q=%E5%8C%97%E4%B9%9D%E5%B7%9E&sort=score+desc%2C+metadata_modified+desc
【住居データの整備について】 北九州 https://drive.google.com/drive/folders/1UZZhHvuGBqIK8Ahlqee0eq3B4LJW6O7S
目黒区のように全域とはいかないものの、さすが北九州おおむねの人口は網羅出来てるっぽい感じ!?たぶん???
【番地データの整備について】 とりあえずベースレジストリとしては未整備となっており、今回は我々も未整備で処理でいいですかね~~~ 逆に、自治体がデータ持ってる場合は、その時に対応ということで! 課税の関係で整備している自治体も多いでしょうから。 アドレス・ベース・レジストリ データ解説書 <2022年4月 試験公開版> 抜粋
デジタル庁のアドレスベースレジストリとジオコーディングに対する考えについて
どうも、下記の通り入札が行われ、別途検証が行われているようです。たぶん???タイトルからして。。 我々が、これ以上時間かけてもたぶん、別途検証と重複するだけなので、今回は、上の案、程度で検索にかからなかったものは「NULL」でよいかと思います。
https://www2.njss.info/offers/view/27132132 ↑ 無料では閲覧に回数制限あります。
ジオコーディングデータ作成方法 居住マスタと街区マスタをリレーションしてあげるだけ・・・ リレーションが得意なのはリレーショナルデータベース、なので、今回はデータベース機能も有しているQGISで作成の例を明示
今回読み込むデータはこの2つ 下記操作を2つのファイルで実施
フィールド計算機で「町字+街区」のIDを2つのファイルで作成 「町字+街区」のIDをキーに結合
雰囲気あっているっぽい!
今回はあえてEPSGコードの変更は行わなず、元のデータを尊重する。 参考までに現在はJDG2011、整備データはJGD2000と古い。
期待通り!
ジオコーディングデータ作成方法(ChatGPT4を主に使う編)
結局、Pythonで書いた方が早かったので中止! 中止理由は、データ収集とかしてくれなかった・・・残念。
CSVデータの収集
収集対象ファイルは以下の2サイト
(住居マスター)
https://catalog.registries.digital.go.jp/rc/dataset/?q=北九州市&06_rc_type=住居表示-住居マスター位置参照拡張(市区町村)&sort=score+desc%2C+metadata_modified+desc
(街区マスター)
https://catalog.registries.digital.go.jp/rc/dataset/?q=北九州市&06_rc_type=住居表示-街区マスター位置参照拡張(市区町村)&sort=score+desc%2C+metadata_modified+desc
データファイルの結合
CSVデータのリレーション(結合)
データの確認
ジオコーディングデータ作成方法(python編)
コード等はこちら https://drive.google.com/drive/folders/1UZZhHvuGBqIK8Ahlqee0eq3B4LJW6O7S
ver2023-12-23 とりあえずファイル一覧からファイルをダウンロードして一つのファイルにまとめるところまで ver2023-12-24 とりあえず完成のは
##########################
######## 使いかた #########
##########################
### 入力
#市区町村名 住居表示-街区マスター位置参照拡張 データセット
#"gaiku_url_list.txt にURLを入力
#市区町村名 住居表示-住居マスター位置参照拡張 データセット
#"jyuukyo_url_list.txt"にURLを入力
### 出力
# 二つのデータセットを統合し、住居データとして出力
#'merged_jyuukyo.csv' ファイルが出力されます
# workフォルダには作業の状況が残ります
# ただし、work/extracted_filesフォルダ内は最後に作用した状況のみです
##################################################################
######### モジュール(module)やパッケージ(package)の読み込み #########
##################################################################
#Webページやデータを取得
import requests
#ZIPの圧縮・解凍
import zipfile
#OS依存機能を利用
import os
#データ分析作業を支援するためのモジュール
import pandas as pd
import shutil
###########################
######### 関数定義 #########
###########################
### ファイルのダウンロード
def download_file(url, local_filename):
# URLからファイルをダウンロードし、特定のローカルファイルパスに保存する
with requests.get(url, stream=True) as r:
r.raise_for_status()
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
return local_filename
### 住居表示ファイルの取得及び結合
def address_download(file_name,combined_data_file):
### work/extracted_files フォルダのクリーニング
### ※注意! フォルダ内全ての一括処理があるため必ずその都度クリーニングを行うこと
extracted_folder_path = 'work/extracted_files'
if os.path.exists(extracted_folder_path):
shutil.rmtree(extracted_folder_path)
os.makedirs(extracted_folder_path)
print(f"work/extracted_filesフォルダのクリーニングが完了しました。")
### 指定ファイル内のファイル一覧を読み込む
# ファイルを読み込みモードで開く
with open(file_name, "r") as file:
# ファイルから行を1行ずつ読み込む
file_list = file.readlines()
# 各行の末尾の改行文字を削除
file_list = [line.strip() for line in file_list]
### 読み込んだファイル一覧を順次処理
for file_path in file_list:
print(file_path)
### ファイルのダウンロード
url = file_path
local_filename = 'work/download.zip'
download_file(url, local_filename)
### ダウンロードしてZIPファイルを読み込みモードで開き解凍
with zipfile.ZipFile(local_filename, 'r') as my_zip:
# ZIPファイル内のファイル一覧を表示
file_list = my_zip.namelist()
print("ZIPファイル内のファイル一覧:")
for file_name in file_list:
print(file_name)
# ZIPファイル内の全てのファイルを解凍
my_zip.extractall('work/extracted_files')
### 所定のフォルダ内のすべてのCSVファイルを結合
### 最初のファイルの属性行を取得しそれ以降のファイルの属性行は無視
# CSVファイルが保存されているディレクトリを指定
csv_directory = 'work/extracted_files'
# 最初のCSVファイルから列名を取得
first_file = os.listdir(csv_directory)[0]
first_file_path = os.path.join(csv_directory, first_file)
first_df = pd.read_csv(first_file_path)
column_names = first_df.columns.tolist()
# 結合するための空のDataFrameを作成
combined_data = pd.DataFrame(columns=column_names)
# 指定したディレクトリ内のCSVファイルを結合
for filename in os.listdir(csv_directory):
if filename.endswith(".csv"):
file_path = os.path.join(csv_directory, filename)
if file_path == first_file_path:
# 最初のファイルはスキップして、列名を引き継ぐ
continue
df = pd.read_csv(file_path)
# 列名を引き継いで結合
combined_data = pd.concat([combined_data, df], ignore_index=True)
# 結合したデータを1つのCSVファイルに保存
combined_data.to_csv(combined_data_file, index=False)
print(f"CSVファイルの結合が完了しました。")
### CSVファイルを文字列として読み込む
df = pd.read_csv(combined_data_file,dtype=str)
# 結合したい文字列の属性を選択し、新しい文字列の属性を作成する
df['街区ユニークid'] = df['全国地方公共団体コード'] + df['町字id'] + df['街区id']
# 新しいCSVファイルに保存する
df.to_csv(combined_data_file, index=False)
print(f"街区ユニークidを追加しました。")
return
#########################
######## メイン #########
########################
try:
### work フォルダのクリーニング
work_folder_path = 'work'
if os.path.exists(work_folder_path):
shutil.rmtree(work_folder_path)
os.makedirs(work_folder_path)
print(f"workフォルダのクリーニングが完了しました。")
### 住居表示ファイルの取得及び結合
# address_download("住居表示ファイル名一覧ファイル名を指定",'結合住居表示ファイル名')
#市区町村名 住居表示-街区マスター位置参照拡張 データセット
address_download("gaiku_url_list.txt",'work/combined_gaiku.csv')
print(f"市区町村名 住居表示-街区マスターが作成されました。")
#市区町村名 住居表示-住居マスター位置参照拡張 データセット
address_download("jyuukyo_url_list.txt",'work/combined_jyuukyo.csv')
print(f"市区町村名 住居表示-住居マスターが作成されました。")
### 住居マスターに街区マスターを結合する
# 1つ目のCSVファイルを読み込む
df1 = pd.read_csv('work/combined_jyuukyo.csv')
# 2つ目のCSVファイルを読み込む
df2 = pd.read_csv('work/combined_gaiku.csv')
# 属性をキーにして結合
# 結合方式はleftのすべての行が保持
# 同じ属性が重複する場合は街区データ側に接尾辞を追加
merged_df = pd.merge(df1, df2, on='街区ユニークid', how='left', suffixes=('', '_街区'))
# 結合結果を新しいCSVファイルとして保存
merged_df.to_csv('merged_jyuukyo.csv', index=False)
print(f"居住データベースが作成されました。")
# エラー処理
except FileNotFoundError:
print(f"ファイルが見つかりません。")
except Exception as e:
print(f"エラーが発生しました: {e}")
GPT4先生にデータを検索してもらった https://chat.openai.com/share/45d15d1d-4b89-4150-ac8d-56d1f18197ac QGISでのデータ表示 小数点が勝手に切られているが、ちゃんと検索してくれていると思われる(たぶん)。 が、すごく遅い。。。実務では使えない。
https://datanorm.azurewebsites.net/api/geocode?city_block_id=3&residence_id=28&address=赤岩町
APIにも無事実装されれ多様なので、このスレッドはクローズです。
つづきは https://github.com/dx-junkyard/OpenData-Bridge-DataNorm/issues/19
こちらでジオコーディングに関する打ち合わせが出来ればと思います。
https://www.digital.go.jp/policies/data_strategy_government_interoperability_framework/ にも でアドレスベースレジストリを使えと書いてますので。 それに準じたCSVからのジオコーディングが良いと思われます。
アドレスベースレジストリの詳細はこちらから https://www.digital.go.jp/policies/base_registry_address
【住居データの整備について】 今回はこちらのみ実施! 目黒区 https://drive.google.com/drive/folders/1Ap3LdjcRhbvniyGIc43rLsK-OuiomXoD 北九州 https://drive.google.com/drive/folders/1UZZhHvuGBqIK8Ahlqee0eq3B4LJW6O7S
【番地データの整備について】・・・こちらは整備保留! 北九州を例に法務局からの公開データ属性は https://drive.google.com/file/d/1Y4Ap3UUP72Z5xA2N_mzKC--NALKJaeTr/view?usp=drive_link の感じがいいと思います。 座標は番地の重心座標です。