我在自定义模型中有一个带lat和lng的数组。我想对数组进行排序,以便距离我的位置的最小距离位于顶部位置,依此类推。
这是我试过的
myLocation = new Location("");
myLocation.setLatitude(Double.valueOf(MyApplication.getInstance().getLatitude()));
myLocation.setLongitude(Double.valueOf(MyApplication.getInstance().getLongitude()));
Collections.sort(pings, new DistanceComparator());
private class DistanceComparator implements java.util.Comparator<PingModel>
{
@Override
public int compare(PingModel lhs, PingModel rhs)
{
Location lhsLocation = new Location("");
lhsLocation.setLatitude(Double.valueOf(lhs.latloc));
lhsLocation.setLongitude(Double.valueOf(lhs.lngloc));
Location rhsLocation = new Location("");
rhsLocation.setLatitude(Double.valueOf(lhs.latloc));
rhsLocation.setLongitude(Double.valueOf(lhs.lngloc));
return (int)rhsLocation.distanceTo(myLocation) - (int)lhsLocation.distanceTo(myLocation);
}
}
结果不确定它正在做什么样的排序,但不是根据距离。
答案 0 :(得分:0)
不确定这是否有帮助,但我正在开展类似的项目,并发现此链接非常有用:http://www.geodatasource.com/developers/java。
基本上,如果你有位置;使用距离函数计算新位置 - 您的位置,然后根据此进行排序。循环遍历位置数组,并根据结果进行排序。
希望它有所帮助。
丹
答案 1 :(得分:0)
你可以试试
吗?class CustomView: UIView {
var customLayers = [HogeProtocol]()
func callTheFunctionAndAddSublayer() {
for customLayer in customLayers {
customLayer.aFunction() // can call
layer.addSublayer(customLayer) // cannot call..
}
}
}
答案 2 :(得分:0)
在减法之前转换为int可能并不总是有效。例如,如果您的distanceTo()
函数返回km并且距您的点和数据点的距离在1 km以内,则减法的结果可能为0.
而不是
return (int)rhsLocation.distanceTo(myLocation) - (int)lhsLocation.distanceTo(myLocation);
尝试
return (rhsLocation.distanceTo(myLocation) - lhsLocation.distanceTo(myLocation)) > 0 ? 1 : -1;