2012-01-06 64 views
3

有两个点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,我相信给出的解决方案可以计算两点之间的距离,并且不知道这个解决方案是否可以用来解决我的问题,或者如果是这样,如何解决问题。在mysql中计算哪些点(纬度,经度)在一定距离内?

+1

1.如果我理解正确的话,你是

在此图像中,你可以看到绿色的多边形使用希尔伯特曲线发现寻找找到以点A为中心并且其半径R =(N + x + y)的圆内的所有点。 2.我假设你能够计算R以外的MySQL。 这两个假设是否正确? – 2012-01-06 15:08:57

+1

我不是陛下,但检查这些Mysql函数[函数为测试空间关系之间的几何对象](http://dev.mysql.com/doc/refman/5.1/en/functions-for- testing-spatial-relations-between-geometric-objects.html) – 2012-01-06 19:05:35

回答

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地图中一样放置一个quadkey。 quadkey对于每个坐标都是唯一的,它可以用于正常的字符串操作。键中的每个位置都是U形曲线的一部分,因此您可以从quadkey中从左至右部分选择该点区域。

enter image description here

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

+0

+1虽然根据你的描述很难理解,但有一个工作示例展示如何实现这一点会更清楚(和哈哈)。 – Jasonw 2012-01-20 01:47:23

+0

@Jasonw:我在回答中添加了更多信息。图像和绿色polygone是由我自己使用希尔伯特曲线完成的。找到旅行销售问题可能很有用。 – Bytemain 2012-01-20 11:39:49

相关问题