如何从坐标列表计算给定点的最近坐标

时间:2011-06-07 08:51:53

标签: java android algorithm google-maps

基本上我有一个用户当前位置。然后我有一份坐标列表。

我如何根据用户当前位置计算列表中最近的坐标集。我的应用程序是用java for android平台编写的

3 个答案:

答案 0 :(得分:1)

http://developer.android.com/reference/android/location/Location.html

Location location = new Location("");
location.setLatitude(lat);
location.setLongitude(lon);

检查distanceTo或distanceBetween方法。

或者你可以手动计算坐标之间的距离,找到计算距离的最小距离,你可以参考以下链接http://www.zipcodeworld.com/samples/distance.java.html

答案 1 :(得分:1)

如果列表中的点在该区域中相当均匀地分布,则应该起作用:

将区域划分为一定大小的象限。保留并更新驻留在每个象限中的点列表。

给定坐标x,找到它所属的象限,仅计算同一象限中的点的距离(如果没有,则从相邻象限添加点,直到成功),选择k个最近点p_i。

检查圆c(中心= x,半径=最大(p_i-x))是否穿过尚未检查的任何象限,如果是,则计算距这些象限的点的距离。完全返回最近的k点集。

您可能需要检查c中包含点的最近象限,直到找到k个最近点p_i,以便c(x,max(p_i-x))中的所有象限为空,而不是选择圆c中的所有象限。或检查。 加速最近的象限搜索从O(n)到O(log n):你需要实现一个树状结构:4个象限的象限等跟踪每个象限中的点数。当点移动时,更新它(O(log))。无论如何,200分这可能是一个过度杀伤。

编辑:而不是“树状结构”只使用哈希表和简单的哈希函数,如:(x div 10 ^ p,y div 10 ^ p)

答案 2 :(得分:0)

有一种分而治之的算法可以找到O(nlogn)中的闭合点对。虽然它可能对您的数据集大小而言过于苛刻。关于它的更多信息here