Trường tăng tự động trong lớp tính năng bằng ArcGIS Desktop?


8

Vì vậy, tôi tương đối mới với ArcGIS và ArcCatalog. Tôi đã tạo một tên trường của PRO DỰID trong một lớp đối tượng trong Cơ sở dữ liệu địa lý cá nhân. Kiểu dữ liệu là văn bản. Đây sẽ là một ID mười chữ số. Năm ký tự đầu tiên sẽ là từ viết tắt. Ký tự thứ sáu sẽ là một chữ số đại diện cho loại tính năng. Nó sẽ là một con số. Bốn ký tự cuối cùng sẽ là các số nên được tăng lên bắt đầu từ 0001.

Ví dụ: NƯỚC-1-0001

Ảnh chụp màn hình của lĩnh vực: nhập mô tả hình ảnh ở đây

Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể làm điều này trong ArcCatalog. Tôi đã thấy một số mã Python sẽ tự động tăng như sau:

rec=[OBJECTID]
def autoIncrement(a): 
 global rec 
 return "water" + str(a) + "-" +  format(rec, '04d')

Một lần nữa tôi là người mới khi nói đến ArcGIS. Bây giờ tôi nhận được một lỗi TênError tên 'OBRIID' không được xác định.

Câu trả lời:


12

bạn cần sử dụng mã này trong ArcMap và máy tính trường. Thêm lớp tính năng của bạn vào bảng nội dung, nhấp chuột phải vào nó để mở bảng, nhấp chuột phải vào tên của trường và khởi chạy máy tính trường.

Sau đó, bạn kiểm tra codeblock và sao chép mã bạn đã đề cập.

nhập mô tả hình ảnh ở đây

bây giờ cho đoạn mã của bạn, đây là những gì tôi sẽ làm

rec=0 
def autoIncrement(a): 
 global rec 
 pStart = 1  
 pInterval = 1 
 if (rec == 0):  
  rec = pStart  
 else:  
  rec += pInterval  
 return "water" + str(a) + "-" +  format(rec, '04d')

bạn gọi mã này bằng

tự động kết nối (! name_of_field!)

trong đó name_of_field chứa loại tính năng

EDIT: Nếu bạn muốn sử dụng trực tiếp trường OBRIID, thì một phép nối đơn giản là đủ

"WATER-" + str(!typrfield!) + "-" +  format(!OBJECTID!, '04d')

nếu số của bạn phải phụ thuộc vào loại, thì việc sử dụng khối mã Python là hợp lý

rec1=0 
rec2=0
def autoIncrement(a): 
 global rec1
 global rec2 
 pStart = 1  
 pInterval = 1 
 if (a == 1):
  if (rec1 == 0):  
   rec1 = pStart  
  else:  
   rec1 += pInterval
  out = "water-1-" +  format(rec1, '04d')  
 else:
  if (rec2 == 0):  
   rec2 = pStart  
  else:  
   rec1 += pInterval
  out = "water-2-" +  format(rec2, '04d')  
 return out

Ồ được thôi. Tôi có thể có thể sử dụng OBRIID đã có trên bàn. Cảm ơn bạn, tôi sẽ thử điều này và gửi bất kỳ câu hỏi tôi đã nhận được. Tôi rất trân trọng điều này.
khoai mỡ

Thay vì sử dụng pStart cho rec, làm thế nào tôi có thể chỉ định một trong các trường từ bảng Thuộc tính cho rec?
khoai mỡ

Tôi nhận được một OBRIID không được xác định lỗi. Mã python của tôi được hiển thị ở trên.
khoai mỡ

bạn không thể khởi tạo rec dựa trên "objectid" như bạn đã đề cập trong bài đăng của mình, vì "objectid" là một trường và không phải là một giá trị duy nhất. Những gì bạn có thể làm là một kết nối đơn giản (không cần khối mã)
radouxju

Này câu hỏi nhanh, làm cách nào để kiểm tra Null Entries trong trường BaseID?
khoai mỡ

2

Tôi nghĩ rằng điều này đạt được dễ dàng hơn với updateCoder:

import arcpy

# Create update cursor for feature class 
fc = r'D:\temp\tempFGDB.gdb\point'
fields = "Munic; Point; UniqueID"
sort_fields="Munic A; Point A"

rows = arcpy.UpdateCursor(fc, fields=fields, sort_fields=sort_fields)
previousPoint = None
i = 0
for row in rows:
    munic = row.getValue('Munic')
    point = row.getValue('Point')
    if not previousPoint:
        i += 1
    elif previousPoint <> point:
        i = 1
    else:
        i += 1

    row.setValue('UniqueID', '-'.join([str(munic),str(point),str(i)]))
    previousPoint = point
    rows.updateRow(row)

1

Đầu tiên, tôi sẽ tạo một trường bổ sung cho các số liên tiếp (PRO DỰ_ID). Tải xuống hộp công cụ này http://www.arcgis.com/home/item.html?id=242e0e5c8273404085b174f66db97ecf

Trên trường id dự án của bạn, nhấp chuột phải> Máy tính trường và nhập:

"WATER" + [PROJECT_ID]

Điều này sẽ nối bất kỳ văn bản nào bạn nhập với số id dự án tương ứng. Nếu bạn đã có các trường riêng cho từ viết tắt và loại dự án, bạn có thể làm điều gì đó tương tự:

[ACRONYM] + [TYPE] + [PROJECT_ID]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.