Python3批量坐标转换,并输出excel文件

在地理信息分析的过程中,经常会遇到各种坐标格式的数据,在分析之前我们首先要统一底图,也就是统一坐标系。

下面以BD09转GCJ02为例,介绍python3下坐标的批量转换,并最终输出excel文件。

首先感谢指路文章:python3实现GPS经纬度坐标(WGS84)国测局火星坐标(GCJ02)百度坐标(BD09)相互转换_python 实现百度坐标(bd09)及gcj02与wgs84之间的转换的方法-CSDN博客

参考文章重点提供了坐标转换的相关参数,由于输出结果为单组数据,考虑很多情况下我们需要批量转换,所以本文重点补充了“单组数据——装入字典——输出文件”的部分,并在文件名中加入时间戳。下面直接上代码:

# -*- coding: utf-8 -*-

#准备包
import json
import requests
import math
import pandas as pd
import datetime

#转换系数
x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.00669342162296594323  # 偏心率平方

#读取文件
path01 = '/Users/oakes.zh/Documents/point.csv' #【修改】引号内路径修改为自己的文件路径
file = pd.read_csv(path01)

def bd09_to_gcj02(bd_lon, bd_lat):
    """
    百度坐标系(BD-09)转火星坐标系(GCJ-02)
    百度——>谷歌、高德
    :param bd_lat:百度坐标纬度
    :param bd_lon:百度坐标经度
    :return:转换后的坐标列表形式
    """
    x = bd_lon - 0.0065
    y = bd_lat - 0.006
    z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi)
    theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi)
    gg_lng = z * math.cos(theta)
    gg_lat = z * math.sin(theta)
    return gg_lng, gg_lat

#准备字典
lonlat_dict = {}
for x in range(len(file)):
    m = file.iloc[x, 1] #【修改】注意经度所在的列数,默认第二列
    n = file.iloc[x, 2] #【修改】注意经度所在的列数,默认第三列
    zzz = bd09_to_gcj02(m, n)
    lonlat_dict[x] = (m, n, zzz)

# 字典转换为DataFrame
df = pd.DataFrame.from_dict(lonlat_dict, orient='index')
 
# 添加或设置列名
df.columns = ['lon_old', 'lat_old', 'coord_new']
 
# 重置索引
df = df.reset_index(drop=True)

# 获取当前日期
current_date = datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S')
 
# 定义输出文件名称
df.to_excel('output_'+current_date+'.xlsx', index=True) 

最终输出的文件名类似“output_2024-07-03_22/27/20.xlsx"

注:默认分析的百度坐标数据均为国内数据。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值