我有大约1000个点,想要根据距离将这些点分组。我正在使用Haversine公式,但它似乎非常慢。在Android上,处理1000个点需要4秒,在我的本地环境中只需60毫秒。
我不关心精度,而且这些点之间的距离不超过25公里。
是否有其他公式可以使用?
我有大约1000个点,想要根据距离将这些点分组。我正在使用Haversine公式,但它似乎非常慢。在Android上,处理1000个点需要4秒,在我的本地环境中只需60毫秒。
我不关心精度,而且这些点之间的距离不超过25公里。
是否有其他公式可以使用?
首先,对于彼此靠近的物品,地球的曲率不会太重要。因此,您可以将其视为平面,在这种情况下,您正在查看距离的勾股定理(x/y距离平方和的平方根)。
其次,如果你只是在排序/分组,你可以省略平方根计算,直接在距离的平方上进行排序/分组。在缺乏浮点协处理器的设备上,例如前几代Android手机,这将非常有用。
第三,您没有指示您用于点的坐标系,但如果您可以使用定点数学进行计算,则这也将提高性能,特别是在没有协处理器的设备上。这就是为什么Android的Google Maps附加组件使用GeoPoint和微度而不是从LocationManager中获取的Java double度数中的Location。
double distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));