使用latlng按最近列表

时间:2018-03-15 14:35:36

标签: java android

它似乎根据位置列出,但它没有使用我的位置而是从南非(波罗克瓦尼)的最高点到最低点(开普敦)。我尝试多次更改我的位置,但结果没有任何区别。

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是我自己的转换函数,工作正常,因为我正在绘制地图上的所有这些点

2 个答案:

答案 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);
    }