如何使用python在2d网格中找到最近的邻居点坐标

时间:2011-10-16 15:26:17

标签: python sqlite coordinates geospatial latitude-longitude

我尝试在geoida数据库中找到第二个数据库中存储的每个点的最近点。 这可能接近,这是非常缓慢的。 geoida.db存储+55000坐标

import sqlite3
from kdtree import KDTree

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

database = sqlite3.connect('F.tsj')
cursor = database.cursor()
cursor.execute("select C1, C2 from tblSoPoints") 
results = cursor.fetchall()
for line in results:
    tree = KDTree.construct_from_data(geoid)
    nearest = tree.query(query_point=line, t=2)
    print nearest[0]

两个数据库都包含纬度和经度

2 个答案:

答案 0 :(得分:3)

为什么一遍又一遍地构建KDTree?在我看来,你应该构建一次并查询每一点。构造树是O(N log N)(或O(N(log N)^ 2),取决于算法)所以这样做N次使得算法O(N ^ 2 log N)。构造一次树并查询它将使复杂度保持在O(N log N)。

答案 1 :(得分:2)

只需在循环外创建树:

tree = KDTree.construct_from_data(geoid)
for line in results:
  nearest = tree.query(query_point=line, t=2)