2011-07-26 55 views
6

我有一個嵌入式數據庫在我的應用程序,有一些感興趣的點的所有緯度和經度,我需要知道我從這些點的距離(讓我的位置使用GPS)。 我的問題是:我剛剛發現SQLite無法使用我有的查詢計算距離,因爲它不計算三角函數(SIN,COS ...)。我試圖避免使用此查詢以編程方式計算這些距離:IPhone - 經緯度的SQLite距離

NSLog(@"SELECT ((ACOS(SIN(%@ * PI()/180) * SIN(lat * PI()/180) + COS(%@ * PI()/180) * COS(lat * PI()/180) * COS((%@ – lon) * PI()/180)) * 180/PI()) * 60 * 1.1515) AS `distance` FROM `members` HAVING `distance`<=’1000′ ORDER BY `distance`", Latitude,Latitude, Longitude); 

有沒有人有解決方案?

問候!

回答

9

做在客觀C.

這傢伙有同樣的問題:http://www.thismuchiknow.co.uk/?p=71

+0

很好。非常感謝! – Claudio

+3

鏈接到答案真的很好。定義一個從sqlite調用的c函數來計算距離。它速度快,效果很好。我唯一要做的就是可以使用BETWEEN語句來優化搜索。我使用的是:SELECT * FROM位置WHERE lat BETWEEN%f AND%f AND lon%BETWEEN%f AND%f ORDER BY距離(lat,lon,%f,%f)LIMIT 25 –

+0

@KennyWinker請提供%f值 –

0

是的,你可以根據周圍位置的矩形一個簡單的查詢,然後使用haversine公式計算確切的距離。

這樣做的好處是你可以在SQLite表上使用索引。

更多關於海沙星公式:http://en.wikipedia.org/wiki/Haversine_formula

+0

你有任何一個例子的鏈接? – Claudio

相關問題