2.データセット:ローカルガソリンスタンド位置情報と価格情報データセット及びユーザーの現在位置を取得する

11878 ワード

1.ガソリン価格情報APIの申請


各地域のガソリンスタンドの位置情報と価格情報を提供するために、私たちのグループはオフィス(Optinet)のガソリン価格情報APIを使用しました.OfficeNetは韓国石油公社が運営する原油価格情報サイトで、石油企業が報告した資料によると、全国のガソリンスタンドと自動車充電ステーションの現在の販売価格と製油会社、代理店の平均供給価格など、多様な原油価格情報を提供している.

officetが提供するガソリン価格情報APIリストからガソリンスタンドの全国平均価格(現在)から全国/地域最低価格ガソリンスタンド(TOP 20)まで、指定距離内のガソリンスタンドのガソリン価格情報の1つが必要なので、下半径内のガソリンスタンド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のロードに成功しましたが、OfficeNetとGeolocationでは緯度と経度の測定単位が異なります.オフィスネットワークはkotecを基準として測定された値であり、Geolocationはwgs 84を基準として測定された値である.従って,wgs 84をkotec(=tm 128)に変換する過程は関数となる.関数の内容はリンクを参照してください.

WGS 84フォーマットをオフィスネットワークのTM 128フォーマットに変換


座標変換に関する関数を含むPyprojパッケージを用いた.parameterとして受け取ったWGS 84形式のlat,lng値をTM 128形式に変換し,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のガソリンスタンド商号と価格は以下の通りである.