首页
学习
活动
专区
工具
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.5K20

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

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

1.9K20

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)

9.3K10

利用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));     } 这个公式计算结果要比第一个好一些...,当然,最后结果经度实际上还取决于传入坐标的精度。

2.9K30

小程序怎么计算两个经纬距离

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

2.7K20

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

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

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.4K21

python对复数取绝对值来计算之间距离

参考链接: Python复数1(简介) 二维平面会涉及到两个变量x, y,并且有的时候需要计算两个二维坐标之间距离,这个时候将二维坐标转化为复数的话那么就可以使用pythonabs绝对值函数对复数取绝对值来计算两个之间距离或者是计算复数模...,当我们将两个复数对应坐标相减然后对其使用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.3K20

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

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

6.4K170

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

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

2.9K170
领券