我有一个XML文件,其中包含许多经度和纬度的点。
我的python代码通过简单地循环遍历XML文件,找到最近的,以英里为单位或其他任何值,然后将其与之前的最近点进行比较,得到最近的点。如果它更近,那么我给变量赋值这个新点的值。所以一切都在这方面发挥作用。
现在,我想要做的是实际存储最近的2或3点。 我该怎么做呢? XML文件不是按最近的顺序排序,此外,每次发出请求时,用户位置都会更改。我可以使用XML文件执行此操作,还是可能需要考虑存储数据是SQL Server还是MySQL?
感谢您的帮助。 PS,如果有人有兴趣,示例代码为available here。这是大学项目的一部分。
答案 0 :(得分: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 :(得分: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?
..................