问题标签 [haversine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
48 回答
998431 浏览

algorithm - 计算两个经纬度点之间的距离?(Haversine 公式)

如何计算经纬度指定的两点之间的距离?

为了澄清起见,我想要以公里为单位的距离;这些点使用 WGS84 系统,我想了解可用方法的相对准确性。

0 投票
3 回答
4829 浏览

google-maps - 谷歌地图是否计算了错误的距离?

我已经设法得到两个函数来计算谷歌地图上两点之间的距离。一个是我从网络上的不同地方收集到的(偷来的),另一个是使用 Google Maps API 中的 GLatLng.distanceFrom 方法。

我使用两个函数的原因是因为我注意到我从 Google 获得的结果有些奇怪,例如,英国 Lands End 和 John O Groats 之间的距离返回如下

  • 我的功能:985km
  • 谷歌:986公里
  • 维基百科:970公里

与 Wikipedia 结果的 15/16km 差异是因为 Google 返回的位置结果距离实际的 John O Groats 大约 15 公里。所以这是正确的。

所以然后我测试了伦敦和米兰之间的距离并得到了

  • 我的功能:1232km
  • 谷歌:1234公里
  • Wolfram Alpha:958.5公里

所以有人在250多公里之外。然后我尝试从伦敦到纽约

  • 我的功能:8244km
  • 谷歌:8254公里
  • 沃尔夫拉姆阿尔法:5581公里

一般来说,伦敦和纽约之间的距离被认为在 5560 公里左右。但现在我的功能和谷歌功能似乎都偏离了标准。

我正在使用的功能可以在这里找到。我向作者道歉,没有链接到原始网站,但布局确实令人困惑。我正在使用 distHaversine 函数。

我必须承认,数学远远超出了我的舒适度,但我明白了要点,据我所知,谷歌也使用了 Haversine 方法。我也知道它可能会下降约 0.3%,但这并不能解释我所看到的差异。而且我对它有时正确,有时远离通常规定的地方之间的距离这一事实感到更加困惑。看起来距离越远,距离越远。

那么谁错了。谷歌和我正在使用的功能,还是其他人?

0 投票
3 回答
2450 浏览

php - 计算起点半径内位置的最佳方法

我的目标是在我的最新项目中创建一个功能,最好使用 PHP。当每个用户注册时,他们将输入他们的邮政编码。然后希望我将使用 Open Street Map 将其转换为纬度/经度。

无论如何,我希望能够找出位于当前用户附近的其他用户。我见过很多人使用 Haversine 公式,但这意味着用户查询了其他所有用户的详细信息以计算距离。我可以缓存它,但随着新用户的注册,它很快就会过时。

运行以下查询会对我的系统产生什么样的影响?

这是从某人的博客中提取的。

我没有任何关于注册率或用户数量的数据,因为它仍在开发中。

如果我能使用任何反馈或其他方法在特定范围内找到匹配的用户,我将不胜感激。

0 投票
1 回答
141 浏览

sql-server-2005 - 如何在“动态”中返回具有在存储过程中生成的值的附加列?

我在 SQL 2005 中有一个使用 Haversine 公式计算距离的存储过程。一切都很好,但我想用我的结果集返回计算出的距离。如何添加该列/值对?

任何指针?包括问这个问题的正确方法?

(哦,是的,这不是存储过程,因为我直接使用查询,这就是我粘贴在这里的内容。)

0 投票
1 回答
5110 浏览

sql-server-2005 - 使用纬度和经度的两个位置之间的距离与谷歌所说的相差甚远

我花了几天时间试图解决这个问题,但似乎无法确定问题所在。我有一个 SQL 2005 数据库,将纬度和经度存储为 Decimal(18,8),所有这些都是通过查询 Google 获得的。

对于这两个地点:从:10715 Downsville Pike Ste 100 MD 21740 到:444 East College Ave Ste 120 State College PA, 16801

考虑到距离将是“乌鸦飞”,我的结果还有很长的路要走。在此示例中,我的结果显示为 21.32 英里,但 Google 地图显示为 144 英里。

我认为最令人沮丧的是我发现了这个网站:http: //jan.ucc.nau.edu/~cvm/latlongdist.html并得出了与我几乎完全相同的结果。

这是我的功能和查询:

函数: 计算距离

纬度加距离

经度加距离

询问:

0 投票
2 回答
2806 浏览

iphone - 是否可以在 Objective-C 中实现 Haversine 公式并从 SQLite 调用它?

据我了解,SQLite 没有数学函数来在直接 SQL 中正确实现Haversine公式。我认为这应该可以使用外部函数,实现在 C 中。

目标是在 iPhone 中拥有一个 SQLite 数据库,并能够按与用户当前位置的距离进行排序。我已经搜索过了,但我找不到任何这样做的例子。我认为困难的部分是让函数声明正确。我希望的最终结果是能够执行如下 SQL 语句:

我有一个 C Haversine 公式。函数定义如下:

有谁知道这是否可能和/或有一些示例代码可以开始?

0 投票
3 回答
7436 浏览

php - 用 SQLite 计算大圆距离

这是我的问题,我有一个包含位置和纬度/经度的 SQLite 表。基本上我需要:

HAVERSINE()是一个 PHP 函数,它应该返回给定一对纬度和经度值的大圆距离(以英里或公里为单位)。其中一对应由 PHP 提供,另一对应由表中可用的每个纬度/经度行提供locations

由于 SQLite 没有任何地理空间扩展(AFAIK SpatiaLite存在,但仍然......)我猜最好的方法是使用带有 PDO 方法之一的自定义函数:

我认为这种情况PDO::sqliteCreateFunction()就足够了,但是我对这个函数的有限经验可以减少到类似于 PHP 手册中提供的用例:

我在弄清楚如何获得 SQLite 用户定义的函数来同时处理来自 PHP 和表数据的数据时遇到了一些麻烦,如果有人可以帮助我解决这个问题,同时也理解 SQLite UDF,我将不胜感激(一个巨大的胜利SQLite IMO) 好一点。

提前致谢!

0 投票
1 回答
1666 浏览

c# - 使用 C# 将半径添加到经度和纬度

我需要生成一个包含最小和最大纬度和经度值的边界框,以便我可以返回给定半径内的地址。

我在下面有两个 func<> 来返回我需要 +/- 到 lon lat 坐标的范围,以建立边界框。但是我不认为数学是100%

我正在使用 Haversine 公式来生成我的距离计算,这似乎工作正常。我也研究了 Vincenty 的距离公式,但出于我的需要,这太过分了。

我的问题是我希望我的搜索结果与Haversine 一样准确,因为I +/- 到经纬度坐标的范围考虑了椭球曲率或地球。

好的,这是我的 func<> 的...请注意我不是数学教授 :o)

0 投票
1 回答
1846 浏览

django - Django 按计算字段排序

使用此 SO post中的距离逻辑,我将使用以下代码返回一组经过适当过滤的对象:

问题是我不知道如何保持列表/查询集按距离值排序。出于性能原因,我不想将其作为 extra() 方法调用(对我的数据库中每个潜在位置的一个查询与一个查询)。几个问题:

  1. 如何按距离对列表进行排序?即使取消我在模型中定义的本机排序并使用“order_by()”,它仍然按其他方式排序(id,我相信)。
  2. 我对性能问题有误吗,Django 会优化查询,所以我应该使用 extra() 代替吗?
  3. 这是完全错误的方法吗?我应该使用地理库而不是像putz一样手动滚动它?
0 投票
1 回答
907 浏览

distance - 如何通过 Haversine 计算短距离和长距离?

我正在寻找一种方法来计算地球上两点之间的距离。我们被告知使用 Haversine,它可以很好地计算 2 点之间的最短距离。

现在,我想计算点之间的“长距离”。因此,假设您有 2 个城市,A 在西部,B 在东部。我想知道从 B 到 A 的距离,如果我向东环游地球然后从西方到达 A。

我已经尝试在 hasrsine 函数中更改一些东西,但似乎不起作用。

任何人都知道我可以通过对 hasrsine 函数进行小的调整来简单地做到这一点吗?

这就是我现在正在使用的:

lat1, lat2, lng1, lng2 以弧度为单位

第 1 部分 = sin(lat2) * sin(lat1); 第 2 部分 = cos(lat2) * cos(lat1) * cos(lng1 - lng2);

距离 = 6378.8 * acos(part1 + part2);

我的看法是,您可以在两个城市之间在全球范围内画一个圆圈。该圆的周长减去短距离的长距离。但与回答的相反,圆的长度不等于地球的周长。这仅适用于赤道上的 2 个点。

Tnx杰伦