与纬度/经度(地球大小)碰撞的四叉树

时间:2014-05-21 10:07:37

标签: google-maps data-structures 2d collision quadtree

我有一个谷歌地图,服务器发送一个半径小(最大100米)的对象列表。我需要快速知道位置是否与列表中的某些内容发生碰撞,并在地图上绘制所有内容。

我在想我应该使用四叉树(在游戏的二维碰撞中非常有用),但我的问题是我不仅限于屏幕而是地球! 当然,如果我有100个对象,这不是问题,但是在任何时候服务器都可以向我发送我需要添加到列表中的新对象,因此我的四叉树可能会彻底改变或变得不平衡。 我该怎么办 ?如果在当前边界之外添加新元素,我是否还应该使用四叉树并修改整个树?我应该将边界设置为最大纬度经度(但可能会出现双精度问题)?或者有人知道这类问题的更好的数据结构吗?

RXP

2 个答案:

答案 0 :(得分:1)

为了避免双精度问题,特别是在四元组的分裂边界处,建议在四叉树中使用整数坐标。

通过乘以1E6将double lat / lon转换为int,这会产生大约10cm的精度。

答案 1 :(得分:0)

您可以使用空间填充曲线,例如z曲线。