空间分析-国界省界获取
国界及省市边界是日常使用较为频繁的基础数据。对于展示用途,各大图商的开发平台一般都提供API使用,如果要在本地进行数据分析,就需要通过一些途径获取这些数据。
国家基础地理信息中心
这是目前公开最为权威的数据来源,中心提供数据下载方式,关于这类数据的下载及处理方式,各大论坛均有详细描述,可参照进行处理[1]。北京大学地理信息平台下载,需要登录注册账号才能下载使用。下载地址
阿里DataV
阿里DataV提供在线边界数据接口,可以获得高德坐标系下的边界Geojson格式数据,通过坐标转换处理,可获得84坐标系下的shp文件使用。- 首先在此获取JSON API地址。
- 获取全国国界、省界数据
import requests import geopandas as gpd import json # API 获取数据 re_china = requests.get('https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json') # 保存为json文件 with open('china_100000_full.json','wb') as f: f.write(re_china.content) # 通过geopandas将geojson数据转化为shp文件存储 gdf = gpd.read_file('china_100000_full.json') gdf.to_file('china', driver='ESRI Shapefile', encoding='utf-8')
- 基于全国省界数据中的adcode,继续遍历获取市县边界数据gcj02towgs84转换方式详见
# 获取省份列表 re_json = re_china.json() features_list = re_json['features'] # 遍历省份数据保存为json 和 shp文件 for province in features_list: # 地区代码及中文名称 adcode = province['properties']['adcode'] name = province['properties']['name'] re_province = requests.get('https://geo.datav.aliyun.com/areas_v3/bound/' + str(adcode) + '_full.json') # 转化为json对象 re_province_json = re_province.json() # 通过逐点遍历进行坐标准换 i = 0 for feature in re_province_json['features']: # 市、县级别遍历 j = 0 for coordinate in feature['geometry']['coordinates']: #有些地区存在飞地,因此存在多个polygon k = 0 for point_gcj02 in coordinate[0]: # 逐点准换 point_wgs84 = gcj02towgs84(point_gcj02) coordinate[0][k] = point_wgs84 k += 1 re_province_json['features'][i]['geometry']['coordinates'][j][0] = coordinate[0] j += 1 i += 1 # 保存gcj02坐标系下的json数据 with open('china_' + name + '_full_gcj02.json', 'wb') as f: f.write(re_province.content) # 保存wgs84坐标系下的json数据 with open('china_' + name + '_full_wgs84.json', 'w') as f: f.write(json.dumps(re_province_json)) # 转换为shp 文件 gdf_province = gpd.read_file('china_' + name + '_full_wgs84.json') gdf_province.to_file('./china/' + name + '_full_wgs84.shp', driver='ESRI Shapefile', encoding='utf-8') print(name)