0

経度と緯度を含む多数のポイントを含む XML ファイルがあります。

現時点での私の python コードは、単純に XML ファイルをループして最も近いポイントを取得し、マイルなどで最も近いポイントを見つけ、それを以前の最も近いポイントと比較します。近い場合は、変数にこの新しいポイントの値を割り当てます。そのため、すべてがその点で機能しています。

今、私がやりたいことは、実際に最も近い 2 つまたは 3 つのポイントを保存することです。どうすればこれを行うことができますか?XML ファイルは最も近い順に並べられていません。さらに、リクエストが行われるたびにユーザーの場所が変更されます。XMLファイルでこれを行うことはできますか、それともSQL ServerまたはMySQLでデータを保存することを検討する必要がありますか?

助けてくれてありがとう。PS、興味のある方はサンプルコードをこちらから入手できます。これは大学のプロジェクトの一部です。

4

2 に答える 2

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?
..................
于 2011-04-22T21:26:49.960 に答える
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 に答える