PythonでBaiduの地図正/逆地理符号化APIを呼び出します。


一、背景
  • (正)地理的符号化とは、地理的位置名を経緯度に変換すること。
  • 逆地理符号化とは、地名、所在の省や都市などの地理的位置情報に緯度を変換する
  • のことです。
    Baiduの地図はAPIを提供しています。対応する説明文書は以下の通りです。
  • 正地理コード
  • 逆地理コード
  • 具体的なAPIのパラメータは、対応する「サービスドキュメント」を参照することができる。

    しかし、初めて使うときは申請が必要で、具体的にはコンソールです。AKを申請する方法は他の文章を参照してください。
    二、ソースコード
    余計なことを言わないで、直接ソースを入れます。ここでは、Pythonがこの2つのAPIを呼び出す方法が提供される。
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # @Author: Wild Orange
    # @Email: [email protected]
    # @Date: 2020-06-21 16:06:14
    # @Last Modified time: 2020-07-01 19:35:28
    
    import requests
    AK='[         AK ]'
    
    def Pos2Coord(name):
    	'''
    		@func:       API           
    		@note:      http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
    		@output:
    			lng:   
    			lat:   
    			conf:       (         )
    			comp:         。    0-100,    ,           
    			level:           
    	'''
    	url = 'http://api.map.baidu.com/geocoding/v3/?address=%s&output=json&ak=%s'%(name,AK)
    	res = requests.get(url)
    	if res.status_code==200:
    		val=res.json()
    		if val['status']==0:
    			retVal={'lng':val['result']['location']['lng'],'lat':val['result']['location']['lat'],\
    			'conf':val['result']['confidence'],'comp':val['result']['comprehension'],'level':val['result']['level']}
    		else:
    			retVal=None
    		return retVal
    	else:
    		print('    %s   '%name)
    
    def Coord2Pos(lng,lat,town='true'):
    	'''
    		@func:       API           
    		@input:
    			lng:   
    			lat:   
    			town:              ,    。    (true/false)
    		@output:
    			address:          
    			province:    
    			city:   
    			district:       
    			town:        
    			adcode:         
    			town_code:         
    	'''
    	url='http://api.map.baidu.com/reverse_geocoding/v3/?output=json&ak=%s&location=%s,%s&extensions_town=%s'%(AK,lat,lng,town)
    	res=requests.get(url)
    	if res.status_code==200:
    		val=res.json()
    		if val['status']==0:
    			val=val['result']
    			retVal={'address':val['formatted_address'],'province':val['addressComponent']['province'],\
    			'city':val['addressComponent']['city'],'district':val['addressComponent']['district'],\
    			'town':val['addressComponent']['town'],'adcode':val['addressComponent']['adcode'],
    			'town_code':val['addressComponent']['town_code']}
    		else:
    			retVal=None
    		return retVal
    	else:
    		print('    (%s,%s)     !'%(lat,lng))
    注意:
    関数は、より一般的な地理的位置情報だけを返します。前に述べた公式サイトの説明文書は一番完璧です。必要があれば、プログラムコードを修正できます。
    三、使い方
    (1)正地理符号化
    例えば学校の経緯度を取る:
    
    val=Pos2Coord('                      ')
    print(val)
    出力結果:
    ''lng':118.81871976794395、'lat':31.8198449339288、'conf':80、'comp':57、'level':'飲食'。
    結果には一定のずれがあることがわかる。なんと学校をレストランと表記しました。私たちは具体的にBaiduの座標システムに行ってみます。その結果、学校の南西に位置しました。

    (2)逆地理符号化
    逆に、私たちは経緯度によって地理位置情報を調べられます。
    
    val=Coord2Pos(118.81871976794395,31.88198449339288)
    print(val)
    
    出力結果:
    ''address':'江蘇省南京市江寧区蘇源大道','province':'江蘇省','city''南京市','district':'江寧区','town':'草陵街道','adcode':'32015','town_code':'320111''
    解析した地理的位置情報は正確で、郷鎮級行政区画に正確に行くことができます。
    (3)おもしろい例
    前にも見たように、正地理符号化では、提供された地理的位置情報が不正確であれば、戻る経緯度に大きな偏りがある可能性が高い。企業名によって地理的位置(経緯度)や所在の省、地級市、県級市などの情報を取得する必要があります。
    一つの直接的な考えは、企業名を地理的な位置として、直接に地理的なコードAPIに伝え、その経緯度を得ることである。また、経緯度に基づき、逆地理コードを利用して、その所在の省、地級市、県級市を取得する。
    栗を勝手に挙げてください。例えば「金華銀行株式有限公司」です。
    
    val=Pos2Coord('          ')
    print(val)
    結果:
    ''lng':119.65923457293306、'lat':29.1078796331567、'conf':70、'compp':100、'level':金融''
    どこに位置しているかを見ます。

    emm…広場の隣に位置しています。でも大体の位置は正確です。やはり金華市内です。精度が要求されないなら、この結果はまだ受け入れられます。
    精度が要求されるなら?私たちは非常に正確な企業位置情報を得る必要があります。Baiduの企業信用は、企業基本情報の照会を提供する。

    浙江省金華市丹渓路1388号です。
    私たちはこの住所をAPIに代入します。
    
    Pos2Coord('         1388 ')
    結果:
    ''lng':119.65161604390546、'lat':29.083161562144、'conf':80,comp':100,'level':'門跡''
    場所はどこですか?

    emm…見えないようです。私もここに詳しくないです。直接に百度の地図を見に行きます。

    最大に置くと、ちょうど「金華銀行」の上に座標が落ちています。Perfect!
    人工的に企業の具体的な地理位置を取得するのは面倒くさいようです。簡単な方法がありますか?前に書いた文章を確認できます。Python爬虫類で百度企業信用の企業基本情報を取得します。
    最後に、逆地理コードで省、地級市、県級市の情報を取得します。
    
    Coord2Pos(119.65161604390546,29.083163015462144)
    出力結果:
    ''address':'浙江省金華市ブ城区双龍南街680号','province':'浙江省','city''金華市','district':'ブ城区',town':'西関街道','adcode':'33072','town_code':'33072007''
    ここでは、PythonでBaiduの地図を呼び出すには、詳細については、APIの記事を紹介します。Baiduの地図を呼び出すと、より多くの関連Python/逆地理コードの内容は、私たちの前の記事を検索してください。または、次の関連記事を参照してください。これからもよろしくお願いします。