2011-10-16 135 views
2

我嘗試爲存儲在第二個數據庫中的每個點找到大地水準面數據庫中最近的點。 以下是可能的方法,這是非常緩慢的。 geoida.db店55000座標如何使用python查找二維網格中最近的相鄰點座標

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

只需創建樹外循環:

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

Thaks,現在腳本運行得非常快。 – daikini

3

你爲什麼要一遍又一遍構建KDTree?在我看來,你應該構造一次併爲每個點查詢它。根據算法構造樹是O(N log N)(或者O(N(log N)^ 2),所以這樣做N次使得算法O(N^2 log N)。構造一次樹並查詢它將使複雜度保持在O(N log N)。

+0

謝謝你的建議,我是絕對的初學者。 – daikini

相關問題