python读取Excel数据将经纬度转化为实际距离,再写入Excel

从Excel导入经纬度数据,Excel文件的第一列是经度,第二列是纬度。
Excel文件链接:https://pan.baidu.com/s/1HmkDyxpU-WoO4A7KGPenYQ
提取码:kr0n

from math import radians, cos, sin, asin, sqrt
import xlrd
import numpy as np


def haversine(lon1, lat1, lon2, lat2):  # 经度1,纬度1,经度2,纬度2
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # 将十进制度数转化为弧度
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    # haversine公式
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
    c = 2 * asin(sqrt(a))
    r = 6371  # 地球平均半径,单位为公里
    return c * r * 1000


def create_data(path1):
    table1 = xlrd.open_workbook(path1).sheets()[0]  # 获取第一个sheet表
    row1 = table1.nrows  # 行数
    col1 = table1.ncols  # 列数
    points = np.zeros((row1, col1))  # 生成一个nrows行ncols列,且元素均为0的初始矩阵
    for x in range(col1):
        try:
            cols = np.matrix(table1.col_values(x))  # 把list转换为矩阵进行矩阵操作
            points[:, x] = cols  # 按列把数据存进矩阵中
        except:
            print(x)

    # print(datamatrix.shape)
    return points


path1 = "H:\Jupyter\Math\各点经纬度.xlsx"
points = create_data(path1)
# print(points)
list1 = []
list2 = []
for i in points:
    for j in points:
        lon1, lat1, lon2, lat2 = i[0], i[1], j[0], j[1]
        list1.append(haversine(lon1, lat1, lon2, lat2))
    list2.append(list1)
    list1 = []
print(list2)
output = open('make.xlsx', 'w', encoding='gbk')
for i in range(len(list2)):
    for j in range(len(list2[i])):
        output.write(str(list2[i][j]))  # write函数不能写int类型的参数,所以使用str()转化
        output.write('\t')  # 相当于Tab一下,换一个单元格
    output.write('\n')  # 写完一行立马换行
output.close()

这里的写入Excel有一些问题,打开保存的Excel之后最好再另存一下,否则打开时会报错。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
我们可以使用Python编程语言结合高德API来实现将Excel表中的地址批量转换为高德经纬度。 首先,我们需要安装pandas和requests库来处理Excel表和发送API请求。可以使用以下命令安装这些库: ```python pip install pandas requests ``` 然后,我们需要从Excel读取地址数据并进行转换。可以使用以下代码来实现: ```python import pandas as pd import requests # 读取Excel文件 data = pd.read_excel('地址表.xlsx') # 遍历每一行数据 for index, row in data.iterrows(): address = row['地址'] # 发送地址转换请求 url = 'https://restapi.amap.com/v3/geocode/geo' params = {'key': '你的高德API密钥', 'address': address} response = requests.get(url, params=params) # 解析响应并获取经纬度信息 result = response.json() if result['status'] == '1' and int(result['count']) >= 1: geocode = result['geocodes'][0] location = geocode['location'] # 更新Excel表中经纬度字段 data.at[index, '经纬度'] = location # 保存修改后的Excel文件 data.to_excel('经纬度表.xlsx', index=False) ``` 在上面的代码中,我们首先使用pandas库的`read_excel`函数读取Excel文件,并使用`iterrows`方法遍历每一行数据。然后,我们将地址数据传递给高德API的`geocode/geo`接口,并将响应中的经纬度信息更新到Excel表中的相应字段。最后,我们使用pandas的`to_excel`方法保存修改后的Excel文件。 需要注意的是,你需要将代码中的`你的高德API密钥`替换为你自己的高德API密钥,以便能够成功发送地址转换请求。此外,你还需要将代码中的`地址表.xlsx`替换为你自己的Excel文件名,以及将`经纬度表.xlsx`替换为你希望保存经纬度数据Excel文件名。 希望以上信息能够帮助你使用Python和高德API批量将Excel表中的地址转换为高德经纬度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

advancezhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值