2009-12-13 110 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.

我不知道如何訪問使這個。但是,這種方式如同緩慢一樣。

相關問題