求某个点某个距离点的经纬度范围值
根据任意2点经纬度计算其距离的公式详见:http://hi.baidu.com/netcoder/item/b3f551ab11642417a8cfb718
开发环境:sql server 2008
条件:
现在有某个表保存了若干个点的邻居关系,每个点的经伟度能够从另外一张表关联找到。
表格样式如下:
Name Friend
A B
A C
A D
B C
B D
.........
需求:
1.找出某个人,例如A,5000米之内的所有记录
2.找出距离在5000米之内的所有记录
如果用Cross JOIN的话,记录一多的话,速度非常慢。现在需要优化一下算法。
我的想法是:
如果某个点(假设为A)要找到其5000米之内的所有Friend,是否可以根据A点的经纬度以及距离(5000米),先计算出另外一点最大的经纬度?然后在JOIN的时候可以过滤一下Friend这一列的经纬度,这样速度可能会快一些。但我不知道如何计算,因此还请各位大师帮忙,谢谢!
[解决办法]
你那个链接地址我看过,我觉得可能用不上。既然你说某个表保存若干点的邻居关系,这些点之间有没有距离的记录?
[解决办法]
declare @R float
set @R = 6378.137;
declare @lng float
declare @lat float
set @lng = 11.11111;
set @lat = 22.22222;
select * from gmap where @R*acos(cos(lng)*cos(@lng)*(lat-@lat)+sin(lng)*sin(@lng))*1000<=50
--地球面2点间距离的公示
R·arc cos[cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2]