<p>您可以简单地定义一个函数来计算距离,并使用<a href="https://wiki.python.org/moin/HowTo/Sorting" rel="nofollow noreferrer">^{<cd1>}</a>参数对公共汽车站进行排序:</p>
<pre><code>from math import cos, sqrt
R = 6371000 #radius of the Earth in m
def distance(lon1, lat1, lon2, lat2):
x = (lon2 - lon1) * cos(0.5*(lat2+lat1))
y = (lat2 - lat1)
return R * sqrt( x*x + y*y )
bustops = [{"BusStopCode": "00481", "RoadName": "Woodlands Rd", "Description": "BT PANJANG TEMP BUS PK", "Latitude": 1.383764, "Longitude": 103.7583},
{"BusStopCode": "01012", "RoadName": "Victoria St", "Description": "Hotel Grand Pacific", "Latitude": 1.29684825487647, "Longitude": 103.85253591654006}]
print(sorted(bustops, key= lambda d: distance(d["Longitude"], d["Latitude"], 103.5, 1.2)))
# [{'BusStopCode': '01012', 'RoadName': 'Victoria St', 'Description': 'Hotel Grand Pacific', 'Latitude': 1.29684825487647, 'Longitude': 103.85253591654006}, {'BusStopCode': '00481', 'RoadName': 'Woodlands Rd', 'Description': 'BT PANJANG TEMP BUS PK', 'Latitude': 1.383764, 'Longitude': 103.7583}]
</code></pre>
<p>一旦这个列表被排序,您可以简单地用<code>[:5]</code>提取最近的5个公共汽车站。
它应该足够快,即使有5000个公共汽车站。在</p>
<p>请注意,如果您不关心具体的距离,而只想对公共汽车站进行排序,则可以使用此函数作为键:</p>
^{pr2}$