2011-04-22 63 views
0

我有一個XML文件,其中包含許多經度和緯度的點。商店3最近的座標

我的Python代碼此刻通過簡單循環XML文件獲取最近的點,找到最近的,以英里或其他任何值,然後將它與以前的最近點進行比較。如果它更接近,那麼我將這個新點的值賦給變量。所以一切都在這方面發揮作用。

現在,我想要做的是實際存儲最接近的2或3分。 我該如何去做這件事? XML文件不是按最接近的順序排列的,此外,每次發出請求時,用戶位置都會發生變化。我可以用XML文件來做這件事嗎?或者我可能不得不考慮存儲數據是SQL Server還是MySQL?

感謝您的幫助。 PS,如果有人感興趣,示例代碼是available here。這是大學項目的一部分。

回答

1

您應該在解析de xml文件時存儲元組(例如)所有點對及其距離的列表。

mypoints = [(distance12, x1, x2),...,(distancenm, xn, xm)] 
mypoints.sort() 
three_closer = mypoints[:3] 

適應這代碼:

.............. 
mypoints = [] 
for row in rows: 
    # Get coords for current record 
    curr_coords = row.getAttribute("lat") + ',' + row.getAttribute("lng") 
    # Get distance 
    tempDistance = distance.distance(user_coords, curr_coords).miles 
    mypoints.append((tempDistance, row)) 

mypoints.sort() 
#the three closest points: 
mythree_shorter = mypoints[0:3] 
for distance, row in mythree_shorter: 
    shortestStation = json.dumps(
          {'number': row.getAttribute("number"), 
          'address': row.getAttribute("address"), 
          'lat': row.getAttribute("lat"), 
          'lng': row.getAttribute("lng"), 
          'open': row.getAttribute("open")}, 
          sort_keys=True, 
          indent=4) 
    save_in_some_way(shortestStation) #maybe writing to a file? 
.................. 
+0

感謝您的幫助!我不認爲寫入文件是可行的,因爲這些數據將被iPhone使用。我不太理解第二個for()循環。它如何知道只能得到最近的3個?我假設它在'mypoints [0:3]'中完成,但我的python只是基本的。我會無論如何測試它,並讓你知道。 – eoinzy 2011-04-22 22:41:38

+0

謝謝華金!我使用了一些你的代碼,並使其工作!唯一缺少的是「最短站點」上的「+ =」,所以我現在擁有的方式是「最短站點=最短站點+ json.dumps()....」。再次感謝!! – eoinzy 2011-04-22 22:55:11

+1

最接近的三個存儲在mythree_sorter中,並按循環順序進行。第二個for循環是爲了保存三個更接近的點,作爲json字符串序列化(列表,文件),或者將它們發送到某處(取決於您)... – joaquin 2011-04-22 22:59:27

1

這裏是一個將任何點數工作的解決方案:

closest = points[:NUM_CLOSEST] 
closest.sort() 
for point in points[NUM_CLOSEST:]: 
    if point.distance < closest[-1].distance: 
     closest[-1] = point 
     closest.sort() 

顯然,有點僞科迪。調用sort()可能需要一個參數,以便以有用的方式對它們進行排序,並且您可能需要一個函數來計算距離以取代distance成員。

+0

感謝您的答覆!排序()是要走的路! – eoinzy 2011-04-22 22:53:21