数据来源:全国地理信息资源目录服务系统 https://www.webmap.cn


前言

如果需要获取国家标准的政区数据,个人推荐可以使用全国地理信息资源目录服务系统进行搜索及下载。同时,由于该网站的资源为分幅压缩的地理空间数据库文件,如果要进行大范围研究就显得不太方便。故本文将以网站公布的比例尺为1:100万的全国基础地理数据库为例,使用Python将数据进行解压、分类、合并等预处理,以帮助大家更方便地使用该数据。

数据来源:全国地理信息资源目录服务系统
https://www.webmap.cn


提示:以下是本篇文章正文内容,下面案例可供参考

1 解压数据

下载到的全国基础地理数据库为 zip 压缩包,如果数据文件较多,推荐使用 Python 的 zipfile 第三方模块进行批量解压,示例代码如下所示:


import os
import zipfile

for zip_file in os.listdir("../Material/2017版全国基础地理数据库压缩数据包"):
    with zipfile.ZipFile(f"../Material/2017版全国基础地理数据库压缩数据包/{zip_file}", "r") as zip_obj:
        # extractall:解压全部文件
        zip_obj.extractall("../Material/2017版全国基础地理数据库")
        print(f"{zip_file}  解压成功!")

2 数据分类汇总

在网站中下载得到的全国基础地理数据库为分幅保存的,而这一步骤就是将所有数据库中的要素类提取出来,并按照数据要素图层类别进行重新分类。

源数据库中所有要素类均以要素对应代码命名,为便于我们使用,我们还需要知道代码对应的图层类型。经过查阅官网文档,可知其对应情况如下:

数据分层 数据编号
水系(面) HYDA
水系(线) HYDL
水系(点) HYDP
居民地(面)) RESA
居民地(点) RESP
铁路 LRRL
公路 LRDL
行政境界(面) BOUA
行政境界(线) BOUL
行政境界(点) BOUP
居民地地名(点) AGNP
自然地名(点) AANP

示例代码如下所示:

1.引入库

import os
import arcpy
import openpyxl

dict_code_name = dict()
# 成果数据组织.xlsx 为保存有图层类型及其代码的Execl表
workbook = openpyxl.load_workbook("../Material/成果数据组织.xlsx")
sheet = workbook.active
# 3, 15:Execl表中第3-14行数据为图层类型及其代码,随个人数据表的改变而改变
for i in range(3, 15):
    # B列存储图层类型,C列存储要素代码
    data_name = sheet["B" + str(i)].value
    data_code = sheet["C" + str(i)].value
    dict_code_name[data_code] = data_name

for code in dict_code_name:
    arcpy.CreateFileGDB_management("../Material/2017版全国基础地理数据库(按数据图层分类)",
                                   f"{dict_code_name[code]}.gdb")
    print(f"{dict_code_name[code]}.gdb  创建成功!")

for gdb in os.listdir("../Material/2017版全国基础地理数据库"):
    arcpy.env.workspace = f"../Material/2017版全国基础地理数据库/{gdb}"
    for feature in arcpy.ListFeatureClasses():
        inFeatures = feature
        outLocation = os.path.join("../Material/2017版全国基础地理数据库(按数据图层分类)",
                                   f"{dict_code_name[feature]}.gdb")
        outFeatureClass = gdb.split(".")[0] + "_" + feature
        arcpy.FeatureClassToFeatureClass_conversion(inFeatures, outLocation, outFeatureClass)
        print(f"{outFeatureClass}  导出成功!")

3.数据合并

重新进行分类汇总之后,每一类要素类都各自保存在了一个数据库中,而同一个数据库中,可能存在很多分幅后的数据。这一步,就是通过Merge函数,将分幅后的数据进行合并。合并后,数据库中的所有要素类都将合并为一个要素类,示例代码如下所示:):

import os
import arcpy

arcpy.CreateFileGDB_management("../Material", "2017版全国基础地理数据库(分类合并).gdb")
for gdb in os.listdir("../Material/2017版全国基础地理数据库(按数据图层分类)"):
    arcpy.env.workspace = f"../Material/2017版全国基础地理数据库(按数据图层分类)/{gdb}"
    arcpy.Merge_management(arcpy.ListFeatureClasses(),
                           f"../Material/2017版全国基础地理数据库(分类合并).gdb/{gdb.split('.')[0]}")
    print(f"{gdb.split('.')[0]}  合并完成!")

注意:在完成数据合并后,还可以对数据进行其他处理,例如使用Dissolve函数按照指定要素字段进行数据融合等。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐