2. Datasets : 지역별 주유소 위치 정보 및 가격 정보 데이터셋과 사용자의 현재 위치 받기
1. 유가정보 API 신청
우리팀은 지역별 주유소 위치 정보 및 가격 정보를 제공하기 위해 오피넷(Opinet)의 유가정보 API를 활용하였다. 오피넷이란 한국석유공사에서 운영중인 유가 정보 사이트로, 석유사업자가 보고한 자료를 토대로 전국 주유소와 자동차충전소의 현재 판매 가격과 정유사, 대리점의 평균 공급가격 등 다양한 유가 정보를 제공하고 있다.
오피넷에서 제공하는 유가정보 API 리스트를 보면 주유소 전국 평균가격(현재)부터 전국/지역별 최저가 주유소(Top 20)까지 있는 것을 확인할 수 있는데, 우리는 그 중에서 특정한 위치에서 지정된 거리 내에 있는 주유소의 유가정보가 필요하므로 아래의 반경 내 주유소 API만을 사용했다. 해당 API를 사용하면 검색할 반경(radius)을 원하는대로 설정이 가능하고, 제품(prodcd)과 정렬방식(sort)도 선택이 가능하다.
2. 사용자의 현재 위치 받기
유가 정보 API를 사용하기 전, 서비스의 편리한 사용을 위해 우리는 사용자의 위치 정보를 Google Geolocation API로 받아오고자 했다. 사용자가 "최저가 주유소 찾아줘" 했을 때, 스피커로 하여금 "어디 사시는데요?'라고 되묻지 않게 말이다. Google Geolocation API는 사용자의 기지국 및 WiFi 노드에 대한 정보를 기반으로 위치 및 정확도 반경을 반환한다. 우리는 Google Geolocation API를 이용해서 사용자의 Ip주소를 통해 현위치의 위도, 경도값을 받아 사용하기로 했다.
def location(): #find users location
url = 'https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyDkx6muQn1Jz-y6hLOcTPVdYAhklm6WJQo'
data = {
'considerIp': True,
#'homeMobileCountryCode': 450,
#'homeMobileNetworkCode': 5,
#'radioType':'gsm',
#'carrier': "SKTelecom",
#"wifiAccessPoints":[{'macAddress':'40:DC:9D:06:EC:CA'}]
}
result = requests.post(url, data)
a=result.json()
lat=a['location']['lat'] # Y point
lng=a['location']['lng'] # X point
return lat,lng
Google Geolocation API를 불러오는 데에는 성공했지만, 오피넷과 Geolocation에서 요구하는 위도랑 경도값 측정 단위가 서로 달랐다. 오피넷은 kotec이라는 기준으로 측정한 값이고, Geolocation은 wgs84라는 기준으로 측정한 값이었다. 따라서 우리는 wgs84에서 kotec(=tm128)으로 변환하는 과정을 함수로 만들어주었다. 함수의 내용은 링크을 참고했다.
WGS84 형식에서 오피넷의 TM128 형식으로 변환하기
우리는 좌표 변환에 관련된 함수를 포함하고있는 Pyproj 패키지를 이용했다. parameter로 받은 WGS84형식의 lat,lng 값을 TM128형식으로 변환하여 x_point
, y_point
변수에 담아 반환한 것이다. 자세한 코드 설명은 다음 포스팅에서 계속된다.
def trans(lat,lng): #wgs84 -> tm128
WGS84 = { 'proj':'latlong', 'datum':'WGS84', 'ellps':'WGS84', }
TM128 = { 'proj':'tmerc', 'lat_0':'38N', 'lon_0':'128E', 'ellps':'bessel',
'x_0':'400000', 'y_0':'600000', 'k':'0.9999',
'towgs84':'-146.43,507.89,681.46'}
def wgs84_to_tm128(longitude, latitude):
return transform( Proj(**WGS84), Proj(**TM128), longitude, latitude )
x_point,y_point=wgs84_to_tm128(lng,lat)
return x_point,y_point
3. 유가정보 API 요청
사용자의 위치정보를 알고 난 후에는 그에 맞는 주유소 상호와 판매 가격을 유가 정보 API에서 불러왔다. 우리팀은 browse 함수를 통해 불러 왔으며 우리가 사용하고자하는 Element는 다음과 같았다
- OS_NM : 주유소 상호
- PRICE : 판매 가격
def ask_oil_type(ans):
if ans == "경유" :
return "D047"
elif ans == "휘발유" :
return "B027"
else :
return None
def browse(x_point,y_point,oil_type):
url = 'http://www.opinet.co.kr/api/aroundAll.do'
payload = {
"code" : 'key값', // 인증키 값은 오피넷에 메일을 보내 받을 수 있음
"out" : "json",
"x" : x_point,
"y" : y_point,
"radius" : "5000",
"prodcd" : oil_type ,
"sort" : "1"
}
result = requests.get(url,params=payload).json()
return result
좌표 변환 후 뽑아낸 유가정보 API 속 주유소 상호와 가격은 아래와 같다.
Author And Source
이 문제에 관하여(2. Datasets : 지역별 주유소 위치 정보 및 가격 정보 데이터셋과 사용자의 현재 위치 받기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nuguoil/2.-Datasets-지역별-주유소-위치-정보-및-가격-정보-데이터셋과-사용자의-현재-위치-받기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)