0

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

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

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

谢谢您的帮助。PS,如果有人感兴趣,可以在此处获得示例代码。这是大学项目的一部分。

4

2 回答 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成员的距离。

于 2011-04-22T20:53:20.620 回答
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?
..................
于 2011-04-22T21:26:49.960 回答