DAr*_*rkO 6 java database android location
我想做的是:用户在地图上选择开始和目的地,然后从他们的坐标我想显示地图上的位置列表中最近的点位置.我有一个简单的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();
}
Run Code Online (Sandbox Code Playgroud)
这是PointComparator()类中的代码:
public int compare(PointWithDistance o1, PointWithDistance o2) {
return (o1.getDistance()<o2.getDistance() ? -1 : (o1.getDistance()==o2.getDistance() ? 0 : 1));
}
Run Code Online (Sandbox Code Playgroud)
where PointWithDistance
是一个包含:lat,long,distance,name的对象
但是这个解决方案没有提供正确的返回信息......我意识到它根本不可扩展且非常慢.我需要一个能够快速执行最多1000行数据库的解决方案.
编辑:我在排序中的这段代码中出现了错误,现在我已将其更改(应该是<而不是>)
我前段时间一直在寻找非常相似的东西:
我在我的服务器上使用 MySQL 查找,MySQL 允许您创建虚拟列,执行计算并按距离排序,然后您可以设置返回的最大结果或最大距离 - 它工作得很好:
Select Lat, Lon, acos(sin($lat)*sin(radians(Lat)) + cos($lat)*cos(radians(Lat))cos(radians(Lon)-$lon))$R As dist From MyTable ORDER BY dist DESC
Run Code Online (Sandbox Code Playgroud)
我想在我的应用程序中执行相同的操作 - 拉出所有点以远离用户位置,从而允许我显示最近的点。我最终按照上面链接中建议的解决方案采用了一种解决方案,但意识到它可能不是最佳解决方案,但可以达到我想要的目的。
归档时间: |
|
查看次数: |
8426 次 |
最近记录: |