[英]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.