что я пытаюсь сделать: пользователь выбирает начало и пункт назначения на карте, а затем из их координат я хочу показать местоположение ближайшей точки из списка местоположений на карте.У меня есть простая база данных Sqlite, содержащая долготу, широту и название возможных мест.
Я провел небольшое исследование, и вот что я нашел:
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
но это предназначено для использования его с mySql и некоторым расширением пространственного поиска.Есть ли возможность, я могу сделать что-то подобное, используя Android API или внешние библиотеки?
public Point dialogFindClosestLocationToPoint(geometry.Point aStartPoint){
List<PointWithDistance> helperList=new ArrayList<PointWithDistance>();
try {
openDataBase();
Cursor c=getCursorQueryWithAllTheData();
if(c.moveToFirst())
do{
PointWithDistance helper=new PointWithDistance(c.getDouble(1),c.getDouble(2),c.getString(3));
int distance=returnDistanceBetween2Points(aStartPoint, helper);
if(distance<MAX_SEARCH_DISTANCE){
helper.setDistance(distance);
Log.i("values", helper.name);
helperList.add(helper);
}
}while (c.moveToNext());
Collections.sort(helperList,new PointComparator());
if(helperList!=null)
return helperList.get(0);
else return null;
}catch(SQLException sqle){
throw sqle;
}
finally{
close();
}
это код в классе PointComparator ():
public int compare(PointWithDistance o1, PointWithDistance o2) {
return (o1.getDistance()<o2.getDistance() ? -1 : (o1.getDistance()==o2.getDistance() ? 0 : 1));
}
где PointWithDistance
объект, который содержит: широта, длинна, расстояние, имя
, однако это решение не обеспечивает правильную возвращаемую информацию ... и я понимаю, что оно вообще не масштабируется и очень медленно.Мне нужно решение, которое будет работать быстро с базой данных, содержащей не более 1000 строк.
edit: моя ошибка в этом коде при сортировке, теперь я изменил ее (должно быть <вместо>)