我有两个CSV文件。一个包含City,Lat,Long,另一个包含City对,即City1,City2。我必须计算这些城市对之间的距离。
City_pair.csv第一个csv文件
City1,City2
Mumbai,Bengaluru
Delhi,Mumbai
Bengaluru,Delhi
Lat_long.csv第二个csv文件
City,Lat,Long
Mumbai,19.1195,72.8469
Bengaluru,13.0046,77.6351
Delhi,28.714,77.1673
为此,我必须从lat_long.csv文件中获取每个城市的纬度,以便在city_pair.csv中每次出现它,然后将其提供给osrm api。
现在我无法拿起与城市相对应的纬线。以下是我尝试过的内容:
def distance():
global latitude1,latitude2,longitude1,longitude2
with open('city_pair.csv') as fin1,\
open('lat_long.csv') as fin2:
reader1 = DictReader(fin1)
reader2 = DictReader(fin2)
for line2 in reader2:
outline = dict(line2)
fin1.seek(0) # resets the reader1 iterator
for line1 in reader1:
if line1['City1'] in line2['City'].lower():
latitude1 = line2['Lat']
longitude1 = line2['Long']
orig_coord= latitude1, longitude1
if line1['City2'] in line2['City'].lower():
latitude2 = line2['Lat']
longitude2 = line2['Long']
dest_coord = latitude2, longitude2
print latitude1,longitude1
url = "http://localhost:5000/viaroute?loc="+str(latitude1)+","+str(longitude1)+"&loc="+str(latitude2)+","+str(longitude2)
result= simplejson.load(urllib.urlopen(url))
driving_time = result['route_summary']['total_time']
driving_distance = result['route_summary']['total_distance']
print "Distance between"+line1['City1']+"to"+line1['City2']+ " = "+driving_distance
print "Travel Time between"+line1['City1']+"to"+line1['City2']+ " = "+driving_time
答案 0 :(得分:2)
我只需要通过lat_long.csv一次,然后将所有数据转储到dict中。然后你就可以更快更容易地访问它。
请注意,您当前的解决方案是丑陋的,O(n ^ 2)vs转储到dict,然后访问has表以获取lats和longs只有O(n)
答案 1 :(得分:0)
使用以下代码获取所有城市lat&长到字典然后用你的代码来计算城市之间的距离。
import csv
with open('lat_long.csv', 'rb') as src_file:
csv_file = csv.reader(src_file)
lat_long_dict = {}
for row in csv_file:
lat_long_dict[row[0]] = [row[1], row[2]]