我有一张桌子:积分
它有2个filds:X,Y
每行代表2d字段上的一个点
我希望能够在某个半径R中搜索点像
与方A一样正方形
BTW:我使用PHP访问我的数据库。
我的主要观点是最接近图点中心,作为quqe中的第一个结果
如何在SQL中执行此类操作?
答案 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。 使用适当的数据类型和索引
和其他有用的功能。