Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从坐标列表中计算距给定点最近的坐标_Java_Android_Algorithm_Google Maps - Fatal编程技术网

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

Java 如何从坐标列表中计算距给定点最近的坐标,java,android,algorithm,google-maps,Java,Android,Algorithm,Google Maps,基本上我有一个用户的当前位置。然后我有一份坐标表 如何根据用户当前位置计算列表中最近的坐标集。我的应用程序是用java为android平台编写的 检查方法之间的距离 或者,您可以手动计算坐标之间的距离,并找到用于计算距离的最小距离。您可以参考以下链接。有一种分治算法来查找O(nlogn)中的闭合点对。虽然这可能是一个错误,但对于数据集大小来说,这是一个致命的错误。有关它的更多信息如果列表上的点在该区域分布相当均匀,则这应该可以: 将该区域划分为一定大小的象限。保留并更新位于每个象限中的点列表 给

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

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

检查方法之间的距离


或者,您可以手动计算坐标之间的距离,并找到用于计算距离的最小距离。您可以参考以下链接。

有一种分治算法来查找O(nlogn)中的闭合点对。虽然这可能是一个错误,但对于数据集大小来说,这是一个致命的错误。有关它的更多信息

如果列表上的点在该区域分布相当均匀,则这应该可以:

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

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

检查圆c(中心=x,半径=最大值(p_i-x))是否与尚未检查的任何象限相交,如果相交,则计算从这些象限到点的距离。返回最近的k点集合

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


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

你知道你的集合中大概有多少坐标吗?这可能会影响暴力方法是否有效,或者速度是否太慢。如果有200个坐标来测试当前位置与200个坐标相对,请不要太担心。只需对它们进行测试,它很可能比您可以优化的任何东西都更快、更简单。
Location location = new Location("");
location.setLatitude(lat);
location.setLongitude(lon);