當前位置:
首頁 >
省市区三级行政区数据获取和GeoJson地图下载
發布時間:2023/12/14
42
豆豆
生活随笔
收集整理的這篇文章主要介紹了
省市区三级行政区数据获取和GeoJson地图下载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.背景
- 2.行政區域數據獲取
- 3.獲取GeoJson數據
1.背景
項目中用到省市區三級的行政區劃的選擇,在網上找到的數據與最新的行政區域劃分不一致,也難以確認數據的完成性。
基于echarts完成數據地區分布圖時,需要提供地區對應的geoJson格式地圖。
2.行政區域數據獲取
高德開放平臺提供了豐富數據API,其中行政區域信息可通過以下接口:
https://restapi.amap.com/v3/config/district?keywords=中國&subdistrict=3&key=5b138cc729f37d29702ff904ca9cedeb
接口獲取的數據是按照行政等級多層嵌套,為了方便后續操作,將數據轉化為了List。
以下代碼將行政區劃轉化為List并添加了id和parent_id,同時保存為json數組(area_dict.json)和MySQL數據庫腳本(area_dict.sql)。
3.獲取GeoJson數據
數據來源:基于阿里云datav,數據文件以地區編碼命名。
根據行政區域數據中保存的area_dict.json自動下載對應GeoJson文件。
行政區劃的更新,兩個平臺的數據可能存在差異,即同一地區有著不同的地區編碼,導致對應地區的地圖無法下載。代碼中errorCodes記錄了未成功下載的地區編碼。2020.07.01,未下載成功的不到30條。
#-*-coding:UTF-8-*- """ Author: Gray Snail Date: 2020-06-30GeoJson地圖數據下載 基于阿里云datav http://datav.aliyun.com/tools/atlas """ import requests import json import osdef loadDistrict(filename):# {"citycode":"0379","adcode":"410300","name":"洛陽市","center":"112.434468,34.663041","level":"city"}data = []with open(filename, 'r', encoding='utf-8') as fp:data = json.load(fp)return datadef saveGeoJson(areaCode, force=False):saveName = 'geo/{0}.json'.format(areaCode)if not force and os.path.isfile(saveName):return None baseUrl = 'https://geo.datav.aliyun.com/areas_v2/bound/{0}_full.json'baseUrl2 = 'https://geo.datav.aliyun.com/areas_v2/bound/{0}.json'if areaCode[-2:] == '00':url = baseUrl.format(areaCode)else:url = baseUrl2.format(areaCode)print(url)response = requests.get(url)if response.ok and response.status_code == 200:res_json = response.json()with open(saveName, 'w', encoding='utf-8') as fp:json.dump(res_json, fp, ensure_ascii=False)else:return areaCodeif __name__ == "__main__":districts = loadDistrict('area_dict.json')errorCodes = []for district in districts:code = saveGeoJson(district['adcode'])if not code is None:errorCodes.append(code)print(errorCodes)總結
以上是生活随笔為你收集整理的省市区三级行政区数据获取和GeoJson地图下载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matplotlib数据可视化高级
- 下一篇: java第一阶段(day01)