Найти близлежащие места с SQLite и Android - PullRequest
3 голосов
/ 22 ноября 2011

В моей базе данных SQLite есть таблица данных с информацией о долготе, широте и описании. Учитывая определенное местоположение, я хотел бы получить все строки с близкого расстояния (10 блоков) из этого места.

Вот как загружаются данные:

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)

Этот запрос вообще не дает результатов, мой вопрос: как я могу запросить базу данных, перенося все местоположения рядом с моим текущим местоположением?

Спасибо!

1 Ответ

4 голосов
/ 23 ноября 2011

Вы, кажется, перепутали + и -:

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) всегда ложно.: -)

...