我有一个名为coords的表,其中以下各列|name|lat|lon|und|

import sqlite3
database = sqlite3.connect('geoida.db')
cursor = database.cursor()
cursor.execute("select lat, lon, und  from coords")
results = cursor.fetchall()


表格中的每一行都存储一个点的坐标,点与点之间的距离始终为十进制0.041667,
等于2.5英寸。
我想实现的是在给定的纬度和经度附近以十进制找到4个最近的相邻点。
我们必须记住,这四个点的纬度和经度必须满足非常简单的条件:
+或-相邻点的经度,纬度与给定点的经度,纬度之间的差必须小于/等于0.041667
或者我们可以将此值视为给定值的最大半径除法搜索的相邻点。

例如:

给定点56.02050000 13.02040000
从我的座标表中获取的4个最近的相邻点是:

56.000000   13.000000
56.000000   13.041667
56.041667   13.000000
56.041667   13.041667


给定的点存储在另一个数据库中,其中C1是纬度,C2是经度

database = sqlite3.connect('F.tsj')
cursor = database.cursor()
cursor.execute("select C1, C2 from tblSoPoints")
results = cursor.fetchall()


如何使用python进行此类查询?
对不起,代码,但是格式有问题。

最佳答案

def find_adjacent_coords(db, lat, lon, step=0.041667):
    """Find coords that are in a +/- step range of lat, lon."""
    #XXX disregard values near +/- 90 latitude, +/- 180 longitude
    coords_range = lat-step, lat+step, lon-step, lon+step
    return db.execute("""select lat, lon from coords where
lat > ? and lat < ? and
lon > ? and lon < ?""", coords_range).fetchall()


full example with rtree index

注意:此代码不包含边界。

对于非常有效的范围查询,如果有数百万个坐标,则可能需要SQLite R-Tree index

对于1000000个条目,上述方法花费〜0.16秒,但是使用rtree的函数需要不到1ms的时间。对于10000个条目,它是800 µs,而对于基于rtree的测试数据解决方案则是20 µs。免责声明:这些数字是我在计算机上运行的已发布代码的。

10-05 21:08
查看更多