java:从给定的GPS位置查找最近的GPS位置

时间:2013-09-12 13:19:51

标签: java algorithm gps

我需要编写一个java程序来从给定的GPS位置P中找到,最近的GPS位置(2个位置)(来自一组GPS位置)是GPS位置。图中示出了这种情况。这里标记的所有位置都是GPS位置。从给定的位置P,我想找到最接近P的点集,在本例中为(B,C)

Here all the positions marked are GPS positions. From the given position P, i want to find the set of points which are nearest to P, in this case (B,C)

如果有人可以共享与此相关的算法或代码snippnet,那将非常有用。

4 个答案:

答案 0 :(得分:4)

你必须计算P和所有其他点之间的距离,然后取最小值。那是显而易见的部分。

困难的部分是计算两个gps坐标之间的距离。 GPS使用WGS84测地系统来表示地球上的点。 还有不同的方法来计算〜球面上的距离(loxodromic距离和大圆距离是主要的)。 欧几里德距离在球体上总是假的(甚至不接近),因为在非零纬度时,1°Lat <1。 1°经度...
请自行查看Distance using WGS84-ellipsoid计算,如果您接受将为您执行此操作的库,请参阅GDAL。

您可以使用GDAL转换其他测地系统中的点表示。例如,您可以在计划测地系统上投影点,然后使用(x,y,z)坐标,然后计算距离(或更好:平方距离=x²+y²+z²)。

我认为谷歌地图api为gps坐标提供了一个易于使用的距离方法,如果您已经使用它的话。

答案 1 :(得分:2)

将点存储到列表中,然后找到相邻点或最小距离点。

This post可能对您有所帮助。

答案 2 :(得分:1)

如果您正在寻找算法实现,请查看R-Trees。它们可以是查找点或边界框类型搜索的好方法。

我已经使用了一个很棒的库,对我来说很有效,它已经实现了R-Tree算法。查看JSI,Java Spatial Index(http://jsi.sourceforge.net/)。

我将继续探索API。祝你好运!

答案 3 :(得分:1)

您可以考虑从数据中删除Quadtree。这是一种表示二维空间数据的方法,可以在log(n)时间内轻松完成最近邻查找。树的构造是nlog(n),但是如果你需要考虑构造和最近邻居那么你就有nlog(n)的复杂性。

为四叉树(这只是k-d树的2-d版本)找到最近邻居算法应该不难。 Wiki概述了它here

如需进一步阅读,如果您需要将其扩展为任何其他维度,请阅读K-D Trees

编辑:如果您需要构建Quadtree,它会更快地绕过所有其他点,找到距离并跟踪最小的距离如果你不确定找到距离回想三角形和毕达哥拉斯定理。