<p>以下是您的代码,经过一些修改后可以执行(我认为)您想要的:</p>
<pre><code># adapted from haversine.py <https://gist.github.com/rochacbruno/2883505>
# see also <http://en.wikipedia.org/wiki/Haversine_formula>
from math import atan2, cos, sin, sqrt, radians
def calc_distance(origin, destination):
"""great-circle distance between two points on a sphere
from their longitudes and latitudes"""
lat1, lon1 = origin
lat2, lon2 = destination
radius = 6371 # km. earth
dlat = radians(lat2-lat1)
dlon = radians(lon2-lon1)
a = (sin(dlat/2) * sin(dlat/2) + cos(radians(lat1)) * cos(radians(lat2)) *
sin(dlon/2) * sin(dlon/2))
c = 2 * atan2(sqrt(a), sqrt(1-a))
d = radius * c
return d
from xml.dom import minidom
xmldoc = minidom.parse("placemarks.kml")
kml = xmldoc.getElementsByTagName("kml")[0]
document = kml.getElementsByTagName("Document")[0]
placemarks = document.getElementsByTagName("Placemark")
nodes = {}
for placemark in placemarks:
nodename = placemark.getElementsByTagName("name")[0].firstChild.data[:-1]
coords = placemark.getElementsByTagName("coordinates")[0].firstChild.data
lst1 = coords.split(",")
longitude = float(lst1[0])
latitude = float(lst1[1])
nodes[nodename] = (latitude, longitude)
## used for testing due to lack of kml file...
#nodes = {
# u'node0': (21.78400936610002, 38.2874355527483),
# u'node1': (21.78453228393861, 38.28690995466475),
# u'node2': (21.7848823502596, 38.2869152766261),
# u'node3': (21.78459887820567, 38.28740826552452)}
node0coords = nodes[u'node0']
for nodename in sorted(name for name in nodes if name != u'node0'):
longitude, latitude = nodes[nodename]
print('{}: ({:3.14f}, {:3.14f}), distance from node0: {:.3f} km'.format(
nodename, longitude, latitude,
calc_distance(node0coords, nodes[nodename])))
</code></pre>
<p>输出:</p>
^{pr2}$