2009-12-13 58 views
17

比方说,我有一个包含坐标的行的表。确定一个坐标是否在另一个的半径内

什么是最好的方式拉只在另一个坐标的半径坐标行?

为了简化我的问题,我给下面的例子:

Table like: 
Columns: Latitude, Longitude. 
Row1: 23.44444 24.55555 
Row2: 32.44444 28.22222 
Row3: 35.11111 32.12345 

在一个SQL语句,我如何才能是在ROW3的例如半径坐标的行?

回答

29

This post shows how to do this in SQL Server。

这里是如何做到这一点在MySQL:

SELECT ((ACOS(SIN($lat * PI()/180) * SIN(lat * PI()/180) + 
     COS($lat * PI()/180) * COS(lat * PI()/180) * COS(($lon - lon) * 
     PI()/180)) * 180/PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC 
+0

谢谢,我该如何在Access数据库中使用它? – 2009-12-13 11:28:48

+0

据我所知,你不能在Access数据库中创建这种类型的函数。你应该尝试第二种方法。 (需要进行一些修改,例如,我相信访问没有PI()函数) – jbochi 2009-12-13 11:35:35

+0

这是英里还是公里? – Pentium10 2010-05-28 16:40:07

0

你怎么在半径意思?你是否想要通过一段距离,比如5英里,并在行x的5英里内找到所有行?

检查了这一点,如果这样http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

+0

是的,我会使用公里,但你有想法。 事情是我需要一个访问数据库。 – 2009-12-13 11:30:46

+0

使用VBA功能,有很多可用于适应的Googleable代码片段。 – 2009-12-13 11:34:08

1

貌似距离公式是:

D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) + 
         cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi/180) 
       ) * 180/pi) 

其中Y和Z - 是每行你whant测试的点,Y和Z - 是分行示例。

,所以你可以做这样的事情:

  1. 在表中选择每一行,并得到其lonlat
  2. this申请查询,改变$lon$lat数据形状点1.

我不知道如何访问使这个。但是,这种方式如同缓慢一样。

相关问题