空间分析-国界省界获取

国界及省市边界是日常使用较为频繁的基础数据。对于展示用途,各大图商的开发平台一般都提供API使用,如果要在本地进行数据分析,就需要通过一些途径获取这些数据。

  1. 国家基础地理信息中心
    这是目前公开最为权威的数据来源,中心提供数据下载方式,关于这类数据的下载及处理方式,各大论坛均有详细描述,可参照进行处理[1]

  2. 北京大学地理信息平台下载,需要登录注册账号才能下载使用。下载地址

  3. 阿里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,继续遍历获取市县边界数据
      # 获取省份列表
      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)
      gcj02towgs84转换方式详见

Reference