การสร้างคุณสมบัติในวิธีอัตโนมัติด้วย QGIS?


11

ฉันต้องการสร้างรหัสอัตโนมัติในขณะที่สร้างคุณสมบัติใหม่ ดังนั้นทุกครั้งที่ฉันสร้างจุดใหม่ ID ของมันจะเพิ่มขึ้น 1 เช่น:

Feature 1: id 1
Feature 2: id 2
Feature 3: id 3

ฉันจะโจมตีสิ่งนี้ได้อย่างไร

คำตอบ:


8

หากคุณคลิกขวาที่เลเยอร์ของคุณและไปที่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 , สมัครฯลฯ และตอนนี้หวังว่าเมื่อคุณสร้างคุณลักษณะโดยอัตโนมัติจะสร้างรหัสที่ไม่ซ้ำกันในสาขาที่คุณเลือก



3

ฉันคิดว่าคุณไม่สามารถตั้งค่าเริ่มต้นเมื่อสร้างคุณสมบัติใหม่ แต่คุณสามารถลองใช้วิธีต่อไปนี้ได้:

  • เมื่อสร้างคุณสมบัติเสร็จแล้วให้ไปที่ตารางแอตทริบิวต์
  • ไปที่เครื่องคิดเลขฟิลด์และสร้างคอลัมน์ใหม่ที่idมีชนิด Int
  • ในฐานะที่เป็นค่าแทรก @row_numberซึ่งจะให้ค่าที่ไม่ซ้ำกันตามหมายเลขแถว
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.