lab_weather/geocoder/baidu_reverse.py

92 lines
2.2 KiB
Python

#!/usr/bin/python
# coding: utf8
from __future__ import absolute_import
import logging
from geocoder.location import Location
from geocoder.base import OneResult
from geocoder.baidu import BaiduQuery
class BaiduReverseResult(OneResult):
@property
def ok(self):
return bool(self.address)
@property
def address(self):
return self.raw['formatted_address']
@property
def country(self):
return self.raw['addressComponent']['country']
@property
def province(self):
return self.raw['addressComponent']['province']
@property
def state(self):
return self.raw['addressComponent']['province']
@property
def city(self):
return self.raw['addressComponent']['city']
@property
def district(self):
return self.raw['addressComponent']['district']
@property
def street(self):
return self.raw['addressComponent']['street']
@property
def housenumber(self):
return self.raw['addressComponent']['street_number']
class BaiduReverse(BaiduQuery):
"""
Baidu Geocoding API
===================
Baidu Maps Geocoding API is a free open the API, the default quota
one million times / day.
Params
------
:param location: Your search location you want geocoded.
:param key: Baidu API key.
:param referer: Baidu API referer website.
References
----------
API Documentation: http://developer.baidu.com/map
Get Baidu Key: http://lbsyun.baidu.com/apiconsole/key
"""
provider = 'baidu'
method = 'reverse'
_URL = 'http://api.map.baidu.com/geocoder/v2/'
_RESULT_CLASS = BaiduReverseResult
def _build_params(self, location, provider_key, **kwargs):
location = Location(location)
params = {
'location': str(location),
'ret_coordtype': kwargs.get('coordtype', 'wgs84ll'),
'output': 'json',
'ak': provider_key
}
if ('lang_code' in kwargs):
params['accept-language'] = kwargs['lang_code']
return params
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
g = BaiduReverse("39.983424,116.32298", key='')
g.debug()