全部版块 我的主页
论坛 经济学论坛 三区 宏观经济学
1218 0
2022-01-17
1:100万的基础地理信息数据集处理方法[color=rgba(0, 0, 0, 0.3)]原创 [color=rgba(0, 0, 0, 0.3)]锐多宝 [url=]锐多宝的地理空间[/url]
[url=]Part1背景

官方发布了1:100万公众版基础地理信息数据集,但这个数据是分幅的,还需要做一下合并。

Part2处理流程

主要是使用python进行数据的预处理与合并。

Part3gdb转shp矢量

使用QGIS的OSGeo4W Shell软件,可以将gdb数据库导出为shp矢量。

ogr2ogr -f "ESRI Shapefile" F:\keshan\shp_get\I51 F:\keshan\shp100w\I51.gdb -lco ENCODING=UTF-8,

格式为:ogr2ogr -f +格式名称+保存路径+原始文件路径+编码方式

import os
from tqdm import tqdm

Path = 'F:\keshan\shp100w/'  
folder_names = os.listdir(Path)
#脚本:参考ogr2ogr -f "ESRI Shapefile" F:\keshan\shp_get\2 F:\keshan\shp100w\A49.gdb -lco ENCODING=UTF-8
bat_part1="ogr2ogr -f \"ESRI Shapefile\" F:\keshan\shp_get\\"
bat_part2=" F:\keshan\shp100w\\"
bat_part3=" -lco ENCODING=UTF-8"
# 循环目录
for folder_name in tqdm(folder_names):
    bat_text=bat_part1+folder_name.replace(".gdb","")+bat_part2+folder_name+bat_part3
    print(bat_text)

通过上述脚本,批量生成导出shp的.bat内容。把这个内容打包成为.bat文件,输入start+.bat路径,运行文件

运行结果如下:

打开每一个文件,是分幅的矢量:

Part4shp矢量合并

使用脚本,遍历文件夹,将所有相同名称的矢量文件移动到相同文件内:

import os
import shutil
from tqdm import tqdm

#创建各地文件夹函数
def mkdir(path):
    # 引入模块
    # 去除首位空格
    path = path.strip()
    # 去除尾部 \ 符号
    path = path.rstrip("\\")

    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists(path)

    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)

        print(path + ' 创建成功')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print(path + ' 目录已存在')
        return False

Path = 'F:\keshan\shp_get/'
#保存的分类shp文件位置
Save_Fenlei= 'F:\keshan\shp_100w_fenlei/'

folder_names = os.listdir(Path)
# 循环目录
for folder_name in tqdm(folder_names):
    floder_PATH = os.path.join(Path, folder_name)
    file_names = os.listdir(floder_PATH)
    for file_names in file_names:
        #获取文件路径与名称
        file_path =os.path.join(floder_PATH, file_names)
        file_name=file_names.split(".")[0]
        file_suffix = file_names.split(".")[1]
        #移动文件到指定目录 将名称为file的文件复制到名为file_dir的文件夹中
        dir_path = Save_Fenlei +file_name
        # 创建文件夹 保存单个文件的文件夹
        mkdir(dir_path)
        #修改文件名
        file_new_name = file_name.split(".")[0]+"_"+folder_name+"."+file_suffix
        dst_name=os.path.join(dir_path, file_new_name)
        # 将指定的文件file移动到file_dir的文件夹里面
        shutil.copy(file_path, dst_name)

到此,我们获得了每个类别的shp矢量,加载到gis软件中进行查看。

现在要进行矢量的合并,首先我想到了arcgis和qgis手动操作。但是我比较懒,不喜欢重复操作,所以我写了一个脚本对每一个类别进行合并:

import os
import geopandas as gpd
import pandas as pd
from tqdm import tqdm

#分类得到的shp
Path = 'F:\keshan\shp_100w_fenlei/'
# 保存的合并文件位置
Save_shp = r'F:\keshan\100Wmerge\shp/'
Save_geojson = r'F:\keshan\100Wmerge\geojson/'

folder_names = os.listdir(Path)
# 循环目录
for folder_name in tqdm(folder_names):
    try:

        folder_name_path=os.path.join(Path, folder_name)

        file = os.listdir(folder_name_path)
     #遍历shp文件进行合并
        path = [os.path.join(folder_name_path, i) for i in file if ".shp" in i]
        gdf = gpd.GeoDataFrame(pd.concat([gpd.read_file(i) for i in path],
                                ignore_index=True), crs=gpd.read_file(path[0]).crs)
    #导出shp
        gdf_path_name_shp =Save_shp+folder_name+".shp"
        gdf.to_file(gdf_path_name_shp, driver="ESRI Shapefile", encoding="utf-8")

       #导出geojson
        gdf_path_name_json =Save_geojson+folder_name+".gson"
        gdf.to_file(gdf_path_name_json, driver='GeoJSON', encoding="utf-8")
   
    except:
        pass


通过这个步骤,ANNP这个全国矢量就merge好了,放到gis软件中查看:

由此,我们得到了shp和geojson两种格式的1:100w的全国地理基础信息数据:

这里为什么会单独再导出一个geojson的文件,是因为我自己的偏见:gson比shp好用,qgis比arcgis好使。

Part5其他

至此,数据已经转化完毕,可以直接使用。该数据的类型如下:

数据很丰富,可以看看:


我在遥感论坛上看到有一个人发帖,大家可以去下载这个合并版的数据:


注意:提供下载的是矢量数据,不是最终地图,与符号化后的地图再可视化表达上存在一定差异。用户利用此数据编制地图,应当严格执行《地图管理条例》有关规定;编制的地图如需向社会公开的,还应当依法履行地图审核程序。Part6参考

全国地理信息资源目录服务系统.https://www.webmap.cn/main.do?method=index

Geodata地理数据研究所.2021版全国1:100万公众版基础地理信息数据

[/url]


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群