SQL:搜索最近的2d方形和圆形

时间:2010-09-25 08:42:07

标签: php sql search 2d

我有一张桌子:积分

它有2个filds:X,Y

每行代表2d字段上的一个点

我希望能够在某个半径R中搜索点像

alt text

与方A一样正方形

alt text

BTW:我使用PHP访问我的数据库。

我的主要观点是最接近图点中心,作为quqe中的第一个结果 alt text

如何在SQL中执行此类操作?

2 个答案:

答案 0 :(得分:3)

数学上指出圈子的满足等式

(c.X-p.X)^2 + (c.Y-p.Y)^2 <= R^2

c 是圈子的cetner, p - 点, R - 半径

正方形

max(abs(c.X-p.X),abs(c.Y-p.Y)) <= A/2

c 是方形的cetner, p - 指向, A - 正方形

你可以用任何语言写出theese方程式。

各种度量的方程左侧称为距离。要查找最近点,您应该按 distance asceniding顺序排序结果集并获取第一个结果。

这样的事情:

select top 1 p.X, p.X from Points p
otrder by ((@x - p.X)*(@x - p.X)+(@y - p.Y)*(@y - p.Y))

答案 1 :(得分:2)

如果您的查询不是您的应用程序的核心,Gandjustas的答案是一个很好的解决方案。如果这个几何/空间数据对您非常重要,并且在处理此类数据时需要速度,那么您应该查看RDBMS的地理空间扩展。

我将假设你使用mysql,你可以使用spatial extensions。 使用适当的数据类型和索引

Distance(g1, g2)

和其他有用的功能。