ฉันต้องการสร้างรหัสอัตโนมัติในขณะที่สร้างคุณสมบัติใหม่ ดังนั้นทุกครั้งที่ฉันสร้างจุดใหม่ ID ของมันจะเพิ่มขึ้น 1 เช่น:
Feature 1: id 1
Feature 2: id 2
Feature 3: id 3
ฉันจะโจมตีสิ่งนี้ได้อย่างไร
ฉันต้องการสร้างรหัสอัตโนมัติในขณะที่สร้างคุณสมบัติใหม่ ดังนั้นทุกครั้งที่ฉันสร้างจุดใหม่ ID ของมันจะเพิ่มขึ้น 1 เช่น:
Feature 1: id 1
Feature 2: id 2
Feature 3: id 3
ฉันจะโจมตีสิ่งนี้ได้อย่างไร
คำตอบ:
หากคุณคลิกขวาที่เลเยอร์ของคุณและไปที่Properties > Fields
จากนั้นคลิกที่Text Edit
คุณสามารถตั้งค่าเริ่มต้น (โดยการพิมพ์ค่าหรือใช้นิพจน์) ซึ่งจะปรากฏในตารางแอตทริบิวต์โดยอัตโนมัติ
น่าเสียดายที่การใช้นิพจน์เช่น$rownum
(ซึ่งควรให้คุณใช้รหัสเฉพาะสำหรับคุณลักษณะของคุณ) ใช้งานไม่ได้ (ฉันเดาว่าเป็นเพราะคุณลักษณะต้องได้รับการมอบหมายก่อน) แต่เราสามารถสร้างฟังก์ชั่นที่นับจำนวนของคุณสมบัติที่ทำและเพิ่ม 1 คุณสามารถเข้าถึงฟังก์ชั่นแก้ไขภาพตามที่แสดงในภาพ:
จากนั้นใน Function Editor สร้างไฟล์ใหม่หรือแก้ไขไฟล์ที่มีอยู่และใช้รหัสต่อไปนี้:
from qgis.core import *
from qgis.gui import *
@qgsfunction(args='auto', group='Custom')
def update(feature, parent):
layer = qgis.utils.iface.activeLayer()
x = layer.featureCount()
return x + 1
คลิกโหลดจากนั้นไปที่แท็บนิพจน์ที่อยู่ติดกันแล้วใส่นิพจน์:
update()
จากนั้นคลิกตกลงและคุณจะเห็นค่าตัวอย่าง:
คลิกOK , สมัครฯลฯ และตอนนี้หวังว่าเมื่อคุณสร้างคุณลักษณะโดยอัตโนมัติจะสร้างรหัสที่ไม่ซ้ำกันในสาขาที่คุณเลือก
คุณสามารถใช้ปลั๊กอิน "AutoFields"สำหรับการอัปเดตแอตทริบิวต์อัตโนมัติเมื่อสร้างหรือแก้ไขคุณสมบัติของเวกเตอร์
ฉันคิดว่าคุณไม่สามารถตั้งค่าเริ่มต้นเมื่อสร้างคุณสมบัติใหม่ แต่คุณสามารถลองใช้วิธีต่อไปนี้ได้:
id
มีชนิด Int@row_number
ซึ่งจะให้ค่าที่ไม่ซ้ำกันตามหมายเลขแถว