全国基础地理数据库数据预处理

数据来源:全国地理信息资源目录服务系统 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函数按照指定要素字段进行数据融合等。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值