计算哪些点(纬度,经度)在mysql中的某个距离内?

时间:2012-01-06 04:56:58

标签: mysql geolocation geometry

有两个点A,B和距离x(距离A的英里数)和y(距离B的英里数)。让A到B的距离为N.所以,A距离B是N英里。我如何解决问题:距离A(N + x + y)英里的可用点数是多少?我不确定如何更好地解释这一点。我真的不知道如何解决这个问题,我读了Fastest Way to Find Distance Between Two Lat/Long Points并且我相信给出的解决方案计算了两点之间的距离,并且不知道这个解决方案是否可以用来解决我的问题,或者如果是这样的话,怎么样。

1 个答案:

答案 0 :(得分:2)

如果您正在寻找近似算法,我建议寻找k-means算法或层次聚类,尤其是怪物曲线或空间填充曲线。首先,您可以计算图形的最小生成树,然后删除最长且最昂贵的边。然后树生成许多小树,你可以使用k-means来计算点组,即簇。

"单链路k聚类算法......正是Kruskal的算法......等同于找到MST并删除k-1最昂贵的边缘。"例如,请参见:https://stats.stackexchange.com/questions/1475/visualization-software-for-clustering

怪物曲线的一个很好的例子是希尔伯特曲线。这条曲线的基本形式是一个U形,通过复制许多它们并旋转它,曲线填充了euklidian空间。令人惊讶的是,灰色代码可以帮助找出这个U形的方向。你可以查找尼克的空间索引四叉树希尔伯特曲线blog article about more details。而不是计算曲线的索引,你可以像在bing map中一样组合一个四叉树。 quadkey对于每个坐标都是唯一的,它可以与普通的字符串操作一起使用。键中的每个位置都是U形曲线的一部分,因此您可以从四元组中从左到右选择部分点。

在此图像中,您可以看到使用希尔伯特曲线找到绿色多边形:

enter image description here

你可以在这里找到我的php课程:http://www.phpclasses.org/package/6202-PHP-Generate-points-of-an-Hilbert-curve.html