當我們創建一個Shapefiles(shp), geodatabase feature classes(gdb中的要素類)或獨立的dBase表(dbf)時,ArcGIS會自動為上述三種格式創建一個ID字段,這個ID是由ArcGIS來管理,是不能手動更改或刪除的。它被用于指定Shapefiles, geodatabase feature classes或dBase表中的每條記錄。因此這個ID是唯一的。
*****
```
我們日常工作中經常會面對三種ArcGIS中的ID,分別是FID、OBJECTID和OID。他們之間的區別是什么呢?
```
> 說明一下,圖中ID可以理解為屬性內容,它與FID、OBJECTID和OID都沒有任何關系,示例數據沒有做好命名,若造成誤導還請理解。
## FID
- FID存在于shapefile中,它的值從0開始。
- 在shapefile中新增一個圖形,則屬性表中相應的增加一條記錄,該記錄的FID按順序編號。
- 在shapefile中刪除一條記錄時,FID會重新編號,編號之間保持順序,沒有間隔。
- 如下圖所示,刪除了FID為2的記錄,則其余FID重新編號。

- 如下圖所示,對FID為1的圖形進行切割后,生成了新的圖形被賦值為新FID-4。

- 需要注意的是,當編輯狀態下,會因為某些不知道的什么原因,顯示出現BUG,甚至連記錄的數量都顯示不正確。當出現這種情況時,我們只需要保存編輯,重新打開即可。
## OBJECTID
- OBJECTID存在于.gdb數據庫中的geodatabase feature classes(要素類)或geodatabase table(表)中,它的值是從1開始。
- 如果一個 geodatabase feature class 或者一個 geodatabase table中的一條記錄被刪除了, OBJECTID不會重新編號, 并且列表中的間隔會保存。
- 如下圖所示,刪除了FID為3的圖形后,OBJECTID并沒有重新編號。

- 如下圖所示,對2和4圖斑進行了多次切割,新生成的圖形,其OBJECTID按現有記錄繼續向下編號,沒有占用之前刪掉的OBJECTID-3。

- 同樣在.gdb數據中新建Table表,對表進行編輯時,OBJECTID不會重新編號, 并且列表中的間隔會保存。

## OID
- OID存在于獨立的dBase表格中,格式為.dbf,它的值是從0開始
- 當dBase表格中的一條記錄被刪除了,OID會從0開始重新編號,編號之間沒有間隔。
## 三者之間的轉換
- 當一個geodatabase feature class被導出或者轉換成shapefile的格式,輸出shapefile中的記錄將被從0開始按順序重新編號。
- 我們將之前OBJECTID為1/2/4/5/6/7的要素類導出為shapefile格式,查看其屬性表變化如下:

可以看到導出后的shapefile新增了一個FID字段,且編號從0開始順序編號,中間沒有間隔。而其中OBJECTID則繼承原要素類的OBJECTID值,并變成了一個可編輯的字段。
- 當一個geodatabase 表格被導出成dBase格式, 輸出dbf表格中的記錄將被從0開始按順序重新編號。
- 當一個geodatabase feature class被導出或者轉換到一個新的 geodatabase feature class, 輸出的feature class 中的記錄將被從1開始按順序重新編號。

可以看到將geodatabase feature class導出到另一個gdb數據庫中后,OBJECTID被從1開始重新編號。也就是說一組數據經過兩個數據庫之間的轉換后,如果直接按OBJECTID進行連接將有可能不再準確對應(原geodatabase feature class進行過刪減操作)。
- 當一個geodatabase table 被導出或者轉換到一個新geodatabase table, 輸出的table中的記錄將被從1開始按順序重新編號。
- 當一個shapefile導入或轉換到geodatabase feature class中,輸出的feature class中將沒有FID,會出現一個OBJECTID,并從1開始重新編號。

在選擇字段用來Join或者Relate表格的時候,需要注意這些特點。如果一個 shapefile要使用FID 和 OBJECTID 來Join到一個feature class, 由于feature class 沒有一條記錄是OBJECTID = 0,所以shapefile的FID = 0的記錄將不會與feature class 中的任何一條記錄相匹配。