高德API实现地理逆编码

阅读官网 API 文档,查看各参数含义

 

当我们想获取北京市"麦当劳"全部餐饮地址时,请求的地址: 

https://restapi.amap.com/v3/place/text?keywords=麦当劳&city=北京&offset=20&page=1&key={key}&extensions=base

url中,?后面跟的就是请求时的参数。
  • keywords :要搜索的关键词
  • city :城市,可以查看具体的城市码表(官方提供)
  • offset :每页显示多少条数据
  • page :页数
  • key :之前申请的用户 key
  • extensions : 传入 base 即可,all 的话比较多余

还有些可选项,不传就行啦,比如 output=xml ,默认不传就是 json 形式返回结果。

1. 读取用户 key 函数

目的是读取本地 key ,灵活化处理(这样不用暴露自己的 key 给大家看了 ) user-key中写入你自己的key。

def read_key():
    """  持久化key,便于读取 """
    key_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'user-key')
    print(key_path)
    with open(key_path, 'r', encoding='utf-8') as f:
        key = f.read()
        print(key)
    return key

 2. requests 请求,get 方式通用函数

使用方法按照去看 requests 库的官方文档即可。

def request_url_get(url):
    """ 请求url方法get方法 """
    try:
        r = requests.get(url=url, timeout=30)
        if r.status_code == 200:
            return r.text
        return None
    except RequestException:
        print('请求url返回错误异常')
        return None

3. 调用高德 api 抽象方法,解析返回的 json 函数

使用了 python 自带的 json 库,将高德 api 返回的字符串转为了 json 形式,但是在 python 中,其实是 dict 类型的,获取结果可以通过类似 result['address'] 的形式获取想要的内容。

def parse_json(content_json):
    """  解析json函数 """
    result_json = json.loads(content_json)
    return result_json

def request_api(url):
    """ 请求高德api 解析json """
    result = request_url_get(url)
    result_json = parse_json(result)
    return result_json

4. 调用高德 api 抽象方法,解析返回的 json 函数

def run():
    """ 运行函数 """
    keywords = '麦当劳'
    city = 'beijing'
    key = read_key()
    offset = 20

    index_url = f'https://restapi.amap.com/v3/place/text?keywords={keywords}&city={city}&' \
        f'offset={offset}&page=1&key={key}&extensions=base'
    index_result = request_api(index_url)
    pages = math.ceil(int(index_result['count']) / offset)  # 算出一共需要的总页数

    for page in range(1, pages + 1):
        url = f'https://restapi.amap.com/v3/place/text?keywords={keywords}&city={city}&' \
            f'offset={offset}&page={page}&key={key}&extensions=base'
        result = request_api(url)
        print(result)

最后这个函数,好好说下,精华思路都在这块。

为了代码的灵活度,我们可以将请求的中的变化参数抽出来,作为程序中的变量去构造请求。

请求第一次时,高德地图会返回一个 count 字段,代表总数量,使用 count / offset ,就能得到一共我们要循环访问多少页。代码中做了向上转型的处理。

例如下面:

 

查询北京麦当劳一共 262 个数据,每页只显示 20 条数据(offset的值),所以 262/20 = 13.1 。

这样需要让传入 url 中的 page 从 1 - 14 页去循环获取数据。所以在代码中,使用了 math.ceil 的方法让 13.1 变成 14。

看下最终获取完数据的截图:

 

高德地图的批量地理编码可以使用其Web API实现。以下是实现的大致步骤: 1. 准备需要地理编码的经纬度坐标数据。 2. 通过高德地图Web API发送HTTP请求,获取地理编码结果。 3. 解析返回的JSON格式数据,提取地址信息。 4. 保存地址信息到文件或数据库中。 以下是一个Python示例代码,实现高德地图批量地理编码的功能: ```python import requests import json # 高德地图Web API的请求URL url = 'https://restapi.amap.com/v3/geocode/regeo' # 高德地图Web API的开发者密钥 key = 'your_api_key' # 待地理编码的经纬度坐标数据 coordinates = [ {'lng': 116.481488, 'lat': 39.990464}, {'lng': 116.417901, 'lat': 39.921988}, {'lng': 121.47876, 'lat': 31.238176} ] # 批量地理编码 for coord in coordinates: params = { 'location': '{},{}'.format(coord['lng'], coord['lat']), 'key': key, 'output': 'JSON', 'radius': 1000, 'extensions': 'base' } response = requests.get(url, params) result = json.loads(response.text) if result['status'] == '1': address = result['regeocode']['formatted_address'] print(address) else: print('地理编码失败') ``` 在上述示例代码中,需要将`your_api_key`替换为自己的高德地图Web API开发者密钥。另外,`coordinates`变量中的经纬度坐标可以根据实际情况进行修改。最后,将地理编码结果保存到文件或数据库中可以使用Python内置的文件操作或数据库API实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值