永久重新排序数据中的字段(shp,gdb)


24

如果我的shapefile或地理数据库要素类具有要永久重新排序的字段,是否有工具,脚本或实用程序可以帮助我快速完成此任务?

通常,我知道您必须创建一个新字段,然后使用旧值填充它,然后删除旧字段。我希望已经有一些东西可以对此有所帮助。假设您没有FME或其他ETL工具,那么下一个最佳建议是什么?

这不是视图级别的更改(即,按顺序拖放字段),而是写出到新的shapefile或要素类。谢谢。


我很难相信,但是我找不到办法。您需要重新排序字段的用例是什么?在ArcMap中,图层属性的“字段”选项卡上的字段重新排序不是解决方案吗?
Derek Swingley 2011年

2
字段的重新排序是因为数据将不会在ArcMap中使用,而是使用不太复杂的映射软件,即1)使用shapefile和2)不允许在客户端进行重新排序,以及3)客户端需要查看关键属性显示在“识别”树的顶部。
RyanDalton

刚刚编辑了我之前删除的答案。希望您不害怕命令行;)。
德里克·斯文利


2
@ SaultDon-这是不一样的问题。您引用了一个要对RECORDS(行)进行排序的问题,但我想对FIELDS(列)进行排序。
RyanDalton

Answers:


13

我很确定您可以通过对工具的字段映射部分中的字段重新排序来实现要素类到要素类的操作。

编辑:FC2FC不会执行此操作,但是...请急救。

我刚刚确认ogr2ogr可以做到这一点。在-select开关上指定字段名称顺序。例如,如果我有一个带有两个字段的shapefile,即“名称”和“ FolderPath”(按此顺序),但是我想首先使用“ FolderPath”创建一个新的shapefile,则可以这样做:

C:\Temp>ogr2ogr -f "ESRI Shapefile" re_order_ogr.shp re_order1.shp -select "FolderPath,Name"

2
尽管它不像我希望的那样对用户友好,但确实可以解决问题。我创建了一个ArcGIS Python脚本来帮助为其建立输入,而用户只需要包含-select“ field1,field2,etc”选项即可。您可以在resources.arcgis.com/Resources2010/gallery/file/geoprocessing/…上
RyanDalton

我在具有域的SDE上具有要素类。这将保留关联的域吗?
MjonesGEO 2014年

@joebob号 AFAIK,ogr不支持来自SDE GDB的数据集,它也不支持域。
Derek Swingley 2014年

谢谢,我只是使用XRay,它可以在SDE中保留其域的同时对字段进行重新排序或替换。
MjonesGEO,2014年


7

现在,QGIS“表管理器”插件还具有无需命令行即可轻松执行此任务的能力。


6

在QGIS中,您现在可以使用处理工具箱(Ctl + Alt + T)并转到QGIS地理算法>向量表工具>重构字段。

从那里,您将拥有所有用于编辑表结构的工具。

在此处输入图片说明


4

X射线弧图添加了一个用于对Geodatabes格式的字段进行重新排序的工具X射线重新排序字段工具在这里


这很好。如果您重新订购SDE,它甚至会将您的域保存在字段中。很棒的建议!
MjonesGEO 2014年

3

供参考:MapInfo也可以直接使用。只需打开DBF,然后对字段进行永久重新排序。http://www.dbf-editor.com也可以这样做(40美元)。其他DBF编辑器也可能会这样做。


在这一行中,只要您愿意忍受.dbf文件格式的局限性,infolib也应该也可以工作(转换为ascii(csv),重新排列以适合,重新转换回info或dbf)。
马特·威尔基2011年

您是说要忍受CSV格式的限制?DBF是此问题的起点...
Uffe Kousgaard 2011年

我的意思是dbf限制,特别考虑到csv对字段名长度或记录值长度没有限制,并且起始点是文件gdb,但是在标题中提到了重新读取QI并看到“ shp”的问题。因此,到处都是限制;-)
马特·威尔基2011年

3

我也遇到过类似的问题,如果您已经拥有QGIS,那么对数据字段进行永久重新排序的最快方法就是使用前面建议的“表管理器”插件。

易于安装插件,并且对用户友好,如下页所述:

http://www.qgistutorials.com/zh-CN/docs/using_plugins.html

它使您可以按特定顺序移动属性,重命名字段,插入任何新字段并进行复制。它还允许您保存原始文件,或重命名它并以不同于原始文件的方式保存它。

在此处输入图片说明

这是解决我的属性表管理问题的快速便捷的解决方案,强烈建议使用此方法,尤其是对于具有大量与其相关联的属性的文件。


3

最好的方法是使用字段映射。多年来,我一直在努力使用ESRI软件的此功能,但最终我对该解决方案感到满意。基本上,您可以复制要素类,并使用arcpy.FieldMappings对字段进行永久重新排序。所有数据也将被保留。脚本完成后,只需将旧的要素类重命名为myFeatureClass_old,将新的要素类重命名为myFeatureClass!

这是脚本,它非常简单:

import arcpy
'''
This is possible in python using FeatureClasstoFeatureClass with Fieldmappings. You can also rename fields at the same time.
So if you have a Feature Class with FIELD3, FIELD2, FIELD1 and you want the result to be FIELD1, FIELD2, FIELD3 then the following code should accomplish this.
'''
arcpy.env.workspace = r"C:\Users\myself\ArcData\my_geodatabase.gdb"
arcpy.env.overwriteOutput = True

input_fpath = "Lakes"

output_dpath = arcpy.env.workspace
output_fname = "Lakes_new"

fms = arcpy.FieldMappings()

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD1")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD2")
fms.addFieldMap(fm)

fm = arcpy.FieldMap()
fm.addInputField(input_fpath,"FIELD3")
fms.addFieldMap(fm)

arcpy.conversion.FeatureClassToFeatureClass(input_fpath,output_dpath,output_fname,"",fms)


2

MakeQueryTable将使您可以定义表或FC(仅限Geodatabase)的字段顺序。您指定字段的顺序是输出的顺序。我发现此工具难以使用。青年汽车

Arctoolbox,数据管理工具,图层和表视图,制作查询表


2

将要素类导出到空的个人地理数据库(最快的拖放操作),在Access中打开.mdb,在Design View中对字段重新排序,保存,然后使用ArcMap / Catalog复制回形状或文件地理数据库。

相同的方法适用于重命名字段。

但是请注意,仅在复印时,很容易弄乱所有内容。(正如Karey Jack在另一个答案中指出的那样,Esri 不鼓励直接使用.mdb访问)。为了安全起见,请忽略所有以。开头的表GDB_以及以_Shape_Index。结尾的表。


1

尝试OGR2OGR。您可以传递一个SQL查询,并将字段按所需的顺序排列。

ogr2ogr outdataset indataset -sql“从源层中选择src_field1 AS dst_field1,src_field2 AS dst_field2”

刚刚测试了一下,效果很好!

仅供参考,安装OGR的最简单方法是通过FWTools



0

我在这个聚会上有点晚了,但是我很惊讶没有人提到ESRI地理数据库图表绘制器

ESRI提供的资源,用于编辑地理数据库和文件的XML结构。就我而言,如果您正在从事任何必须完美设计的工作(长期项目),那么这是至关重要的。在犯了一个简单的错误之后,它使您不必连续重新创建文件。


1
您是否看到(针对问题本身的)评论指出这不是数据库重组,而是需要导出数据?
ub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.