GPS协调搜索--R树

时间:2011-07-04 06:39:12

标签: python gps

我有

形式的列表

[[x1,.....,x8],[x1,.......,x8],...............,[x1,。 .... x [8]]]。该列表中的列表数量可达一百万。每个列表都有4个gps坐标,显示矩形的四个点(假设每个段都是矩形)。

问题:给定一个新点,我需要确定该点落在哪个段上并创建一个新点,如果它不属于任何一个段。我现在没有将数据上传到MySQL,它是一个简单的文本文件。我找到了任何给定汽车的文本文件中的坐标。

我尝试过:我正在考虑使用R树来查找接近给定点的所有点。 (最近= = 200米)。但即使在R树中,似乎也有太多的选择。 R,R *,希尔伯特。

Q1。哪一个应该选择?

Q2。有没有比R-tree更好的选择?可以通过在列表中更快地搜索来完成某些事情吗?

非常感谢。

[{a1:[........]},{a2:[.......]},{a3:[.........]} ,. ......,{a20:[.....]}]。

2 个答案:

答案 0 :(得分:1)

问题是否“找到某个点是否属于2D空间中的某个矩形”

那可以在尺寸上分开,不是吗?给每个矩形一个ID,然后分成一维范围列表((id, x0, x1)(id, y0, y1))并找到该点落入的两个维度中的所有范围。(我很确定有非常有效的算法。哎呀,你甚至可以利用sqlite。)然后只要你得到的ID集相交,你应该找到点落入的所有矩形,如果有的话。 (当然,如果任何一个单维查询都没有返回任何结果,您可以提前退出。)

不确定这是否比R树或other spatial indexes更快或更聪明。希望这无论如何都有帮助。

答案 1 :(得分:0)

import random as ra

# my _data will hold tuples of gps readings
# under the key of (row,col), knowing that the size of 
# the row and col is 10, it will give an overall grid coverage.
# Another dict could translate row/col coordinates into some 
# more usefull region names

my_data = {}


def get_region(x,y,region_size=10):
    """Build a tuple of row/col based on
       the values provided and region square dimension.
       It's for demonstration only and it uses rather naive calculation as
       coordinate / grid cell size"""
    row = int(x / region_size)
    col = int(y / region_size)
    return (row,col)


#make some examples and build my_data
for loop in range(10000):
    #simule some readings
    x = ra.choice(range(100))
    y = ra.choice(range(100))
    my_coord = get_region(x,y)
    if my_data.get(my_coord):
        my_data[my_coord].append((x,y))
    else:
        my_data[my_coord]= [(x,y),]

print my_data