我正在尝试制作一款基于Google地图在地图上找到最近资源的Android应用 我将这些资源保存在SQLite数据库中 我使用的功能是:
protected void findClosestResources(LatLng mCurrentLocation, GoogleMap map,Context context){
Double currentLatitude=mCurrentLocation.latitude;
Double currentLongitude=mCurrentLocation.longitude;
String selection=Main_Activity.CategorySelect;
//Determine yhe closest resources by substrating Latitude and Longitude
/*Location=Place.rawQuery("SELECT * FROM "+LOCATION_TABLE_NAME+
" WHERE "+selection+
" GROUP BY "+M_COLUMNS[4]+
" HAVING MIN(ABS("+currentLatitude+"-"+M_COLUMNS[1]+")) " +
"AND MIN(ABS("+currentLongitude+"-"+M_COLUMNS[2]+"))",null);*/
if (Location.moveToFirst()) {//select the first row in the cursor object
while (!Location.isAfterLast()) {//verifies if it is the last row
LocationList thisLocation= new LocationList(Location);
getInformationAbout(Location);
PlaceMakerOn(map);
PlaceList.add(thisLocation);
Location.moveToNext();//select the next row
}
Location.close();//close the connection with database
}
乍一看似乎有效,但经过仔细检查后结果并不准确。
下图是一个例子:搜索了atm和银行资源。
而它找到的银行(蓝色标记)确实最接近绿色,它找到的ATM(橙色标记)不是
由于银行有ATM,因此ATM标记不应该出现在离银行很远的地方。因为这意味着,根据功能,橙色标记比蓝色标记更接近绿色标记 我该怎么做才能让它更准确?
答案 0 :(得分:0)
您的标记放置逻辑似乎工作得很好。我现在主要关心的是数据本身。 (准确地说,ATM和银行位置数据。)
我该怎么做才能让它更准确?
好了,再看看你的数据。如果您手动填充此数据(例如,您自己将这些纬度 - 经度点写入数据库文件,或有人向您提供),那么您应该尝试重新审视并改进它。
如果您从API(例如Google的位置API和/或Foursquare&#)中提取这些ATM和银行位置,那么您现在在地图中看到的内容似乎真的如此案子。换句话说,根本没有问题:银行有可能不在附近有自动取款机。谁知道?
总而言之,这里的真正问题不在于您的代码。作为放置在该示例中的标记,您提供的看起来很好(它们都处于合理的位置)。我怀疑用于填充这些标记的数据是真正的罪魁祸首。