2011-11-22 29 views
3

我在我的SQLite數據庫中有一個數據表,其中包含有關經度,緯度和說明的信息。給定某個位置,我想從該位置獲得距離近距離(10個街區)的所有行。使用SQLite和Android發現附近位置

這是數據是如何加載:

values.put(LONGITUD_COLUMN, (int) (-64.14802 * 1E6)); 
values.put(LATITUD_COLUMN, (int) (-31.36498 * 1E6)); 

到目前爲止,這是我的代碼:

private int cuadras = (int)(-0.02 * 1E6) ; //10 blocks aprox, I guess 
private int current_latitude = 0; 
private int current_longitude = 0; 

current_latitude和current_longitude,裝載有(從LocationListener的):

public void onLocationChanged(Location location) { 
current_latitude = (int) (location.getLatitude() * 1E6); 
current_longitude = (int) (location.getLongitude() * 1E6); 
} 

而SQLite的查詢如下:

String sql = "LATITUD_COLUMN > (" + (current_latitude + cuadras) + ") AND " 
+ "LATITUD_COLUMN < (" + (current_latitude - cuadras) +") AND " 
+ "LONGITUD_COLUMN > ("+ (current_longitude - cuadras) +") AND " 
+ "LONGITUD_COLUMN < ("+ (current_longitude + cuadras) +")"; 

有了這樣的結果:

LATITUD_COLUMN > (-31398170) AND LATITUD_COLUMN < (-31358170) AND LONGITUD_COLUMN > (-64132838) AND LONGITUD_COLUMN < (-64172838) 

該查詢根本不返回任何結果,我的問題是,我怎麼能查詢數據庫帶來近我的當前位置的所有位置?

謝謝!

+0

您是否已將該條件合併到表單的實際SQL查詢中:SELECT * from yourtablename WHERE ....; ? (點代表你String sql) – NickT

+0

你好,是的,我做到了。謝謝你的評論。 –

+0

按照這個答案:http://stackoverflow.com/a/12997900/779408 – breceivemail

回答

4

你似乎有你的+和 - 混合起來:

String sql = "LATITUD_COLUMN > (" + (current_latitude + cuadras) + ") AND " 
+ "LATITUD_COLUMN < (" + (current_latitude - cuadras) +") AND " 
+ "LONGITUD_COLUMN > ("+ (current_longitude - cuadras) +") AND " 
+ "LONGITUD_COLUMN < ("+ (current_longitude + cuadras) +")"; 

應該

String sql = "LATITUD_COLUMN > (" + (current_latitude + cuadras) + ") AND " 
+ "LATITUD_COLUMN < (" + (current_latitude - cuadras) +") AND " 
+ "LONGITUD_COLUMN > ("+ (current_longitude + cuadras) +") AND " 
+ "LONGITUD_COLUMN < ("+ (current_longitude - cuadras) +")"; 

注意交換+和 - 在最後兩行。

LONGITUD_COLUMN > (-64132838) AND LONGITUD_COLUMN < (-64172838)總是錯誤的。 :-)

+0

是的,正是這樣,謝謝! –

+0

我認爲這個答案更好:http://stackoverflow.com/a/12997900/779408 – breceivemail