使用高德地图服务获取全部行政区划与各个省市的地理坐标


使用的接口API是行政“区域查询” https://lbs.amap.com/api/webservice/guide/api/district

1. 申请高德地图Key

首先打开上面的链接,根据要求去申请一个key
在这里插入图片描述

登录以后进入到自己的控制台,在应用界面创建新的应用
在这里插入图片描述
在这里插入图片描述

创建之后就可以拿到自己的Key了
在这里插入图片描述

2. 编写python代码,访问API,解析内容

2.1 获取所有的省市分类

中国的所有省市分类如下

参考百度文库https://baike.baidu.com/item/%E7%9C%81%E4%BB%BD/1635191?fr=aladdin
23个省分别为:河北省、山西省、辽宁省、吉林省、黑龙江省、江苏省、浙江省、安徽省、福建省、江西省、山东省、河南省、湖北省、湖南省、广东省、海南省、四川省、贵州省、云南省、陕西省、甘肃省、青海省、台湾省。
5个自治区分别为:内蒙古自治区、广西壮族自治区、西藏自治区、宁夏回族自治区、新疆维吾尔自治区。
4个直辖市分别为:北京市、天津市、上海市、重庆市。
2个特别行政区分别为:香港特别行政区、澳门特别行政区。

根据如上内容,可以使用python的split功能得到各个列表

# 省
province = '河北省、山西省、辽宁省、吉林省、黑龙江省、江苏省、浙江省、安徽省、福建省、江西省、山东省、河南省、湖北省、湖南省、广东省、海南省、四川省、贵州省、云南省、陕西省、甘肃省、青海省、台湾省'
# 自治区
auto_region = '内蒙古自治区、广西壮族自治区、西藏自治区、宁夏回族自治区、新疆维吾尔自治区'
# 直辖市
muni_city = '北京市、天津市、上海市、重庆市'
# 特别行政
spec_region = '澳门特别行政区、香港特别行政区'

province = province.split('、')
auto_region = auto_region.split('、')
muni_city = muni_city.split('、')
spec_region = spec_region.split('、')

2.2 使用request调用API

代码如下

# 访问链接
import requests
response = requests.get('https://restapi.amap.com/v3/config/district?key=你的KEY&keywords=河北省&subdistrict=2&extensions=base')

# 解析json文件
import json  
json_dic = json.loads(response.text)

2.3 解析json

经过分析json文件,可以发现 省,自治区,特别行政区的格式都类似,第二级目录直接到市。而 直辖市的格式需要在第三级目录下直接到市。示例代码如下

关于省的分析

# 经度简写lng,竖着
# 纬度简写lat,横着

# 中国 经纬度范围
# 黑龙江 北纬53°31′到 曾母暗沙 北纬4°15′
# 新疆   东经73°    到 黑龙江   东经135°

## 省
# 省名和省的中心坐标
pro_name = json_dic['districts'][0]['name']
pro_center = json_dic['districts'][0]['center']

print(pro_name,pro_center)

# 省下面的市
for each_pro in json_dic['districts'][0]['districts']:
    print(each_pro['name'],each_pro['center'])

关于市的分析

response = requests.get('https://restapi.amap.com/v3/config/district?key=你的KEY&keywords=北京市&subdistrict=2&extensions=base')
json_dic = json.loads(response.text)

## 市的分析
# 市名和市的中心坐标
pro_name = json_dic['districts'][0]['name']
pro_center = json_dic['districts'][0]['center']

print(pro_name,pro_center)

# 市下面的区
for each_pro in json_dic['districts'][0]['districts'][0]['districts']:
    print(each_pro['name'],each_pro['center'])

最终获取自己需要的就好了。

3. 全部保存的代码

3.1 访问API的函数

首先定义一个获取url内容的函数,使用while循环不断获取内容,直到得到返回值

# 访问链接
import requests

# 解析json文件
import json  

def get_json(url):
    json_dic = None
    # 一直发消息,直到不循环
    while json_dic == None:
        response = requests.get(url)
        json_dic = json.loads(response.text)
    
    return json_dic

3.2 初始化要遍历的区域和存储他们的字典、列表

# 省
province = '河北省、山西省、辽宁省、吉林省、黑龙江省、江苏省、浙江省、安徽省、福建省、江西省、山东省、河南省、湖北省、湖南省、广东省、海南省、四川省、贵州省、云南省、陕西省、甘肃省、青海省、台湾省'
# 自治区
auto_region = '内蒙古自治区、广西壮族自治区、西藏自治区、宁夏回族自治区、新疆维吾尔自治区'
# 直辖市
muni_city = '北京市、天津市、上海市、重庆市'
# 特别行政区
spec_region = '澳门特别行政区、香港特别行政区'

province = province.split('、')
auto_region = auto_region.split('、')
muni_city = muni_city.split('、')
spec_region = spec_region.split('、')

from itertools import chain

# 所有地区的列表
all_region_list = [province,auto_region,muni_city,spec_region]
all_region_list = list(chain(*all_region_list))

# 大地方经纬度的字典
big_region_dic = {}
# 小地方经纬度的字典
small_region_dic = {}
# 大地方到小地方关系的字典
big_small_relationship = {}

3.3 获取全部区域经纬度的信息


# 经度简写lng,竖着
# 纬度简写lat,横着

# 中国 经纬度范围
# 黑龙江 北纬53°31′到 曾母暗沙 北纬4°15′
# 新疆   东经73°    到 黑龙江   东经135°



for pro in all_region_list:
    
    url = 'https://restapi.amap.com/v3/config/district?key=你的KEY&keywords={}&subdistrict=2&extensions=base'.format(pro)
    json_dic = get_json(url)
    
    # 名大地方的 名字 和 中心坐标
    pro_name = json_dic['districts'][0]['name']
    pro_center = json_dic['districts'][0]['center'].split(',')
    lng,lat = float(pro_center[0]),float(pro_center[1])


    # 大地方的地理坐标
    big_region_dic[pro_name] = {
             'lng':lng,
            'lat':lat
        }
    
    # 获得了哪个省的信息
    print(pro_name,pro_center)
    each_small_region = []
    
    # 省、自治区、特别行政区 或者 直辖市
    try:
        districts = json_dic['districts'][0]['districts']
    except:
        districts = json_dic['districts'][0]['districts'][0]['districts']
        
    
    # 小区域
    for each_pro in districts:
        # 得到名字
        name = each_pro['name']
        # 得到中心点坐标
        center = each_pro['center'].split(',')
        lng,lat = float(center[0]),float(center[1])

        # 保存小地方的地理坐标
        small_region_dic[name] = {
            'lng':lng,
            'lat':lat
        }
        
        # 保存到小地方的字典里
        each_small_region.append(name)

    # 关系也保存到大字典里
    big_small_relationship[pro_name] = each_small_region
    

3.4 结果展示

大区域的字典

在这里插入图片描述

小区域的字典

在这里插入图片描述

大小区域的关系表示

在这里插入图片描述

3.5 保存成pickle文件

import pickle

#保存
with open('region.pickle', 'wb') as fp:
    pickle.dump((big_region_dic,small_region_dic,big_small_relationship), fp)
    
# 读取
with open('region.pickle', 'rb') as fp:
    big_region_dic,small_region_dic,big_small_relationship = pickle.load(fp)
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
获取高德地图行政区划数据,可以使用高德地图开放平台提供的Web API。以下是一个简单的示例代码,演示如何使用高德地图API获取行政区划数据: ```javascript // 替换为你自己的高德开放平台密钥 var key = 'your_amap_api_key'; // 行政区划查询函数 function searchDistrict(keyword) { var url = 'https://restapi.amap.com/v3/config/district?keywords=' + keyword + '&key=' + key; fetch(url) .then(response => response.json()) .then(data => { if (data.status === '1' && data.districts.length > 0) { var district = data.districts[0]; console.log('行政区划名称:', district.name); console.log('行政区划编码:', district.adcode); console.log('所属城市编码:', district.citycode); console.log('行政区划级别:', district.level); console.log('边界坐标集合:', district.polyline); } else { console.log('未找到匹配的行政区划'); } }) .catch(error => { console.error('获取行政区划数据时发生错误:', error); }); } // 调用示例:查询广东省的行政区划 searchDistrict('广东省'); ``` 在上述示例中,你需要将 `your_amap_api_key` 替换为你自己的高德开放平台密钥。然后,调用 `searchDistrict` 函数并传入你要查询的行政区划关键词,比如 `'广东省'`。API 将返回一个 JSON 对象,你可以从中提取所需的行政区划信息。 请注意,使用高德地图API需要注册并获取密钥,同时需要遵守高德地图开放平台的使用条款和限制。详细的文档和说明可以在高德地图开放平台的官方网站上找到。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值