我尝试在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]
两个数据库都包含纬度和经度
答案 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)