存储3个最近坐标

时间:2011-04-22 20:42:49

标签: python xml gps coordinates geopy

我有一个XML文件,其中包含许多经度和纬度的点。

我的python代码通过简单地循环遍历XML文件,找到最近的,以英里为单位或其他任何值,然后将其与之前的最近点进行比较,得到最近的点。如果它更近,那么我给变量赋值这个新点的值。所以一切都在这方面发挥作用。

现在,我想要做的是实际存储最近的2或3点。 我该怎么做呢? XML文件不是按最近的顺序排序,此外,每次发出请求时,用户位置都会更改。我可以使用XML文件执行此操作,还是可能需要考虑存储数据是SQL Server还是MySQL?

感谢您的帮助。 PS,如果有人有兴趣,示例代码为available here。这是大学项目的一部分。

2 个答案:

答案 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?
..................