首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Python中利用距离矩阵计算经纬点间的距离

在Python中,可以利用距离矩阵计算经纬度点之间的距离。下面是一个完善且全面的答案:

距离矩阵是一个二维数组,用于存储各个点之间的距离。在计算经纬度点之间的距离时,可以使用Haversine公式或Vincenty公式。

Haversine公式是一种用于计算球面上两点之间距离的方法,适用于小距离的计算。它基于球面三角形的边长和角度之间的关系,通过经纬度的差值计算出两点之间的距离。Haversine公式的计算公式如下:

代码语言:txt
复制
import math

def haversine(lat1, lon1, lat2, lon2):
    R = 6371  # 地球平均半径,单位为公里
    dlat = math.radians(lat2 - lat1)
    dlon = math.radians(lon2 - lon1)
    a = math.sin(dlat / 2) * math.sin(dlat / 2) + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon / 2) * math.sin(dlon / 2)
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    distance = R * c
    return distance

Vincenty公式是一种更精确的计算球面上两点之间距离的方法,适用于大距离的计算。它考虑了地球的椭球形状和赤道的扁平度,通过迭代计算出两点之间的距离。Vincenty公式的计算公式如下:

代码语言:txt
复制
import math

def vincenty(lat1, lon1, lat2, lon2):
    a = 6378137  # 赤道半径,单位为米
    b = 6356752.3142  # 极半径,单位为米
    f = 1 / 298.257223563  # 扁率
    L = math.radians(lon2 - lon1)
    U1 = math.atan((1 - f) * math.tan(math.radians(lat1)))
    U2 = math.atan((1 - f) * math.tan(math.radians(lat2)))
    sinU1 = math.sin(U1)
    cosU1 = math.cos(U1)
    sinU2 = math.sin(U2)
    cosU2 = math.cos(U2)
    lambdaL = L
    lambdaP = 2 * math.pi
    iterLimit = 100
    while abs(lambdaL - lambdaP) > 1e-12 and iterLimit > 0:
        sinLambdaL = math.sin(lambdaL)
        cosLambdaL = math.cos(lambdaL)
        sinSigma = math.sqrt((cosU2 * sinLambdaL) ** 2 + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambdaL) ** 2)
        cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambdaL
        sigma = math.atan2(sinSigma, cosSigma)
        sinAlpha = cosU1 * cosU2 * sinLambdaL / sinSigma
        cosSqAlpha = 1 - sinAlpha ** 2
        cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSqAlpha
        C = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha))
        lambdaP = lambdaL
        lambdaL = L + (1 - C) * f * sinAlpha * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM ** 2)))
        iterLimit -= 1
    if iterLimit == 0:
        return float('inf')  # 超过迭代次数,认为计算失败
    uSq = cosSqAlpha * (a ** 2 - b ** 2) / (b ** 2)
    A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)))
    B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)))
    deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM ** 2) - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma ** 2) * (-3 + 4 * cos2SigmaM ** 2)))
    distance = b * A * (sigma - deltaSigma)
    return distance

使用这两个函数,可以计算出任意两个经纬度点之间的距离。例如,计算(39.9075, 116.39723)和(31.2304, 121.4737)之间的距离,可以使用以下代码:

代码语言:txt
复制
distance = haversine(39.9075, 116.39723, 31.2304, 121.4737)
print(distance)

在云计算领域,可以将这些计算任务部署在云服务器上,利用云计算的弹性和高性能来处理大规模的距离计算任务。腾讯云提供了丰富的云计算产品,例如云服务器、云函数、云托管等,可以满足不同规模和需求的距离计算场景。

参考链接:

  • Haversine公式:https://en.wikipedia.org/wiki/Haversine_formula
  • Vincenty公式:https://en.wikipedia.org/wiki/Vincenty%27s_formulae
  • 腾讯云云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云云函数:https://cloud.tencent.com/product/scf
  • 腾讯云云托管:https://cloud.tencent.com/product/tch
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

根据两点经纬坐标计算两点间的距离

2015-12-30 08:47:44 在进行地图一类的开发中经常会遇到需要计算两点之间的距离,下来看以下如何通过经纬坐标来确定两点间的距离 首先,设两点分别为P1、P2,如果其值是用度分秒形式表示,...则需将其转换成十进制度的形式,如P1点纬度为23度30分,则其纬度值转换成十进制度的形式为23.5度。...然后,分别将两点的经度、纬度值转换成弧度制形式,如P1纬度为23.5度,转换成弧度制则为:23.5*PI / 180。...然后再分别求取两点间的纬度差(dlat)与经度差(dlon); 接下来求取两点间的正弦与余弦值,公式如下:A=sin2(dlat/2) + cos(P1LatInRad)*cos(P2LatInRad)...*Sin2(dlon/2) 接着求取两点的正切值,公式如下:C=2*Math.Atan2(Math.Sqrt(A), Math.Sqrt(1-A)) 最后返回两点间的距离:公式如下:D=EarthRadiusKm

1.6K20

根据两点的经纬度计算距离_经纬度两点距离

地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”。...平均: 纬度1度 = 大约111km 纬度1分 = 大约1.85km 纬度1秒 = 大约30.9m 根据地球上任意两点的经纬度计算两点间的距离 ---- 地球是一个近乎标准的椭球体,它的赤道半径为...如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。...,然 后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所 计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源...如果以0度经线为基 准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离 (这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。

2.3K20
  • Python 优雅地利用两点经纬度计算地理空间距离

    比如 A 点经纬度(30.553949,114.357399),B点经纬度(129.1344,25.5465),求 AB 两点之间的距离。...已知地球上任意两点(lng1,lat1),(lng2, lat2)的经纬度坐标,求两点间的距离可以利用 haversine 公式: 首先先将经纬度坐标的角度化成弧度(rlng1,rlat1),(rlng2...= sin(theta / 2) return s * s def get_distance_hav(lat0, lng0, lat1, lng1): # 用haversine公式计算球面两点间的距离...主要有以下几个功能: 地理编码:将字符串转换为地理位置 逆地理编码:用于将地理坐标转换为具体地址 计算两个点的距离:经纬度距离和球面距离 pip install安装上即可 pip install geopy...用经纬度计算地球上两点之间的距离(以不同单位表示),pip install安装即可: Python代码如下: import haversine print(tuple(haversine.Unit)

    12.2K10

    利用JS实现的根据经纬度计算地球上两点之间的距离

    最近用到了根据经纬度计算地球表面两点间距离的公式,然后就用JS实现了一下。 计算地球表面两点间的距离大概有两种办法。...第一种是默认地球是一个光滑的球面,然后计算任意两点间的距离,这个距离叫做大圆距离(The Great Circle Distance)。...,只有在处理球面上的相对点的时候,会出现问题,有一个修正的公式,因为没有需要,就没有找出来,可以在wiki上查到。...        h2 = (3*r +1)/2/s;                  return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));     } 这个公式计算出的结果要比第一个好一些...,当然,最后结果的经度实际上还取决于传入的坐标的精度。

    3.2K30

    你在小程序中怎么计算两个经纬度的距离?

    你还在为小程序中计算两个经纬度之间的距离发愁吗? 你还在为小程序中地址逆向解析发愁吗? 你还在为小程序中路线规划,地点搜索发愁吗? 好消息!好消息!...有了官方支持时的调用 1 没有官方支持时的调用 在没有官方支持时,小程序中的位置获取,可以采用腾讯地图,高德地图,百度地图都可以,但是你需要先通过小程序的wx.getLocation 获取当前的经纬度,...图1 腾讯地图的webservice api 接口 要想获得两个经纬度点时,你可以手动自己写一个获取经纬度距离的函数,代码如下: // 方法定义 lat,lng function GetDistance...API 实现自己的服务接口,如图2 腾讯地图webservice API 计算两个经纬度的距离。...如图2 腾讯地图webservice API 计算两个经纬度的距离 2 有了官方支持时的调用 最近需要做小程序的地址解析和计算距离,查看 腾讯地图开放平台时,发现平台已经支持小程序中的使用了,如图3。

    3K20

    详解马氏距离中的协方差矩阵计算(超详细)

    协方差的计算公式如下: 5.协方差矩阵 在统计学与概率论中,协方差矩阵的每个元素是各个向量元素之间的协方差,是从标量随机变量到高维度随机向量的自然推广。...假设我们有三个n维随机变量X,Y,Z(一般而言,在实际应用中这里的随机变量就是数据的不同维度。切记:协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的协方差。)...: 则n维随机变量X,Y,Z的协方差矩阵为: 其中每个元素值的计算都可以利用上面计算协方差的公式进行。...Mahalanobis)提出的,表示点与一个分布之间的距离。它是一种有效的计算两个未知样本集的相似度的方法。...3.两个样本点的马氏距离计算示例: Matlab计算协方差矩阵验算(矩阵a的列代表属性,行代表样本点): 得到协方差矩阵后,我们就可以计算出v和x之间的马氏距离了: Matlab验算:

    3.2K20

    计算两点间的距离、点到线的距离,判断一点是否在一个圆内、一点是否在一矩形内、两圆是否相交

    ) ; if (LEN5 0) { return 1; } else { return 0; } } /* 功能:计算两点间的距离...、点到线的距离,判断一点是否在一个圆内、一点是否在一矩形内、两圆是否相交 日期:2013-06-20 */ #include #include #include..."homework16.h" double main(void) { //计算两点间的距离 printf("计算两点间的距离n"); printf("请输入两的坐标:(点的格式:x,y)...(point1,point2)); printf("n"); //计算点到线的距离 fflush(stdin); printf("nn计算点到线的距离n"); printf("请输入点的坐标...//计算一点是否在一个圆内 fflush(stdin); printf("nn计算一点是否在一个圆内n"); printf("请输入点的坐标:(x,y)"); scanf("%lf,%lf

    1.2K10

    iOS开发中使用百度地图计算两点间的距离

    https://blog.csdn.net/u010105969/article/details/72457960 我们在使用到百度地图的项目中可能会需要计算两点间的距离,我们可以很容易通过百度地图的开发文档中找到计算两点间距离的方法...CLLocationDistance distance = BMKMetersBetweenMapPoints(point1,point2); 可该代码不能直接使用,因为我们还需要导入一个头文件,反正我在百度地图开发文档中没有直接找到该头文件...(可能找的不够仔细)。...最后是在iOS技术交流群被告知了这个头文件: BaiduMapAPI_Utils/BMKUtilsComponent.h 计算出的距离单位是米。...在没找到该头文件前我本来是想放弃百度地图的这个方法而使用原生的方法的,原生的方法: CLLocation *location1 = [[CLLocation alloc] initWithLatitude

    1.5K21

    python中对复数取绝对值来计算两点之间的距离

    参考链接: Python中的复数1(简介) 在二维平面会涉及到两个变量x, y,并且有的时候需要计算两个二维坐标之间的距离,这个时候将二维坐标转化为复数的话那么就可以使用python中的abs绝对值函数对复数取绝对值来计算两个点之间的距离或者是计算复数的模...,当我们将两个复数对应的坐标相减然后对其使用abs绝对值函数那么得到的就是两点之间的距离,对一个复数取绝对值得到的就是复数的模长  if __name__ == '__main__':     points...= [[1, 0], [0, 1], [2, 1], [1, 2]]     for i in points:         print(i)     # 使用python中的解包将每个点转换为复数表现形式...    points = [complex(*z) for z in points]     for i in range(len(points)):         # 计算每个复数的模长        ...points[i] = abs(points[i])     print(points)     # 比如计算(0, 1) (1, 2)两点之间的距离     point1 = complex(0, 1

    2.4K20

    ML中相似性度量和距离的计算&Python实现

    比如利用k-means进行聚类时,判断个体所属的类别,就需要使用距离计算公式得到样本距离簇心的距离,利用kNN进行分类时,也是计算个体与已知类别之间的相似性,从而判断个体的所属类别。...欧式距离(Euclidean Distance) 欧式距离是最易于理解的一种距离计算方法,也称欧几里得距离,源自欧式空间中两点的距离公式,是指在m维空间两点之间的真实距离,欧式距离在机器学习中使用的范围比较广...曼哈顿距离(Manhattan Distance) 从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?...这篇文章中曼哈顿距离,欧式距离,明式距离,切比雪夫距离的区别 给了一个很形象的解释如下: 比如,有同样两个人,在纽约准备到北京参拜天安门,同一个地点出发的话,按照欧式距离来计算,是完全一样的。 ​...Python 实现 : 相关系数可以利用numpy库中的corrcoef函数来计算 例如 对于矩阵a,numpy.corrcoef(a)可计算行与行之间的相关系数,numpy.corrcoef(a,rowvar

    6.6K170

    ML中相似性度量和距离的计算&Python实现

    比如利用k-means进行聚类时,判断个体所属的类别,就需要使用距离计算公式得到样本距离簇心的距离,利用kNN进行分类时,也是计算个体与已知类别之间的相似性,从而判断个体的所属类别。...欧式距离(Euclidean Distance) 欧式距离是最易于理解的一种距离计算方法,也称欧几里得距离,源自欧式空间中两点的距离公式,是指在m维空间两点之间的真实距离,欧式距离在机器学习中使用的范围比较广...曼哈顿距离(Manhattan Distance) 从名字就可以猜出这种距离的计算方法了。想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?...这篇文章中曼哈顿距离,欧式距离,明式距离,切比雪夫距离的区别 给了一个很形象的解释如下: 比如,有同样两个人,在纽约准备到北京参拜天安门,同一个地点出发的话,按照欧式距离来计算,是完全一样的。...Python 实现 : 相关系数可以利用numpy库中的corrcoef函数来计算 例如 对于矩阵a,numpy.corrcoef(a)可计算行与行之间的相关系数,numpy.corrcoef(a,rowvar

    3K170
    领券