合并Shapefile文件

ARCGIS 几种SHP融合、拼接等方法 输入要素类的属性值将被复制到输出要素类。但是,如果输入是一个或多个通过创建要素图层工具创建的图层并且选中了字段的使用比率策略设置项,那么计算输出属性值时将按输入属性值的一定比例进行计算。如果启用了使用比率策略选项,执行叠加操作时,对于任一要素的分割都将按照输入要素属性值的一定比率来生成输出要素的属性值。例如,如果输入几何被分割成相等的两部分,则每个新要素的属性值都等于输入要素属性值的一半。与其他输入要素不相交的所有输入要素(或输入要素的任何部分)的 FID_ 值均为 -1。所有输入数据集的类型必须相同。 阅读详情
AI摘要

本文介绍了如何使用Python的GDAL/OGR库合并多个Shapefile文件,包括读取、处理地理要素和属性数据,以及注意事项如字段匹配、坐标系统转换和性能优化。

在地理信息系统中,Shapefile(.shp)是一种非常常见的矢量数据格式,用于存储地理要素的空间信息和属性数据。在处理大量Shapefile时,有时需要将多个文件合并成一个,以便于统一管理和分析。本文将介绍如何使用Python的GDAL/OGR库实现多个Shapefile文件的合并操作,并讨论其中的一些技术细节和注意事项。

背景介绍

GDAL/OGR是一个开源的地理数据转换库,提供了丰富的地理数据读写和处理功能。在Python中,我们可以通过osgeo模块来使用GDAL/OGR库。GDAL主要用于栅格数据的处理,而OGR则专注于矢量数据的处理。通过OGR,我们可以方便地读取、创建和修改Shapefile文件。

代码逻辑合并多个Shapefile

为了合并多个Shapefile文件,我们首先需要获取这些文件的路径列表,然后逐个读取文件并提取其中的地理要素和属性数据。最后,将这些数据写入一个新的Shapefile文件中。

以下是一个简单的Python类MultipleShpMerge,用于实现多个Shapefile文件的合并操作:

import glob
import os
from osgeo import gdal
from osgeo import ogr, osr


# Open the counties dataset

# 多个shp文件合并成一个shp文件 ,存在两个面
class MultipleShpMerge(object):
   # MultipleShpMerge 类的初始化
   def __init__(self, shp_path, saveshp_path=None):

       self.shp_path = shp_path
       self.shp_list = glob.glob(self.shp_path)
       if saveshp_path:
           self.saveshp_path = saveshp_path
       else:
           self.saveshp_path = shp_path
       if not os.path.exists(self.saveshp_path):
           os.makedirs(self.saveshp_path)
       self.outshpfile = self.saveshp_path +'\\'+r"_merge.shp"
       self.shp_list.sort()
       self.shp_merge()
   # 要素合并到一个shp文件中
   def shp_merge(self):
       filePath_list = glob.glob(self.shp_path + r"\\*.shp")
       # 创建空的shp文件路径

       self.CreateShp()
       for i in range(len(filePath_list)):
           ds = ogr.Open(filePath_list[i], True)
           Layer = ds.GetLayer(0)
           Count = Layer.GetFeatureCount()
           # split()方法根据字符"\\"分割字符串,返回包含各个分割要素的List列表,[-1]表示取List列表中最后一个元素
           ParkName = filePath_list[i].split("\\")[-1].split(".")[0]
           for j in range(Count):
               feature = Layer.GetFeature(j)
               geom = feature.GetGeometryRef()
               self.GeometryMerge(geom, ParkName)
           ds.Destroy()
       print("over")
   def GeometryMerge(self, geom, parkname):
       # 解决shp字段写入中文出现字符乱码问题
       gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
       gdal.SetConfigOption("SHAPE_ENCODING", "GBK")

       ds = ogr.Open(self.outshpfile, True)
       Layer = ds.GetLayer(0)
       feature = ogr.Feature(Layer.GetLayerDefn())
       feature.SetGeometry(geom)
       feature.SetField('name', parkname)
       Layer.CreateFeature(feature)  # 创建几何要素,并写入图层
       ds.Destroy()

   # 创建空的Shp文件
   def CreateShp(self):
       driver = ogr.GetDriverByName("ESRI Shapefile")
       ds = driver.CreateDataSource(self.outshpfile)
       spatialref = osr.SpatialReference()
       spatialref.ImportFromEPSG(4326)
       geomtype = ogr.wkbPolygon
       # 创建矢量面图层
       layer = ds.CreateLayer(self.outshpfile[:-4], srs=spatialref, geom_type=geomtype)
       # 添加属性字段name,字符型
       layer.CreateField(ogr.FieldDefn('name', ogr.OFTString))
       ds.Destroy()

在这个类中,我们首先通过glob模块获取指定目录下的所有Shapefile文件路径。然后,我们创建一个空的Shapefile文件作为输出文件。接下来,我们遍历每个输入文件,读取其中的地理要素和属性数据,并将它们写入输出文件。

在合并过程中,我们需要注意以下几点:

  1. 字段匹配:如果输入文件的字段不一致,我们需要决定如何处理。例如,我们可以选择只保留共有的字段,或者添加缺失的字段并为其赋默认值。

  2. 坐标系统:合并Shapefile时,需要确保所有输入文件具有相同的坐标系统。如果坐标系统不一致,我们需要在合并之前进行坐标转换。

  3. 性能优化:当处理大量数据时,合并操作可能会非常耗时。我们可以通过多线程、分块读取等方式来优化性能。

  4. 错误处理:在读取和写入Shapefile时,可能会遇到各种错误,如文件不存在、格式错误等。我们需要添加适当的错误处理逻辑,以确保程序的健壮性。

测试

现在有两个矢量文件,一个是朝鲜的面矢量,一个是韩国的面矢量,我们对它们进行合并测试。

在arcgis打开它们,如下所示:

图片

在arcgis打开合并后的结果,如下:

图片

结论

通过Python的GDAL/OGR库,我们可以方便地实现多个Shapefile文件的合并操作。在实际应用中,我们需要根据具体需求和数据特点来选择合适的合并策略,并注意处理可能出现的各种问题。希望本文能对大家在使用GDAL/OGR处理Shapefile时提供一些参考和帮助。

代码和测试数据下载地址:

链接:https://pan.baidu.com/s/1MfRI4GRBPs6dAYlG-tAibQ?pwd=rsrs

提取码:rsrs

ArcGIS应用(二十四)合并多个shapefile文件的几种方法 我们手头有很多个单独的shapefile文件,我们需要将这些文件合并为一个shapefile文件以便于操作和管理。Arcgis软件实现这一目标有一些不同的工具和方法。 阅读详情

相关推荐

【ArcGIS技巧】批量合并不同文件目录同名SHP文件

"SHP文件总是会经历各种裁剪与合并,之前分享过裁剪GDB,用模型构建器。本期在此基础上分享一个合并同名称SHP的方法,涉及到一点点编程知识,如果不会编程,不追求代码含义,可直接引用复制代码。

weixin_47364423的博客 5955

ArcGIS-将多个shp文件合并到一起

在输入的时候一定要在下面“显示类型”选择“要素类”,然后输出的时候文件名不要包含奇奇怪怪的字符,都是文字就行,不然会报错!我在这跌了10几个跟头!一度怀疑“物理学不存在了”然后就可以得到一整个shp了,值得注意的是:参与合成的shp文件需要字段的名称、排列顺序和字段的属性要相同,否则也是无法合并成功的。在ArcGIS工具箱中选择“数据管理工具”→“常规”→“合并”工具。

qq_46026699的博客 2万+

ArcGIS实战技巧:高效合并shapefile文件的五大策略

本文详细解析了在ArcGIS中高效合并shapefile文件的五大核心策略,包括使用‘追加’、‘合并’、‘联合’工具、编辑器手动操作以及ArcPy脚本自动化。针对不同数据结构和应用场景,提供了从基础操作到高级字段控制、再到批量处理的完整解决方案,旨在帮助用户提升地理空间数据管理效率,规避常见错误,实现精准、高效的shapefile合并。

alpha的博客 282

【ArcGIS Pro二次开发】(33):合并文件夹下的所有shp文件

在工作中,即使很不喜欢用shp文件,但还是经常会收到shp格式的文件。关于shp文件的吐糟就不多说了,除了文件小、字段名长度限制,不能储存弧线段等问题,还有一种处理方式也让人很是难受。如上图,有些shp文件是分散在不同的文件夹里的,虽然方便了文件的分散传送,但没法像数据库一样统计管理,用起来很不方便。这个工具的目的就是处理这一类型的文件,将分散的shp文件合并成一个数据库要素,并且保留文件名,转换成一个标记字段的字段值。

规划GIS会 9109

ArcGIS实战技巧:高效合并多个shapefile文件的五大方案

本文详细解析了在ArcGIS中高效合并多个shapefile文件的五大实用方案。针对数据管理中的‘数据孤岛’问题,文章对比了Append、Merge、Union、Editor编辑以及ArcPy编程五种方法的核心逻辑、操作步骤与适用场景,并提供了横向对比决策指南,帮助用户根据数据量、字段结构及自动化需求选择最佳合并策略,实现空间数据的标准化与一体化管理。

weixin_28314575的博客 249

ArcGIS新手必看:5种合并shapefile文件的方法全解析(附详细操作截图)

本文详细解析了ArcGIS中合并shapefile文件的5种实用方法,包括Append与Merge工具对比、Union的字段管理、Editor工具的风险及Python脚本批处理。通过操作截图和实战案例,帮助新手快速掌握数据整合技巧,提升GIS数据处理效率。

weixin_30752699的博客 355

FME实现批量合并shapefile文件数据,并提取原文件名,输出到属性表字段中的解决方法

介绍如何使用FME软件来实现对多个shapefile数据进行批量合并,同时提取原文件名并存储到合并后shapefile数据属性表字段中的方法,为大家解决此类问题提供思路。

GIS数据批量处理、质检工具开发 2672

ArcGIS:如何对Shapefile文件进行符号系统修改、标注、合并、分割、拓扑编辑等?

将 editmap1.shp 和 editmap2.shp 的符号系统选择为预定义的 样式“Hollow”(空心),将 editmap1.shp 的边界轮廓颜色设置黑色,将 editmap2.shp 的边界轮廓颜色设置红色。按实验要求,我们要对 73 号多边形进行编辑,使其与红色线保持一致。放大图层至 71 号包括在视窗中,选中 71 号多边形,点击“剪切面工具”,点击左键,开始绘制分割线,未端 双击左键或点击“要素构造工具”中的“完成草图工具”,此时已完 成了线对面的切割,属性表变成了两行记录。

炒茄子的博客 5225

【ArcGIS Pro二次开发】自动化合并Shapefile文件:提升GIS数据管理效率

【ArcGIS Pro二次开发】自动化合并Shapefile文件:提升GIS数据管理效率 【下载地址】ArcGISPro二次开发合并文件夹下的所有shp文件教程 【ArcGIS Pro二次开发】合并文件夹下的所有shp文件教程本资源提供了详细的指导,用于帮助开发者通过ArcGIS Pro的二次开发功能,实现将散落在多个文...

gitblog_06585的博客 861

python合并多个shp文件

在处理地理信息数据的时候,我们经常会遇到需要合并多个shp的问题。在这里我们将所有需要合并的shp放到一个文件夹中,并通过python一步将所有shp合并成一个文件。

weixin_44853840的博客 1239

MapWinGIS处理Shapefile坐标转换与文件合并的实践指南

MapWinGIS是用于地理信息系统(GIS)开发的免费工具包,它为开发者提供了广泛的地理数据操作和可视化能力。它支持多种地理数据格式,比如Shapefile,并且能够在VB等编程语言中通过SDK进行扩展使用。

weixin_35754676的博客 679

QGIS:如何快速合并多个Shapefile?

摘要   要合并两个以上Shapefile吗?是否所有的形状文件都是相同的类型,如是即可以合并,即都是“点”、“线”或“多边形”?那就开始一次性合并多个shapfile吧。 步骤 1.)将所有待合并文件放在一个文件夹中,这样能更加方便。 2.)打开QGIS桌面,从菜单中选择以下选项: 矢量->数据管理工具->合并形状文件到一个,这将打开新窗口“合并形状文件”...

专注GIS软件开发。 1万+

python合并多个shp矢量文件

python批量合并多个shp矢量文件

合并Shapefile文件避坑指南:坐标系、字段对齐与批量处理实战

在GIS数据处理中,矢量数据合并是常见需求,而Shapefile作为经典格式,其多文件结构和格式限制常导致合并失败。理解坐标系一致性、字段结构对齐和编码统一等原理,是确保数据完整性的技术基础。这些处理步骤直接决定了合并结果的可用性,广泛应用于城市规划、环境监测和基础设施管理等场景。掌握合并Shapefile文件的正确流程,能有效避免位置错乱、属性丢失和乱码问题,提升数据整理效率。

weixin_29044157的博客 265

告别Keil,在Windows上用VSCode + arm-none-eabi-gcc + Makefile搭建国产MCU开发环境(附JLink配置避坑)

本文详细介绍了如何在Windows上使用VSCode、arm-none-eabi-gcc和Makefile搭建国产MCU开发环境,替代传统的Keil和IAR。内容涵盖工具链配置、工程结构设计、Makefile编写、VSCode集成调试以及高效开发工作流,特别针对国产MCU如复旦微FM33系列提供了优化方案和避坑指南。

weixin_28729205的博客 431

UFS逻辑单元管理

介绍UFS 逻辑单元管理和配置

m0_51720747的博客 1943

arcgis10之将多个shp文件合并成一个shp文件

第一步 第二步

xuxu96 6万+

【杰理AC696X】ADKEY复用指示灯不定时出现灯不亮或按键失灵的问题

测试SDK版本:《ac696n_soundbox_sdk_v1.5.0-20211217》ADKEY复用指示灯的做法多用于蓝牙小音箱,IC引脚越来越少,复用也就用的越多了,不过,在使用前应评估好功能,因为复用的做法,肯定会牺牲点东西的,如果体验感啥的。 比如这个图,(V-)按键按下时,LED是会一直导通发光的,按不同阻值的按键还有亮度不一致的问题,这样的问题有的客户是不接受的,这就要另寻他法了。某天调好案子,放在一边测试时,发现指示灯不亮了,按键也不起作用,想起之前AC692系列也有类似的问题,很快就定位到

xx842678的博客 1653

遥感&GIS:合并两个矢量shp文件

合并两个矢量shp文件

Mr_K_night的博客 1009

Arduino蜂鸣器播放《Astronomia》:从乐谱到代码的嵌入式音乐实现

在嵌入式系统开发中,通过编程控制硬件执行特定任务是核心基础。其原理在于利用微控制器生成精确的时序和频率信号,驱动执行器(如蜂鸣器、电机)完成预定动作。这项技术的价值在于实现了软件逻辑与物理世界的直接交互,是物联网设备、智能硬件开发的基石。常见的应用场景包括电子玩具的音效生成、报警器设计以及交互式艺术装置。本文以热门歌曲《Astronomia》的播放为例,具体展示了如何运用Arduino的`tone()`函数和数组数据结构,将抽象的乐谱转化为可执行的频率与延时控制代码,完整呈现了从**核心硬件解析**到**软

weixin_29796279的博客 347

实战分享:如何用Dify和MaxKb实现文档智能切分与高效检索(附代码解析)

本文详细介绍了如何结合Dify和MaxKB构建文档智能切分与高效检索系统。针对传统全文检索的不足,提出了结构感知的文档切分方案,通过解析文档层级关系并构建标题链,实现了精准的章节级检索。文章包含完整的代码实现,涵盖文档解析、智能切分、向量化策略及双索引优化,并分享了性能调优和生产环境实践经验。

qsc90123456的博客 543

C#合并shp(xml读写)

窗体设计 Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace ReadShpStepByStep { static class Program { /// <summary&g...

圣三一 258

基于DPABI和SPM12的任务态fMRI分析笔记1——预处理

前言 原理简介 预处理

Sophia2023的博客 1万+

C#合并shp(有进度条单线程)

窗体设计 Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace ReadShpStepByStep { static class Program { /// <summary&gt...

圣三一 162

告别定位不准!Inner-IoU助力YOLOv11边界框回归精度飙升

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv11 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

FJN110的博客 188

微信小程序 - 最新获取用户昵称 / 头像(wx.getUserProfile 接口被废弃后的代替方案)详细教程,2022 年之后的所有微信小程序,获取用户信息最新详细教程,附带示例源代码

微信小程序wx.getUserProfile接口废了用什么代替,微信小程序wx.getUserProfile不能用了怎么办,wx.getUserProfile失效有什么替代方案吗,微信新规定头像昵称填写最新教程,目前微信小程序最新获取用户头像昵称教程,微信小程序用户头像昵称获取规则调整公告,2022改版后的微信小程序如何获取用户头像和昵称信息,微信小程序官方废弃getUserProfile后如何实现获取用户信息,微信小程序wx.getUserProfile接口返回了默认头像昵称,微信小程序获取用户信息不

🏆 前端领域优质创作者 2万+
上一篇: 不借助numpy读取tif文件
下一篇: google earth engine:像素坐标和地理坐标的互相转换的技术谈论
小白说遥感
博客等级 码龄10年 2033粉丝 42原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值