标签: haversine

沿坐标列表给出的路径矢量化半径距离计算

我有一个坐标列表,可以使用半径距离度量计算所有点之间的距离矩阵.

协调来作为一个numpy.array形状(n, 2)(latitude, longitude)对:

[[  16.34576887 -107.90942116]
 [  12.49474931 -107.76030036]
 [  27.79461514 -107.98607881]
 ...
 [  12.90258404 -107.96786569]
 [  -6.29109889 -107.88681145]
 [  -2.68531605 -107.72796034]]
Run Code Online (Sandbox Code Playgroud)

我也可以沿着坐标序列隐含的路径提取距离,如下所示:

coordinates = np.deg2rad(coordinates)
lat, lng = coordinates[:, 0], coordinates[:, 1]
diff_lat = lat[:, None] - lat
diff_lng = lng[:, None] - lng

d = np.sin(diff_lat / 2) ** 2 + np.cos(lat[:, None]) * np.cos(lat) * np.sin(diff_lng / 2) ** 2
dist_matrix = 2 * 6371 * np.arcsin(np.sqrt(d))
np.diagonal(dist_matrix, …
Run Code Online (Sandbox Code Playgroud)

python numpy distance vectorization haversine

4
推荐指数
1
解决办法
743
查看次数

成对的半径距离计算

我有两个lat和long数组.我想计算每对lat和long之间的距离,以及阵列中每隔一对lat和long.这是我的两个数组.

lat_array

array([ 0.33356456,  0.33355585,  0.33355585,  0.33401788,  0.33370132,
        0.33370132,  0.33370132,  0.33371075,  0.33371075,  0.33370132,
        0.33370132,  0.33370132,  0.33356488,  0.33356488,  0.33370132,
        0.33370132,  0.33370132,  0.33401788,  0.33362632,  0.33362632,
        0.33364007,  0.33370132,  0.33401788,  0.33401788,  0.33358399,
        0.33358399,  0.33358399,  0.33370132,  0.33370132,  0.33362632,
        0.33370132,  0.33370132,  0.33370132,  0.33370132,  0.33370132,
        0.33356488,  0.33356456,  0.33391071,  0.33370132,  0.33356488,
        0.33356488,  0.33356456,  0.33356456,  0.33356456,  0.33362632,
        0.33364804,  0.3336314 ,  0.33370132,  0.33370132,  0.33370132,
        0.33364034,  0.33359921,  0.33370132,  0.33360397,  0.33348863,
        0.33370132])
long_array

array([ 1.27253229,  1.27249141,  1.27249141,  1.27259085,  1.2724337 ,
        1.2724337 ,  1.2724337 ,  1.27246931,  1.27246931,  1.2724337 ,
        1.2724337 ,  1.2724337 , …
Run Code Online (Sandbox Code Playgroud)

python arrays performance numpy haversine

4
推荐指数
3
解决办法
2118
查看次数

VBA半正弦公式

我正在尝试将Haversine公式实现到excel函数中。它看起来像这样:

Public Function Haversine(Lat1 As Variant, Lon1 As Variant, Lat2 As Variant, Lon2 As Variant)
Dim R As Integer, dlon As Variant, dlat As Variant, Rad1 As Variant
Dim a As Variant, c As Variant, d As Variant, Rad2 As Variant

R = 6371
dlon = Excel.WorksheetFunction.Radians(Lon2 - Lon1)
dlat = Excel.WorksheetFunction.Radians(Lat2 - Lat1)
Rad1 = Excel.WorksheetFunction.Radians(Lat1)
Rad2 = Excel.WorksheetFunction.Radians(Lat2)
a = Sin(dlat / 2) * Sin(dlat / 2) + Cos(Rad1) * Cos(Rad2) * Sin(dlon / 2) * Sin(dlon / …
Run Code Online (Sandbox Code Playgroud)

excel vba formula haversine

4
推荐指数
1
解决办法
4806
查看次数

Haversine公式中的联接运算

我正在PHP中实现Haversine公式,如下所示

$result=mysqli_query($mysqli,"SELECT *,( 6371 * acos( cos( radians({$lat}) ) * cos( radians( `latitude` ) ) * cos( radians( `longitude` ) -radians({$lon}) ) +sin( radians({$lat}) ) * sin( radians( `latitude` ) ) ) ) AS distance FROM `places` HAVING distance <= {$radius} ORDER BY distance ASC") or die(mysqli_error($mysqli));
Run Code Online (Sandbox Code Playgroud)

在Haversine访存循环中,我有一个查询,它遍历Haversine的结果以选择与Haversine公式返回的ID匹配的记录。查询如下。

 while($row = mysqli_fetch_assoc($result)) 

    {
   $rest_time=$row['id'];

$result1=mysqli_query($mysqli,"SELECT * FROM my_friends  WHERE personal_id='".$personal_id."' AND id='".$rest_time."'") or die(mysqli_error($mysqli)); 

//Some operations here
    }
Run Code Online (Sandbox Code Playgroud)

如何执行Join操作将这些查询混合为一个查询?从优化的角度来看,这样做是否明智?如果第二个表有5万个用户,而第一个表有近1000条记录呢?

php mysql optimization join haversine

4
推荐指数
1
解决办法
1455
查看次数

用Python计算两个坐标之间的距离

我有一张地图,他们可以在其中找到几个点(纬度/经度)并想知道它们之间存在的距离。

那么,给定一组纬度/经度坐标,我如何在 python 中计算它们之间的距离?

python distance haversine

4
推荐指数
1
解决办法
1万
查看次数

将 sklearn 半正弦输出解释为公里

我不知道如何解释 sklearn(20.2 版)中半正弦实现的输出

文档说,“请注意,半正弦距离度量需要 [纬度,经度] 形式的数据,输入和输出都以弧度为单位。”,所以我应该能够转换为公里乘以 6371(远距离大约为半径)。

两点的功能距离计算如下:

def distance(origin, destination):
    lat1, lon1 = origin
    lat2, lon2 = destination
    radius = 6371 # km

    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))
    d = radius * c

    return d

distance([32.027240,-81.093190],[41.981876,-87.969982])
1263.103504537151
Run Code Online (Sandbox Code Playgroud)

这是正确的距离。

使用 BallTree 实现:

from sklearn.neighbors import BallTree
test_points = [[32.027240,41.981876],[-81.093190,-87.969982]]
tree = BallTree(test_points,metric = 'haversine')
results = tree.query_radius(test_points,r = 10,return_distance …
Run Code Online (Sandbox Code Playgroud)

python haversine scikit-learn

4
推荐指数
2
解决办法
2264
查看次数

如何在查询半径-BallTree sklearn中引入半径,单位为弧度或公里?

我正在处理纬度和经度数据。我使用了 BallTree,因为数据集中有很多行(32000 行)。如果我用半正矢距离构建树:

model_BTree = BallTree(np.array(points_sec_rad), metric='haversine')
Run Code Online (Sandbox Code Playgroud)

我将纬度和经度转换为弧度单位,如何将 query_radius (max_dist_rad) 应用于我想要定位的点?我使用 0.150 米作为半径,但我不确定是否应该使用弧度近似值。

ind_BTree, dist_BTree = model_BTree.query_radius(np.array(points_loc_rad), r=max_dist_rad, return_distance=True, sort_results=True)
Run Code Online (Sandbox Code Playgroud)

另外,如何限制半径内邻居的数量?谢谢

python nearest-neighbor haversine

4
推荐指数
1
解决办法
2335
查看次数

使用SQL服务器的Haversine公式找到最近的场地--vb.net

我从表单中抓取一个邮政编码.然后,我可以将此邮政编码转换为lng,lat坐标,因为我将这些邮政编码存储在表格中.

SELECT lng, lat from postcodeLngLat WHERE postcode = 'CV1'

我有另一张桌子,存放着各种场地的lng,lat.

SELECT v.lat, v.lng, v.name, p.lat, p.lng, p.postcode, 'HAVERSINE' AS distance FROM venuepostcodes v, postcodeLngLat p WHERE p.outcode = 'CB6' ORDER BY distance

我想要做的是创建一个数据网格,显示每个场地与邮政编码的距离(在这种情况下为CV1).我知道Haversine公式应该做我想要实现的目标,但我已经迷失了我应该从哪里开始将它合并到我的查询中.我认为公式需要放在我'HAVERSINE'上面的查询中.

有任何想法吗?

编辑

SELECT o.outcode AS lead_postcode, v.venue_name, 6371.0E * ( 2.0E *asin(case when 1.0E < (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat AS FLOAT))) * cos(RADIANS(CAST(o.lat AS FLOAT))) * square(sin(((RADIANS(CAST(o.lng AS FLOAT)))-(RADIANS(CAST(v.lng AS FLOAT))))/2.0E))))) then 1.0E else (sqrt(square(sin(((RADIANS(CAST(o.lat AS FLOAT)))-(RADIANS(CAST(v.lat AS FLOAT))))/2.0E)) + (cos(RADIANS(CAST(v.lat …

sql sql-server haversine

3
推荐指数
1
解决办法
3999
查看次数

atan 在半正矢公式中是如何出现的?

我对此有点陌生。我最近准备将数学方程转换为代码。所以我开始练习简单的公式,例如斐波那契数和半正矢公式。

\n\n

但我对以下参考文献中的半正弦代码有点困惑;

\n\n\n\n

一般来说,他们所做的是,

\n\n
var R = 6371e3; // metres\nvar \xcf\x861 = lat1.toRadians();\nvar \xcf\x862 = lat2.toRadians();\nvar \xce\x94\xcf\x86 = (lat2-lat1).toRadians();\nvar \xce\x94\xce\xbb = (lon2-lon1).toRadians();\n\nvar a = Math.sin(\xce\x94\xcf\x86/2) * Math.sin(\xce\x94\xcf\x86/2) +\n        Math.cos(\xcf\x861) * Math.cos(\xcf\x862) *\n        Math.sin(\xce\x94\xce\xbb/2) * Math.sin(\xce\x94\xce\xbb/2);\nvar c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n\nvar d = R * c;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我从这里得到了原始半正矢公式的参考。

\n\n

然后,注意这一行,

\n\n
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n
Run Code Online (Sandbox Code Playgroud)\n\n

它的哪一部分来自维基百科中的原始半正矢公式?我在这些图表上根本没有找到任何切线。我在这里错过了什么吗?任何建议表示赞赏。

\n

trigonometry haversine

3
推荐指数
1
解决办法
3152
查看次数

使用半正弦公式计算地理坐标距离给出了错误的输出

我正在 C# 中创建一个距离计算器,使用半正弦方程来计算经度和纬度之间的距离,但它给出了错误的输出,谁能明白为什么?第一个 long 和 lat 值是针对威尔士(班戈)的一个地方,另一个是针对英格兰(曼彻斯特)的一个地方这里是代码:

using System;

public static class Program
{
    static double toRadians(double angle)
    {
        return (angle * Math.PI) / 180;
    }

    static double CalcDistance(double lon1, double lon2, double lat1, double lat2)
    {
        lon1 = toRadians(lon1);
        lon2 = toRadians(lon2);
        lat1 = toRadians(lat1);
        lat2 = toRadians(lat2);
        //haversine formula
        double dlat, dlon;
        dlat = lat2 - lat1;
        dlon = lon2 - lon1;
        double a = Math.Pow(Math.Sin(dlat / 2), 2) *
            Math.Cos(lat1) * Math.Cos(lat2) *
            Math.Pow(Math.Sin(dlon / 2), 2); …
Run Code Online (Sandbox Code Playgroud)

c# latitude-longitude haversine

3
推荐指数
1
解决办法
109
查看次数