我需要编写一个java程序来从给定的GPS位置P
中找到,最近的GPS位置(2个位置)(来自一组GPS位置)是GPS位置。图中示出了这种情况。这里标记的所有位置都是GPS位置。从给定的位置P
,我想找到最接近P
的点集,在本例中为(B,C)
。
如果有人可以共享与此相关的算法或代码snippnet,那将非常有用。
答案 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)