存储3个最近的坐标
我有一个XML文件,里面记录了一些点的经度和纬度。
我现在的Python代码是通过循环遍历这个XML文件来找到最近的点,计算距离(比如用英里),然后和之前找到的最近点进行比较。如果这个新点更近,我就把它的值赋给一个变量。所以在这方面一切都正常。
现在,我想做的是存储最近的2到3个点。我该怎么做呢?这个XML文件并不是按距离排序的,而且用户的位置每次请求都会变化。我能用XML文件来实现这个功能吗?还是说我需要考虑把数据存储到SQL Server或MySQL里呢?
谢谢你的帮助。
顺便说一下,如果有人感兴趣,样例代码可以在这里找到。这是一个大学项目的一部分。
2 个回答
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
这个成员。
1
你应该在解析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?
..................