ArcGIS中ObjectID,FID和OID字段有什么区别?


ArcGIS Desktop 需要独立的表和属性表都有一个ObjectID字段,这个字段中包含一个唯一的,长整型的数值来指定每一条记录。这个ID是由ESRI的软件来管理的,是不能够手动更改的。

在Shapefiles, geodatabase feature classes, 和独立的表格中ObjectID的处理方式不同。
---在一个shapefile中, 'FID'字段包含ObjectID,并且值从零开始。
---在一个geodatabase feature class 或者geodatabase中的独立的表格中,  'OBJECTID' 字段包含ObjectID, 值从1开始。
---在一个独立的dBase 表格中, 'OID' 字段包含ObjectID, 值从零开始。

在使用ArcGIS Desktop编辑数据的时候,不同的ObjectID字段的功能不一样:
---如果一个shapefile中的一条记录被删除了, FID会重新编号,这样这个值会从0开始按顺序逐渐增大。编号之间没有间隔。
---如果一个 geodatabase feature class 或者一个 geodatabase table中的一条记录被删除了, OBJECTID不会重新编号, 并且列表中的间隔会保存。
---如果一个dBase表格中的一条记录被删除了,OID会从0开始重新编号。编号之间没有间隔。 

数据转换导致ObjectID被重写。
---当一个geodatabase feature class被导出或者转换成shapefile的格式,或者当一个geodatabase 表格被导出成dBase格式, 输出shapefile或者表格中的记录将被从0开始按顺序重新编号。
---当一个geodatabase feature class被导出或者转换到一个新的 geodatabase feature class, 或者当一个geodatabase table 被导出或者转换到一个新geodatabase table, 输出的feature class 或者table中的记录将被从1开始按顺序重新编号。

在选择字段用来Join或者Relate表格的时候,需要注意这些特点。如果一个 shapefile要使用FID 和 OBJECTID 来Join到一个feature class, 由于feature class 没有一条记录是OBJECTID = 0,所以shapefile的FID = 0的记录将不会与feature class 中的任何一条记录相匹配。


### 创建 Object-ID 字段的方法 在 ArcGIS 中,`Object-ID` 是一种特殊的字段类型,用于唯一标识每条记录。如果 XY 坐标数据缺少 `Object-ID` 字段,则可以通过以下方法为其创建。 #### 方法一:使用 Add ID Field 工具 可以利用 ArcToolbox 提供的工具来添加唯一的对象标识符。 1. 打开 **ArcMap** 或 **ArcCatalog** 并加载包含 XY 数据的数据集。 2. 使用 **Add Field** 工具,在属性表中新增一个整数类型的字段(例如命名为 `OBJECTID`),并设置其为不可为空[^1]。 3. 接下来运行 **Calculate Field** 工具,计算新字段值以生成连续递增的唯一编号。表达式可设为: ```python !FID! + 1 ``` 这里的 `FID` 是默认存在的内部索引字段,通常从零开始计数。 #### 方法二:通过 Python 脚本实现自动化处理 当需要批量处理多个图层或者复杂场景下手动操作不便时,Python 可提供更灵活的方式完成此任务: ```python import arcpy # 定义输入要素类路径以及目标字段名称 input_feature_class = r"C:\path\to\your\data.shp" target_field_name = "OBJECTID" # 添加新的整型字段作为 OBJECTID 替代品 arcpy.AddField_management(input_feature_class, target_field_name, "LONG") # 更新该字段使其具有唯一性数值序列 with arcpy.da.UpdateCursor(input_feature_class, ["OID@", target_field_name]) as cursor: for row in cursor: row[1] = row[0] cursor.updateRow(row) print(f"{target_field_name} field successfully created and populated with unique values.") ``` 上述脚本会基于现有 OID@ 属性重新填充指定的目标字段,从而满足 GIS 应用程序对 object id 的需求[^2]。 #### 注意事项 - 如果原始数据源本身支持原生 oid 功能(比如 geodatabase),则无需额外创建独立的对象id字段;因为系统已经维护了一个隐式的oid列[^3]。 - 对于 shapefile 文件来说,由于它不支持真正的 objectid 概念,因此我们只能模拟这种行为并通过显式管理 long 类型字段达成目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值