获取全国各级城市坐标

1. 前言

做项目时经常用到全国各个城市的坐标信息,网上很多都是收费的,而且不全,感谢博文《全国地级市坐标、名称、编码获取 / 全球城市坐标位置》提供了全国各个城市坐标的获取方法,在此基础上补充一些说明及文件。

代码保证可用性。

本文代码运行结果为:《下载-gitee-全国各级行政区经纬度坐标(精确到县级).json》。

2. 代码

2.1 获取34个省级行政区邮政编码及对应省会坐标

import datetime,time,json,requests

def get_provinces_info():
    """
    获取省份邮政编码(adcode)和省会坐标
    """
    data = requests.get('https://geo.datav.aliyun.com/areas/bound/100000_full.json')
    data=data.json()
    provinces=[]
    for item in data['features']:
        # print(item)
        if item['properties']['name']:
            province_item = {
                "name":item['properties']['name'],
                "adcode":item['properties']['adcode'],
                "geo":item['properties']['center']
            }
            # print(province_item)
            provinces.append(province_item)
    return provinces
provinces = get_provinces_info()

2.2 给provinces 添加省内城市信息

def add_cities_to_provinces(provinces):
    for item in tqdm(provinces):
        item['city']=[]
        data = requests.get('https://geo.datav.aliyun.com/areas/bound/%s_full.json'%item['adcode'])
        data = data.json()
        for city in data['features']:
            if city['properties']['name']:
                city_item = {
                    "name": city['properties']['name'],
                    "adcode": city['properties']['adcode'],
                    "geo": city['properties']['center']
                }
                # print(city_item)
                item['city'].append(city_item)
    return provinces
provinces = add_cities_to_provinces(provinces)

2.3 给provinces的城市添加县级行政区信息

def add_counties_to_provinces(provinces):
    for province in tqdm(provinces):
        for city in province['city']:
            city['district']=[]
            data = requests.get('https://geo.datav.aliyun.com/areas/bound/%s_full.json'%city['adcode'])
            if data.status_code==200:
                data = data.json()
                if data:
                    for district in data['features']:
                        if district['properties']['name']:
                            district_item={
                                "name": district['properties']['name'],
                                "adcode": district['properties']['adcode'],
                                "geo": district['properties']['center']
                            }
                            # print(district_item)
                            city['district'].append(district_item)
    return provinces
provinces = add_counties_to_provinces(provinces)

2.4 解析出各级行政区的经纬度并保存

# 解析各级行政区经纬度
all_address={}
for province in tqdm(provinces):
    all_address[province['name']]=province['geo']
    for city in province['city']:
        all_address[city['name']]=city['geo']
        for district in city['district']:
            all_address[district['name']]=district['geo']

# 保存
import json
with open("cities_coordinate.json", "w") as f:
    json.dump(all_address, f)

【完】

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值