我想要做的是:用戶選擇地圖上的開始和目的地,然後從他們的座標中我想顯示地圖上的位置列表中的最近點位置。我有一個簡單的Sqlite數據庫,其中包含可能位置的經度,緯度和名稱。找到最近的Gps指向用戶位置形成一個列表
我做了一些研究,這是我發現:
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
,但這是爲使用它與MySQL和某種空間搜索擴展。 有沒有可能使用android api或external libs做類似的事情?
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行的數據庫快速執行。
編輯:我有這個代碼現在分揀錯誤我把它換成(應該是<代替>)
我相信你已經通過PHP傳遞變量。 $ lat是您當前的緯度,$ lon是當前的緯度。但是什麼是$ R? – 2012-12-16 19:54:00
不是$ R地球半徑?請參閱:http://www.movable-type.co.uk/scripts/latlong.html – leochab 2013-07-05 07:08:15