两个地理坐标距离计算

操作步骤:

  • 导包
    • 使用geodesic()函数
    • 或者使用great_circle
from geopy.distance import great_circle, geodesic
# 注意:两个函数得到的结果不同
print(geodesic((32.03128, 118.784149), (32.067131, 118.783966)).m)  # 计算两个坐标直线距离   # 3975.471457390853
print(great_circle((32.03128, 118.784149), (32.067131, 118.783966)).m)    # 两个函数的差别 3986.492256905095
结果:
3975.471457390853
3986.492256905095

那么,给定一组经纬度坐标的二维数组如何对每个位置的距离进行计算?

  • 注意: calculate_distance()方法使用np.linalg.norm()借用欧式距离进行计算,并不对
  • calculate_distance2()是正确方法
import numpy as np
import pandas as pd
from geopy.distance import geodesic

print(geodesic((31.237872, 121.470259), (31.246946, 121.513919)).m)  # 计算两个坐标直线距离   # 4279.081922014711

# 1.数据集 
C = np.array([[31.237872, 121.470259], [31.246946, 121.513919], [31.234472, 121.473219]], dtype=float)
city_num = C.shape[0]  # ES的数量

# 函数:计算城市之间的距离
def calculate_distance(C):
    """
    根据坐标,得出城市之间的距离矩阵
    :param C,城市的二维坐标
    :return: distance_matrix
    """
    num = city_num
    distance_matrix = np.zeros((num, num))  # 打印一个52行52列的二维数组
    for i in range(num):
        for j in range(i, num):
            distance_matrix[i][j] = distance_matrix[j][i] = np.linalg.norm(C[i] - C[j])
    return distance_matrix  # distance_matrix[i][j] = distance_matrix[j][i]表示城市i和j距离

def calculate_distance2(C):
    """
    根据坐标,得出城市之间的距离矩阵
    :param C,城市的二维坐标
    :return: distance_matrix
    """
    num = city_num
    distance_matrix = np.zeros((num, num), dtype=float)  # 打印一个52行52列的二维数组
    for i in range(num):
        for j in range(i, num):
            temp = geodesic(C[i], C[j]).m
            distance_matrix[i][j] = distance_matrix[j][i] = temp
    return distance_matrix  # distance_matrix[i][j] = distance_matrix[j][i]表示城市i和j距离

print(calculate_distance(C))
print("*"*60)
print(calculate_distance2(C))
输出:
4279.081922014711
[[0.         0.04459297 0.00450795]
 [0.04459297 0.         0.04256866]
 [0.00450795 0.04256866 0.        ]]
************************************************************
[[   0.         4279.08192201  470.77248076]
 [4279.08192201    0.         4116.51181745]
 [ 470.77248076 4116.51181745    0.        ]]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值