它似乎根据位置列出,但它没有使用我的位置而是从南非(波罗克瓦尼)的最高点到最低点(开普敦)。我尝试多次更改我的位置,但结果没有任何区别。
LatLng myLoc;
public DistanceArrange(LatLng current)
{
myLoc = current;
}
@Override
public int compare(final Sites sites, final Sites sites1)
{
double lat = MapsActivity.DMStoDD(MapsActivity.removeLastChar(sites.getLatitude()));
double lon = MapsActivity.DMStoDD(MapsActivity.removeLastChar(sites.getLongitude()));
double lat1 = MapsActivity.DMStoDD(MapsActivity.removeLastChar(sites1.getLatitude()));
double lon1 = MapsActivity.DMStoDD(MapsActivity.removeLastChar(sites1.getLongitude()));
double distance = computeDistanceBetween(myLoc, new LatLng(lat, lon));
double distance1 = computeDistanceBetween(myLoc, new LatLng(lat1, lon1));
return (int)(distance - distance1 );
}
DMStoDD是我自己的转换函数,工作正常,因为我正在绘制地图上的所有这些点
答案 0 :(得分:0)
你的错误是通过转换为int,你将大多数*结果四舍五入为零。
您应该返回-1或1,具体取决于距离或距离1中的最大值。
*假设您正在使用弧度
答案 1 :(得分:0)
首先,可以使用distance1-distance2,使用(distance1-distance2)是否等于负值或正值来确定列表的顺序
可能是距离计算不正确。您可以使用类android.location.Location,它有这样的方法distanceTo()。
double distance = mCurrentLocation.distanceTo(targetLocation)
示例代码段:
public int compare(final ThinResult task1, final ThinResult task2) {
Location location1 = new Location(LocationManager.GPS_PROVIDER);
Location location2 = new Location(LocationManager.GPS_PROVIDER);
location1.setLatitude(task1.getLatitude());
location1.setLongitude(task1.getLongitude());
location2.setLatitude(task2.getLatitude());
location2.setLongitude(task2.getLongitude());
double distanceToPlace1 = mCurrentLocation.distanceTo(location1);
double distanceToPlace2 = mCurrentLocation.distanceTo(location2);
return (int) (distanceToPlace1 - distanceToPlace2);
}