WGS84转BD09经纬度
直接上码!
import pandas as pd
import math
def wgs84_to_gcj02(wgs_lon, wgs_lat):
a = 6378245.0
ee = 0.00669342162296594323
pi = 3.14159265358979324
def transform_lon(lon, lat):
ret = 300.0 + lon + 2.0 * lat + 0.1 * lon * lon + 0.1 * lon * lat + 0.1 * math.sqrt(abs(lon))
ret += (20.0 * math.sin(6.0 * lon * pi) + 20.0 * math.sin(2.0 * lon * pi)) * 2.0 / 3.0
ret += (20.0 * math.sin(lon * pi) + 40.0 * math.sin(lon / 3.0 * pi)) * 2.0 / 3.0
ret += (150.0 * math.sin(lon / 12.0 * pi) + 300.0 * math.sin(lon / 30.0 * pi)) * 2.0 / 3.0
return ret
def transform_lat(lon, lat):
ret = -100.0 + 2.0 * lon + 3.0 * lat + 0.2 * lat * lat + 0.1 * lon * lat + 0.2 * math.sqrt(abs(lon))
ret += (20.0 * math.sin(6.0 * lon * pi) + 20.0 * math.sin(2.0 * lon * pi)) * 2.0 / 3.0
ret += (20.0 * math.sin(lat * pi) + 40.0 * math.sin(lat / 3.0 * pi)) * 2.0 / 3.0
ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 * math.sin(lat * pi / 30.0)) * 2.0 / 3.0
return ret
lon = float(wgs_lon)
lat = float(wgs_lat)
d_lat = transform_lat(lon - 105.0, lat - 35.0)
d_lon = transform_lon(lon - 105.0, lat - 35.0)
rad_lat = lat / 180.0 * pi
magic = math.sin(rad_lat)
magic = 1 - ee * magic * magic
sqrt_magic = math.sqrt(magic)
d_lat = (d_lat * 180.0) / ((a * (1 - ee)) / (magic * sqrt_magic) * pi)
d_lon = (d_lon * 180.0) / (a / sqrt_magic * math.cos(rad_lat) * pi)
gcj_lon = lon + d_lon
gcj_lat = lat + d_lat
return gcj_lon, gcj_lat
def gcj02_to_bd09(gcj_lon, gcj_lat):
x_pi = 3.14159265358979324 * 3000.0 / 180.0
z = math.sqrt(gcj_lon * gcj_lon + gcj_lat * gcj_lat) + 0.00002 * math.sin(gcj_lat * x_pi)
theta = math.atan2(gcj_lat, gcj_lon) + 0.000003 * math.cos(gcj_lon * x_pi)
bd_lon = z * math.cos(theta) + 0.0065
bd_lat = z * math.sin(theta) + 0.006
return bd_lon, bd_lat
# 输入和输出文件路径
input_file = 'input.xlsx'
output_file = 'output.xlsx'
# 读取xlsx文件
df = pd.read_excel(input_file)
# 添加新列并转换坐标
df['百度经度'] = 0.0
df['百度纬度'] = 0.0
for index, row in df.iterrows():
wgs_lon = row['经度']
wgs_lat = row['纬度']
gcj_lon, gcj_lat = wgs84_to_gcj02(wgs_lon, wgs_lat)
bd_lon, bd_lat = gcj02_to_bd09(gcj_lon, gcj_lat)
df.at[index, '百度经度'] = bd_lon
df.at[index, '百度纬度'] = bd_lat
# 写入到新的xlsx文件
df.to_excel(output_file, index=False)
print(f"转换完成,结果已保存到 {output_file}")

浙公网安备 33010602011771号