精华内容
下载资源
问答
  • Python探讨多gdb文件合并方法
    千次阅读
    2017-11-20 21:40:21
    近期因要合并全国矢量数据,但由于数据是分幅存储在许多孤立的GDB数据库中的,使用时需要进行合并。因为要在合并的同时保留原始数据的所有属性值,所以用到的比较适合的工具为data management tools 下general → append。但是上百幅数据的手动合并简直是巨型工程,所以尝试在网上寻找相应代码。最终,经过半天多尝试,终于成功实现。现将代码及主要流程和注意事项记下备忘,在此感谢有关博主(见后文链接)。
    1. 因为数据组织形式和文件名均有统一的规范,所以本文在处理数据前不用再进行数据整理工作。如遇到不同数据库,且不同数据库里类似图层名称命名不一致(属性表名称要一致)的情况,则需要进行先期数据处理。方法见: 不同gdb,相同数据集合并 - esrixa - 博客园 https://www.cnblogs.com/esrichina/p/3546065.html
    2.将所有下载数据解压后存入同一文件夹下,在另一文件夹(输出合并后的数据用)中新建数据库,且导入随机数据源的数据图层,以免代码运行时提示找不到相应图层。注意在新建数据库时要让数据库的空间坐标与源数据一致。
    3.在ArcCatalog中调出Python代码执行窗口,输入相应代码。这里之所以在ArcCatalog中进行相应操作,主要是避免出现错误。详见前文链接。
    代码如下:
    import os
    import sys
    import arcpy
    arcpy.env.workspace = "E:\\China-2000\\100万"
    # list all file geodatabases in the current workspace
    workspaces = arcpy.ListWorkspaces("*","FileGDB")
    for workspace in workspaces:
        print(workspace)
        arcpy.env.workspace = workspace
        featureclasses = arcpy.ListFeatureClasses()
        for fc in featureclasses:
            print(fc)
            output = os.path.join("E:\\China-2000\\100Data.gdb",os.path.splitext(fc)[0])
    print output
    arcpy.Append_management(fc,output)
    注意格式,否则易出错。
    4.合并后的数据仍然有数据分幅时留下的切割线,可用dissolve工具根据相应字段去除。方法网上很丰富,在此不赘述。
    其他方案及本文参考链接如下,在此一并感谢相关博主。

    利用Python实现分布于各工作空间中的分幅数据合并 - CSDN博客
    http://blog.csdn.net/esrichinacd/article/details/14146653

    ArcGIS Python 获取GDB中的要素类信息 - CSDN博客
    http://blog.csdn.net/esrichinacd/article/details/8593385

    Python脚本批量合并GDB - - CSDN博客
    http://blog.csdn.net/kone0611/article/details/52083656

    Toolbox中的dissolve工具以及与排序工具的组合使用 - CSDN博客
    http://blog.csdn.net/buqutianya/article/details/8274349
    更多相关内容
  • 将一个文件夹下多个ShapeFile合并至一个GDB,适合分幅的ShapeFile数据的合并,图层没有使用插入,图层存在时使用追加模式。
  • 本GP工具可以合并一个文件夹下多个GDB文件内的多个同名要素,并将其输出到指定的GDB内。
  • 接到朋友的小需求,文件夹下有多个GDB,各个GDB下又分别有各自的要素文件。思路上的核心方法是walk = arcpy.da.Walk(workspace, datatype="FeatureClass")arcpy.da.Walk函数可便利workspace下所有的文件路径、文件名...

    接到朋友的小需求,文件夹下有多个GDB,各个GDB下又分别有各自的要素文件。

    思路上的核心方法是

    walk = arcpy.da.Walk(workspace, datatype="FeatureClass")

    arcpy.da.Walk函数可便利workspace下所有的文件路径、文件名、文件夹。

    相比os模块的walk函数不支持读取GDB,arcpy的Walk支持GDB下的要素类读取。

    1. 用walk读取所有要素类后,将所有要素类名添加到一个LIST里,将所有要素类路径+文件名添加到另一个LIST里。

    2. 在文件名的for循环下将所有同名要素类添加到一个LIST里。

    3. 使用 arcpy.Merge_management合并LIST并输出。

    4. 包装成GP工具。

    1 importarcpy2 importxlrd3 importxlwt4 importos5

    6

    7 workspace =arcpy.GetParameterAsText(0)8 out = arcpy.GetParameterAsText(1)9

    10

    11 evefeature =[] #存储所有要素要素路径+要素名12 feature_classes =[] #存储所有要素名13 walk = arcpy.da.Walk(workspace, datatype="FeatureClass")14 for dirpath, dirnames, filenames inwalk:15 for filename infilenames:16 evefeature.append(os.path.join(dirpath, filename))17 if filename not infeature_classes:18 feature_classes.append(filename)19 printfilename20

    21 for featurename infeature_classes:22 ls1 =[] #存储同名要素路径+要素名23 for evefeatures inevefeature:24 int1 =len(featurename)25 int1 = int1 - int1 -int126 if evefeatures[int1:] ==featurename:27 ls1.append(evefeatures)28 arcpy.Merge_management(ls1,out+ "/%s"%featurename)29 get = featurename + "get"

    30 arcpy.AddMessage(get)

    GP工具参数

    GP工具界面

    GP工具下载(ARCGIS版本为10.4):

    https://download.csdn.net/download/qq_39755485/10499571

    展开全文
  • 根据arcpy写的一个合并多个gdb或mdb工具,(多文件夹下的同名shahe矢量也可合并),经测试完美运行,直接在Arcgis中打开即可使用,不完全一样要素内容的数据库也可以使用!(注:数据库中不可存在数据集,数据集中的...
  • 合并多个项目mdb到一个GDB中,适用于分幅地形数据的合并
  • mdb及gdb空间数据批量合并

    千次阅读 2019-08-15 18:09:03
    mdb及gdb的批量合并,支持要素类,表,数据集 ############ # @Time : 2019年8月15日 # @Author : yongyinli # @Blog :https://blog.csdn.net/yongyinli import arcpy import os import sys reload(sys) sys....

    mdb及gdb的批量合并,支持要素类,表,数据集。mdb合并;GDB合并;数据库合并。ArcGIS工具箱。支持ArcGIS10.1及以上。

    2022年1月15日更新说明:

    1、存在源图层是多部件的情形下会合并数据不全。

    解决方案:拆分多部件和修复几何。

    提供批量拆分多部件的工具。

    2、不同坐标系的的数据不能一起合并。

    2022年1月23日更新说明:

    1、待合并的数据可能存在shapetype(点线面)结构不一致的情况,导致合并失败。单独更新了批量检查工具。

    ############
    # @Time    : 2019年8月15日
    # @Author  : yongyinli
    # @Blog    :https://blog.csdn.net/yongyinli
    
    import arcpy
    import os
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    def MergeFileMDB(inPath, outPath, outName,gdbormdb):
    	#输出文件类型
    	if(gdbormdb=='true'):
    		outName = outName +'.gdb'
    	else:
    		outName = outName +'.mdb'
    	#输入输出路径
    	arcpy.env.workspace = inPath
    	mergeFilePath = outPath + os.sep + outName
    	arcpy.AddMessage(u"输出路径为:"+mergeFilePath)
    
    	#获得所有的mdb
    	workspaces = arcpy.ListWorkspaces("*","FileGDB")
    
    	for workspace in workspaces:
    		print(workspace)
    		arcpy.env.workspace = workspace
    		mergeFileExist = os.path.exists(mergeFilePath)
    		
    		#获取数据
    		featureclasses = arcpy.ListFeatureClasses() #要素类
    		tbs = arcpy.ListTables()					#数据表
    		dss = arcpy.ListDatasets()					#数据集
    		#判断文件是否存在
    		if mergeFileExist:
    			for fc in featureclasses:
    				arcpy.AddMessage(u"正在合并【"+fc+"】")
    				arcpy.Append_management(fc,os.path.join(mergeFilePath, os.path.splitext(fc)[0]),"TEST","","")
    			for tb in tbs:
    				arcpy.AddMessage(u"正在合并【"+tb+"】")
    				arcpy.Append_management(tb,os.path.join(mergeFilePath, os.path.splitext(tb)[0]),"TEST","","")
    			if(dss is not None):
    				for ds in dss:
    					fcs1 = arcpy.ListFeatureClasses(feature_dataset = ds)
    					for fc1 in fcs1:
    						arcpy.Append_management(fc1,os.path.join(mergeFilePath,ds,os.path.splitext(fc1)[0]),"TEST","","")
    		else:#输出文件不存在,则创建文件
    			if(gdbormdb=='true'):
    				arcpy.CreateFileGDB_management(outPath, outName)
    			else:
    				arcpy.CreatePersonalGDB_management(outPath, outName)
    			#要素类
    			for fc in featureclasses:
    				arcpy.FeatureClassToFeatureClass_conversion(fc, mergeFilePath, os.path.splitext(fc)[0])
    			for tb in tbs:
    				arcpy.TableToTable_conversion(tb, mergeFilePath, tb)
    			for ds in dss:
    				fcs1 = arcpy.ListFeatureClasses(feature_dataset = ds)#
    				#获取空间参考
    				desc = arcpy.Describe(ds)
    				# Get the spatial reference 
    				sr = desc.spatialReference
    				#创建数据集
    				arcpy.CreateFeatureDataset_management(mergeFilePath, ds,sr)
    				for fc1 in fcs1:
    					arcpy.FeatureClassToFeatureClass_conversion(fc1, os.path.join(mergeFilePath,ds), os.path.splitext(fc1)[0])
    #读取参数
    in_dir =  arcpy.GetParameterAsText(0)
    out_location =  arcpy.GetParameterAsText(1)
    out_name =  arcpy.GetParameterAsText(2)
    gdbormdb =  arcpy.GetParameterAsText(3)
    
    #调用mdb合并函数
    arcpy.AddMessage("----------------------")
    MergeFileMDB(in_dir, out_location,out_name,gdbormdb)
    arcpy.AddMessage(u"合并完成")
    arcpy.AddMessage("----------------------")
    
    

    成品工具箱请联系QQ:523569831

    链接:https://pan.baidu.com/s/1x3MdcvDZZC1os-17qkYLeA 
    提取码:leon 
     

    展开全文
  • 使用Arcpy合并多个GDB数据库

    千次阅读 热门讨论 2020-06-07 16:16:49
    现有多个县的GDB数据库,每个数据库包含多个要素数据集,每个要素数据集下又包含多个要素类。 现在需要创建一个新的GDB数据库,其包含之前所有数据库的要素数据集和数据集下的要素类,且每个要素类保留字段而不包含...

    现有多个区县的GDB数据库
    在这里插入图片描述
    每个数据库包含多个要素数据集
    在这里插入图片描述
    每个要素数据集下又包含多个要素类
    在这里插入图片描述
    现在需要创建一个新的GDB数据库,包括之前所有数据库的要素数据集和要素类。之前所有数据库的同名要素数据集合并为新的要素数据集,同名要素类合并为新的要素类且位于原来的数据集之下。
    使用Arcpy处理效果如下
    在这里插入图片描述
    (PS:这里因为示例的4个数据库中要素类的命名并不一致,所以出现了以首字母命名的要素类和与中文命名的要素类并列而未合并的情况,所以实际项目中我们要检查数据库的结构是否一致。)

    代码如下

    import os #加载os库
    import arcpy #加载arcpy库
    
    gdblist=[] #新建空白列表 #关于列表的概念请移步 https://www.runoob.com/python3/python3-list.html
    file_dir="D:\\Desktop" #输入待合并GDB数据库所在的文件夹的路径
    dirlist=os.listdir(file_dir) #获取 D:\\Desktop 下一层级目录的路径
    for dir in dirlist: #循环dirlist列表
        if ".gdb" in dir: #如果路径名称中包含 .gdb 字符串
            gdblist.append(file_dir+"\\"+dir) #将待合并GDB数据库的路径添加到gdblist列表中
    print(gdblist)
    
    outpath="D:\\Desktop" #合并后汇总数据库所在的文件夹
    outgdbname="汇总数据库" #合并后汇总数据库的名称
    allgdb=outpath+"\\"+outgdbname+".gdb" #汇总数据库的完整路径
    if arcpy.Exists(allgdb): #判断是否已存在将新建的汇总数据库
        pass
    else:
        arcpy.CreateFileGDB_management(outpath,outgdbname) #建立汇总数据库
    
    for gdb in gdblist: #循环待合并GDB数据库
        print(gdb) #打印循环到的某个数据库的路径
        arcpy.env.workspace = gdb #将循环到的数据库作为工作空间
        datasets = arcpy.ListDatasets() #列出该数据库包含的要素数据集
        for ds in datasets: #循环要素数据集
            print("    " + ds)  # 打印该要素数据集的名称
            if arcpy.Exists(allgdb+"\\"+ds): #判断汇总数据库中是否已存在同名要素数据集
                pass
            else: #如果不存在该要素数据集
                desc = arcpy.Describe(ds) #获取该要素数据集的描述
                sr = desc.spatialReference #获取该要素数据集的空间参考
                arcpy.CreateFeatureDataset_management(allgdb,ds,sr)  #在汇总数据库中创建同名的要素数据集,并且空间参考与待合并数据库中的要素数据集保持一致
    
    
            fcs=arcpy.ListFeatureClasses(feature_dataset=ds) #获取该要素数据集下的所有要素类
            for fc in fcs: #循环该要素数据集下的所有要素类
                print("        " + fc)  # 打印要素类名称便于查看进度
                if arcpy.Exists(allgdb+"\\"+ds + "\\" + fc): #如果汇总数据库下已存在该名称的要素类
                    arcpy.Append_management(gdb + "\\" + ds + "\\" + fc,
                                            allgdb + "\\" + ds + "\\" + fc,
                                            "NO_TEST") #将该要素类追加到汇总数据库下同名的要素类中
                else: #如果汇总数据库下不存在该名称的要素类
                    arcpy.FeatureClassToFeatureClass_conversion(fc,allgdb+"\\"+ds,fc) #复制该要素类至汇总数据库下的要素数据集中
    
    展开全文
  • 61.建立指定路径(D:\HB,文件夹名:HB ,内部放置需要合并的数据库mdb或gdb或shp)2.在arcgis工具箱加载后直接使用(注意HB文件夹内的第一数据库需完整的要素,只读取第一数据库内的层,其他的数据库都是追加到...
  • 批量合并GDB

    2020-12-24 19:07:48
    如果遇到gdb比较,要素层比较,而且还存在数据集。虽然ArcGIS中的批量处理的功能,但填写参数过程也比较麻烦,如果一次性处理过多,程序容易停止工作。所以,选用Python来处理这样的问题,优势就非常明显了。把...
  • 在ArcGIS中使用ArcPython批量合并多个文件型地理数据库(*.gdb)或个人地理数据库(*.mdb) 最近在做农村地籍建库和汇交工作,其中需要把某个县市100多个村子的农村地籍数据库合并在一起,最终作为这个县市的...
  • 那这样的数据是不好使用的,我们就要将77个GDB合并在一起。 04 数据处理(GDB批量合并) 那我们在《ArcGIS系列技术分享与GIS思维分享》2020年9月8日做的分享《FME批量合并GDB(文件地理数据库)20200908》。大家...
  • FME批量合并GDB地理数据库(20200908)

    千次阅读 2020-09-09 11:32:46
    之前,我们就做了两技术分享介绍了ArcGIS怎么批量合并与分割GDB,利用的是ArcGIS的模型构建器。 ArcGIS中的GDB批量裁剪升级与发布地理处理包( 20200511 ArcGIS之GDB文件地理数据框)批量处理(20190115) ...
  • csv(path,names=columns) frame['year']=year pieces.append(frame) names=pd.concat(pieces,ignore_index=True) names names将所有的数据整合到单个DataFrame中 - concat默认将多个DataFrame整合到一起 - ignore_...
  • 在ArcGIS中使用ArcPython批量合并多个文件型地理数据库(*.gdb)或个人地理数据库(*.mdb) 使用场景:其中需要把某个县市100多个地籍数据库合并在一起,最终作为最终数据整理汇交, 打开ArcMap的Python窗口,...
  • ArcGIS之多个GDB批量导出shp至特定文件夹20201228 我们对GDB(文件地理数据库)的批量处理已经做了好几期的技术分享了。如下: FME批量合并GDB地理数据库(20200908) ArcGIS中的GDB批量裁剪升级与发布地理处理...
  • 最近在做农村地籍建库和汇交工作,其中需要把某个县市100多个村子的农村地籍数据库合并在一起,最终作为这个县市的最终数据整理汇交,代码如下:import sysimport arcpyimport stringtry:workspace = 'C:\Users\...
  • ArcGIS之GDB文件地理数据库)批量处理(20190115)

    万次阅读 多人点赞 2019-01-18 21:00:57
    ArcGIS之GDB(文件地理数据框)批量处理(20190115) GIS思维 ... 今天我们就单刀直入来介绍一下ArcGIS中GDB文件的批量处理(批量合并与分幅裁剪),当然GDB数据只是例子,你可以看完这篇文章...
  • 1. Linux系统目录结构 2. Linux文件类型和文件权限 3. Linux常用命令 ...(4)gdb调试 5. Linux 系统上的库文件生成与使用 (1)什么是库文件 (2)静态库的生成与使用 (3)共享库的生成与使用 (4)静态库
  • 将文件夹多个gdb下的要素类featureClass,FeatureClassToShapefile_conversion转换成shapefile文件。 coding = 'utf-8' import os import arcpy # Author By AHCH_yangdebin gdblist=[] #新建空白列表 file_dir=r...
  • 本文的目标是,基于ArcMap提供的Python包arcpy,将CSV文件中多个WKT字符串(几何地理空间对象数据),导出并合并为一个gdb文件,从而再进一步导出为shp文件。 本文目录及文章结构如下**1.WKT是什么****2.WKT转gdb...
  • 进程:一正在执行的程序 程序:由一条条的指令构成 pcb 进程控制块struct task_struct int pid 唯一标识一进程 进程状态:就绪 运行 阻塞 ps 查看进程都有啥 PID TTY TIME CMD 4833 ------------- bash 4843 ---...
  • Python脚本批量合并GDB

    千次阅读 2016-08-01 10:41:24
    如果遇到gdb比较,要素层比较,而且还存在数据集。虽然ArcGIS中的批量处理的功能,但填写参数过程也比较麻烦,如果一次性处理过多,程序容易停止工作。 所以,选用Python来处理这样的问题,优势就非常明显了。...
  • 可以最终生成debug版本的可执行文件 gcc -o debug main.c -g 2,release版本 (发行版本,没有调试)->交付给用户执行的版本 gcc默认生成是release版本 gcc -o main main.c 三,gdb调试 gdb—>debug版本的可执行文件 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,790
精华内容 2,316
热门标签
关键字:

多个gdb文件合并