递归获取省市区的边界信息文件,用于echarts的map地图

发布时间 2023-06-05 15:41:24作者: xiaochuchun

数据来源为阿里云,单个省市区信息可直接在这里面下载:http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=30.332329214580188&lng=106.72278672066881&zoom=3.5

由于需求需要点击省份里面的城市就展示新的城市的地图,所以需要把所有省市区的边界信息json全部下载下来。阿里云提供的地址我司域名获取时可能会出现跨域情况,所以直接获取下来放公司的存储服务器;

 

python脚本获取(直接exe获取可联系作者获取):

import requests
import json
import os

url = 'https://geo.datav.aliyun.com/areas_v3/bound/geojson?code='
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" }


# 递归获取数据
def deepGet(code=430000,num=1,level=3):
    params = str(code)
    level = int(level)
    print('正在获取{}的信息'.format(params))
    if(num<level):
        params += '_full'
    url1 = url + params
    response = requests.get(url1, headers = headers)
    data = json.loads(response.text)
    to_src = './address'
    if not os.path.exists(to_src):
        os.mkdir(to_src)
    with open('{}/{}.json'.format(to_src,params),'w',encoding="utf-8") as file:
        file.write(response.text)
    if(num<level):
        ls = data.get('features')
        for i in range(0,len(ls)):
            item = ls[i]
            code = item.get('properties').get('adcode')
            deepGet(code,num+1)


if __name__ == '__main__':
    input('默认获取子区域(除街道级),如不想获取子区域,则可直接输入:1 430000,回车确认;')
    level = input('请输入你想获取的级别(4-国,3-省,2-市,1-区):')
    code = input('请输入根地区的编码(例-湖南:430000):')
    deepGet(code,1,level)