繁体   English   中英

按最近使用latlng列出

[英]list by nearest using latlng

它似乎根据位置列出,但未使用我的位置,而是从南非的最高点(Polokwane)到最低的位置(开普敦)列出。 我已经尝试过多次更改位置,这对结果没有影响。

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

您的错误是,通过强制转换为int,您会将大多数结果四舍五入为零。

您应该返回-1或1,具体取决于距离或distance1中最大的一个。

*假设您使用的是弧度

首先,可以有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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM