gpt4 book ai didi

python - 如何使用python确定网格数据库中给定纬度和经度周围的4个最近相邻点

转载 作者:行者123 更新时间:2023-12-03 01:00:44 25 4
gpt4 key购买 nike

我有一个名为 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 的函数需要不到 1 毫秒。对于 10000 个条目,测试数据的基于 rtree 的解决方案为 800 µs,而基于 rtree 的解决方案为 20 µs。免责声明:这些数字是我发布的在我的机器上运行的代码的数字。

关于python - 如何使用python确定网格数据库中给定纬度和经度周围的4个最近相邻点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com