2014-07-01 2 views
0

Google의 길 찾기 API에 쿼리를 보내고 있습니다. 다른 프로그램에서 원점 및 목적지 위도 및 경도 좌표를 생성합니다. 나는 현재 내가 이러한 쿼리를 생성하는 환상적인 파이썬 요청을 사용하고Python 요청 필드에 다양한 입력 파일 사용

Y,X, 
51.516185371445459,-0.102373799765274, 
51.512892732882598,-0.083154776597858, 
51.514087813699639,-0.097131850779755, 

이 구조에 CSV의 파일이 저장하고 있지만, 필드에서 지정하는 방법을 작동하지 않을 수, a는 내가 가지고있는 이러한 CSV 파일을 찾아 만들어진. 다음을 사용 중입니다 -

>>> import json, requests 
>>> params = {'origin': '*directory to csv location*', 'destination': '*directory to csv location*', 'key': '*key*'} 
>>> r = requests.get('https://maps.googleapis.com/maps/api/directions/json', params=params) 
>>> print(r.url) 

파일이있는 위치와 사용할 CSV 필드를 어떻게 알 수 있습니까? API의 경우 쉼표 나 공백없이 좌표를 입력해야하므로이 조작을 수행해야합니다.

아마도 CSV를 사용하는 것보다 더 좋은 방법이 있을까요?

+1

CSV 파일을 API에 넘겨 줄 수는 없습니다. CSV에서 'csv'모듈을 사용하여 데이터를 쉽게 읽을 수 있습니다. API에 필요한 매개 변수를 확인하려면 [API 설명서] (https://developers.google.com/maps/documentation/directions/)를 읽었습니까? –

+0

여기에는 출발지와 목적지가 어떤 좌표로 지정되어 있습니까? –

+0

많은 감사! 출발지와 목적지가 서로 다른 두 개의 CSV로되어 있습니다. 하나의 CSV에 넣고 다른 열에 넣는 것이 더 낫지 않습니까? 나는 경유지가 없어서 물건을 단순화합니다. – LearningSlowly

답변

2

아니요, Google Maps API webservice 또는 requests은 CSV 파일 이름입니다. 먼저 CSV 파일에서 데이터를 읽은 다음 API에 값을 전달해야합니다. 여기

import requests 
import csv 

url = 'https://maps.googleapis.com/maps/api/directions/json' 
apikey = '*key*' 

with open('csv_filename', 'r', newline='') as csvfile: 
    reader = csv.DictReader(csvfile) 
    coords = ['{X},{Y}'.format(**row) for row in reader] 
    start, waypoints, end = coords[0], coords[1:-1], coords[-1] 
    params = {'origin': start, 
       'waypoints': '|'.join(waypoints), 
       'destination': end, 
       'key': apikey} 
    directions = requests.get(url, params=params).json() 

에서, DictReader() 키로 첫 번째 행을, 그래서 각 열은 각각 XY으로 해결할 수있다 : 당신이 대신의 csv module를 사용할 수 있습니다. 그런 다음 Google이 이해할 수있는 문자열로 형식을 지정합니다.

나는 CSV 파일이 길 찾기를 위해 일련의 포인트를 나타낸다고 가정했습니다. 시작, 중간 지점 및 끝.

데모 :이 특정한 경우

>>> import csv 
>>> import requests 
>>> sample = '''\ 
... Y,X, 
... 51.516185371445459,-0.102373799765274, 
... 51.512892732882598,-0.083154776597858, 
... 51.514087813699639,-0.097131850779755, 
... ''' 
>>> reader = csv.DictReader(sample.splitlines()) 
>>> next(reader) 
{'': '', 'X': '-0.102373799765274', 'Y': '51.516185371445459'} 
>>> reader = csv.DictReader(sample.splitlines()) 
>>> coords = ['{X},{Y}'.format(**row) for row in reader] 
>>> start, waypoints, end = coords[0], coords[1:-1], coords[-1] 
>>> params = {'origin': start, 
...   'waypoints': '|'.join(waypoints), 
...   'destination': end, 
...   'key': 'someapikey'} 
>>> params 
{'destination': '-0.097131850779755,51.514087813699639', 'waypoints': '-0.083154776597858,51.512892732882598', 'key': 'someapikey', 'origin': '-0.102373799765274,51.516185371445459'} 
>>> url = 'https://maps.googleapis.com/maps/api/directions/json' 
>>> directions = requests.get(url, params=params).json() 
>>> from pprint import pprint 
>>> pprint(directions) 
{'routes': [], 'status': 'ZERO_RESULTS'} 

는 좌표 실제로 그렇게 'status': 'ZERO_RESULTS'가 반환, 실행 가능한 경로에 포함되지 않는.

관련 문제