Files
KG_ICH/data/retry_geocoding.py
pengxiao 834cad729f init: KG_ICH 项目初始化
- data/: 非遗地理编码数据(GIS shapefile + CSV)
- dofile/kg_project/: 知识图谱构建代码(纳入主仓库)
- dofile/visulization/: 可视化数据与路线图
- officefile/: 文献、草稿、bib 文档
- officefile/latex/: Overleaf 同步目录(独立管理,不纳入)
- output/: 输出目录
- logs/: 日志目录
2026-05-30 00:52:36 +08:00

103 lines
3.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pandas as pd
import json
import time
import os
from urllib.request import urlopen, quote
# 添加skill scripts到路径
skill_dir = r'C:\Users\xiaopeng\.claude\skills\geocoding-cn\scripts'
if skill_dir not in os.sys.path:
os.sys.path.insert(0, skill_dir)
from coordinate_transform import CoordinateTransformer
# 读取数据
input_file = r'E:\Project\2026_KG_ICH\data\黑龙江国家级和省级非遗名单-地理编码-最终.xlsx'
df = pd.read_excel(input_file)
# 百度地图API配置
AK = "L5SlQ1Kwmg6zaESvmc6RKG37yK2va7Ry"
BASE_URL = 'https://api.map.baidu.com/geocoding/v3/'
def geocode_with_retry(address):
"""尝试多次地理编码,使用不同的地址格式"""
attempts = [
address, # 原始地址
f"黑龙江省{address}", # 添加省名
f"{address}黑龙江", # 省名在后
f"中国黑龙江省{address}", # 添加国家
]
for attempt in attempts:
try:
encoded_address = quote(attempt)
url = f'{BASE_URL}?address={encoded_address}&output=json&ak={AK}'
req = urlopen(url, timeout=10)
response = req.read().decode()
result = json.loads(response)
if result['status'] == 0:
location = result['result']['location']
return location['lat'], location['lng'], attempt
except Exception as e:
continue
time.sleep(0.2)
return None, None, None
# 问题记录索引(0-based
problematic_indices = [20, 127, 148, 161, 185, 199, 214, 58, 223]
print("=== 重新地理编码问题记录 ===\n")
success_count = 0
for idx in problematic_indices:
if idx >= len(df):
continue
row = df.iloc[idx]
original_address = str(row.iloc[1]) # 项目保护单位列
print(f"Row {idx+1}: {original_address}")
print(f" Old coords: {row['wgs84_lat']:.4f}N, {row['wgs84_lon']:.4f}E")
# 尝试重新地理编码
lat, lon, used_address = geocode_with_retry(original_address)
if lat and lon:
# 转换为WGS84
wgs_lon, wgs_lat = CoordinateTransformer.bd09_to_wgs84(lon, lat)
print(f" New BD09: {lat:.4f}N, {lon:.4f}E")
print(f" New WGS84: {wgs_lat:.4f}N, {wgs_lon:.4f}E")
print(f" Used address: {used_address}")
# 检查是否在合理范围内
if 43 <= wgs_lat <= 53 and 121 <= wgs_lon <= 135:
print(f" OK: Within Heilongjiang range")
# 更新数据
df.at[idx, 'bd09_lat'] = lat
df.at[idx, 'bd09_lon'] = lon
df.at[idx, 'wgs84_lat'] = wgs_lat
df.at[idx, 'wgs84_lon'] = wgs_lon
df.at[idx, 'geocode_status'] = 'success'
success_count += 1
else:
print(f" WARNING: Still outside range (43-53N, 121-135E)")
else:
print(f" FAILED: Geocoding failed")
print()
time.sleep(0.3)
# 保存更新后的文件
output_file = r'E:\Project\2026_KG_ICH\data\黑龙江国家级和省级非遗名单-地理编码-最终-修正.xlsx'
df.to_excel(output_file, index=False)
print(f"\n{'='*60}")
print(f"Correction complete!")
print(f"Successfully corrected: {success_count}/{len(problematic_indices)} records")
print(f"Saved to: {output_file}")