我想说我现在的位置。
我还有400个其他地点。
我想找出最近的10个地方点。
我想避免的是通过所有400点并比较2个地点之间的距离。
有没有办法更有效地获取此信息?也许是通过mapview曝光的东西?还是mapviewcontroller?
答案 0 :(得分:2)
不是比较距离,而是比较“距离的平方”。
如果你在x0,y0,得到(xn - x0)²+(yn - y0)²最低的点。 通过这种方式,您可以获得最近的点,避免使用平方的图形(计算成本很高),并且您只需要进行总和(差异)和产品,这些都是计算方面的便宜。
如果你需要距离,只得到10个选定最近点的平方根。
答案 1 :(得分:1)
对不起,但是如果你没有验证所有这些地理选择,你如何确定你选择的10个地理选择是否最近?
您可能会检测到10个“合理接近”的点而不检查它们,只需在您从数据源获取的列表中填入一个缓冲区,其中前10个点位于一定范围内(比如10英里?) )
通过这种方式你可以得到一些非常接近的点,并且速度会得到提升。当然,当你从一方获益时,你必须离开另一方。所以这是速度与准确度的关系。答案 2 :(得分:1)
您可以使用Morton Order对点数进行排序。 Morton Order将2d坐标映射到1d并保留点的位置。
这意味着,如果点 x 的最近邻居(在2d中)是 y ,那么这些点在Morton Order中彼此紧挨着。 要找到x周围最近的10个点,你必须看得更少。