![]() |
1
111
,或,在
这将选择框内的所有点
这实际上不是一个方框,而是一个球面矩形:球面的经度和纬度界限部分。这可能不同于 法兰士约瑟夫地群岛 但在大多数有人居住的地方离它很近。
|
![]() |
2
92
不是特定于MySQL的答案,但它会提高SQL语句的性能。 实际上,你要做的是计算到表中每个点的距离,看看它是否在给定点的10个单位内。 在运行这个SQL之前,您可以做的是创建四个点,在一个边上绘制一个框20个单位,您的点在中间,即。(X1,Y1)。…(x4,y4),其中(x1,y1)是(givenlong+10个单位,givenlat+10个单位)。…(Givenlong-10台,Givenlat-10台)。 实际上,你只需要两个点,左上角和右下角称它们为(x1,y1)和(x2,y2) 现在,您的SQL语句使用这些点来排除与给定点之间绝对大于10u的行,它可以使用纬度和经度上的索引,因此其数量级将比您当前拥有的快。 例如
框方法可以返回误报(您可以在框的角上拾取与给定点相距10u的点),因此您仍然需要计算每个点的距离。但是,这会更快,因为您已经大大限制了要测试的点数到框中的点数。 我称这种技术为“在盒子里思考”:) 编辑: 这可以放在一个SQL语句中吗? 对不起,我不知道MySQL或PHP能做什么。 我不知道构建这四个点的最佳位置在哪里,也不知道如何用PHP将它们传递给MySQL查询。但是,一旦您有了这四点,就没有什么能阻止您将自己的SQL语句与我的SQL语句结合起来。
我知道,使用MS SQL,我可以构建一个声明四个浮点(x1、y1、x2、y2)的SQL语句,并在“main”select语句之前计算它们,就像我说的,我不知道这是否可以用MySQL完成。不过,我仍然倾向于在C中构建这四个点,并将它们作为参数传递给SQL查询。 很抱歉,我不能提供更多帮助,如果有人可以回答MySQL&php特定部分,请随意编辑此答案。 |
![]() |
3
16
请检查此演示文稿以获得正确的答案。 基本上,它显示了注释中显示的两种不同的方法,详细解释了为什么/何时应该使用其中一种方法,以及为什么“在框中”计算可能非常有趣。 |
![]() |
4
13
在 this blog post ,发布了以下mysql函数。我没有做过太多的测试,但是从我从邮件中收集到的信息来看, if your latitude and longitude fields are indexed ,这可能对您很好:
样品使用情况: 假设一个名为places with fields latitude&longitude的表:
|
![]() |
5
9
这是MySQL中到点之间的距离计算查询,我在一个很长的数据库中使用过,它工作得很好!注意:根据您的要求进行更改(数据库名、表名、列等)。 |
![]() |
6
7
|
![]() |
7
5
如果您使用的是MySQL5.7.*,那么您可以使用 St_距离球(点,点) .
|
![]() |
8
4
|
![]() |
9
4
完整的代码以及如何安装为MySQL插件的详细信息如下: https://github.com/lucasepe/lib_mysqludf_haversine 我去年发表了这个评论。既然友好的@tylercollier建议我发布答案,就在这里。 另一种方法是编写一个自定义的UDF函数,该函数返回两点之间的哈弗斯线距离。此功能可以接受输入:
所以我们可以这样写:
获取距离小于40公里的所有记录。或:
获取距离小于25英尺的所有记录。 核心功能是:
|
![]() |
10
3
快速、简单和准确(对于较小的距离)的近似可以通过 spherical projection . 至少在我的路由算法中,与正确的计算相比,我得到了20%的提升。在Java代码中,它看起来像:
不确定MySQL(抱歉!). 确保您了解限制(断言的第三个参数等于以公里为单位的精度):
|
![]() |
11
3
这里是一个非常详细的描述地理距离搜索与MySQL的解决方案的基础上实现的Haversine公式到MySQL。完整的解决方案描述,包括理论、实现和进一步的性能优化。尽管在我的例子中,空间优化部分没有正确工作。 http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL |
![]() |
12
3
读一读 Geo Distance Search with MySQL 一个解决方案 基于对MySQL的Haversine公式实现。这是一个完整的解决方案 描述与理论,实现和进一步的性能优化。 尽管在我的例子中,空间优化部分没有正确工作。 我注意到这其中有两个错误:
|
![]() |
13
3
一个mysql函数,返回两个坐标之间的米数:
若要以其他格式返回值,请替换
要使用这个函数,只需像调用MySQL中的任何其他函数一样调用它。例如,如果您有一张桌子
|
![]() |
14
3
我需要解决类似的问题(从单个点按距离过滤行),通过将原始问题与答案和评论结合起来,我提出了一个在MySQL5.6和5.7上都非常适合我的解决方案。
在我的测试中,mysql在
这是我的结果的可视化:
灰色的星星将地图上的所有点可视化,黄色的星星是MySQL查询返回的。矩形内角(但外圆)内的灰色星星由
|
![]() |
15
0
使用MySQL
见: https://andrew.hedges.name/experiments/haversine/ 见: https://stackoverflow.com/a/24372831/5155484 见: http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/
注:
|
![]() |
16
-1
|
![]() |
Naveen Attri · Android实时位置共享 7 年前 |
|
Dr.Kook · 如何从位置更改城市名称语言? 7 年前 |
|
sam · 从google mapview获取纬度/经度 7 年前 |
![]() |
turtleboy · 位置更新平均触发2秒 7 年前 |