init: KG_ICH 项目初始化
- data/: 非遗地理编码数据(GIS shapefile + CSV) - dofile/kg_project/: 知识图谱构建代码(纳入主仓库) - dofile/visulization/: 可视化数据与路线图 - officefile/: 文献、草稿、bib 文档 - officefile/latex/: Overleaf 同步目录(独立管理,不纳入) - output/: 输出目录 - logs/: 日志目录
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
#!/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}")
|
||||
Reference in New Issue
Block a user