เครื่องมือ Refactor Fields ที่มีแบตช์คืออะไร "ไวยากรณ์การแมปฟิลด์" ใน QGIS?


10

ใน QGIS มีเครื่องมือที่ดี"ฟิลด์ Refactor"ในเครื่องมือประมวลผล:

เครื่องมือฟิลด์ Refactor

การใช้มันในชั้นเดียวค่อนข้างตรงไปตรงมา

อย่างไรก็ตามเมื่อคุณวางแผนที่จะใช้มันในโหมดแบทช์เราสามารถเห็นกล่องข้อความ"การแมปฟิลด์" ฉันกำลังมองหาตัวอย่างของไวยากรณ์ที่จะใช้มี ฉันยังไม่พบเอกสารเฉพาะใด ๆ

Refactor แบทช์


หลังจากรันการเปลี่ยนโครงสร้างใหม่จาก GUI คุณสามารถดูคำสั่งในเมนูการประมวลผล -> ประวัติ (Ctrl + Alt + H)
kadarivan

คำตอบ:


7

มันไม่สะดวกที่จะทำ แต่ต่อไปนี้เป็นไวยากรณ์ที่จำเป็นสำหรับกล่องข้อความนั้น (ฉันเขียนมันในหลาย ๆ บรรทัดเพื่อความชัดเจนเท่านั้น):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

ตัวอย่างเช่น (remeber เพื่อใช้วงเล็บปีกกา):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

คุณจำเป็นต้องเขียนหลายบรรทัดเช่นเดียวกับข้างต้นเป็นจำนวนของช่องใส่คั่นด้วยเครื่องหมายจุลภาค ตัวอย่างเช่นหากเลเยอร์ของคุณมีสามฟิลด์:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

และมันก็ใช้ได้ (มันใช้ได้กับฉัน)

โปรดทราบว่าคุณอาจหลีกเลี่ยงการใช้ไวยากรณ์เชิงพจนานุกรมนี้และใช้ค่าที่ต้องการโดยตรง ตัวอย่างเช่นมีการอ้างอิงถึงตัวอย่างแรกคุณสามารถใช้:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

หากคุณไม่ได้ใช้ไวยากรณ์นี้ข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น:

ไม่มีค่าพารามิเตอร์: การแมปฟิลด์ (แถวที่ 1)


2
คุณช่วยอธิบายได้ว่า <code of type> หมายถึงอะไร? ฉันพยายามใช้ 3 โดยสมมติว่าเป็นสตริง (เนื่องจากเป็นอันดับที่ 3 ในตัวเลือกแบบเลื่อนลง) แต่ฉันได้รับข้อผิดพลาด: วัตถุ 'int' ไม่มีแอตทริบิวต์ ' getItem ' ดูบันทึกสำหรับรายละเอียดเพิ่มเติม รหัสที่ฉันใช้คือ: {u '"FLAG"', 0, 3, u'FLAG ', 0} สำหรับเลเยอร์ของฉันโดยที่ {' expression ': u' "FLAG" ',' length ': 0,' พิมพ์ ': 3,' name ': u'FLAG', 'precision': 0}
JAT86

@ JAT86 มันเป็นตัวเลขที่ระบุประเภทข้อมูล (เช่น int, สตริงและอื่น ๆ ) น่าเสียดายที่ฉันไม่พบการอ้างอิงสำหรับพวกเขา แต่ฉันควรจำค่าสำหรับประเภทที่ใช้มากที่สุด: 2สำหรับ int, 6สำหรับคู่และ10สำหรับสตริง นอกจากนี้คุณอาจไม่ควรระบุ0ความยาวของฟิลด์ (อย่างน้อย1!) โปรดแจ้งให้เราทราบหากคุณแก้ไขปัญหาได้
mgri

ขอบคุณสำหรับการตอบกลับที่รวดเร็ว บางทีการประมวลผลแบบกลุ่มอาจซับซ้อนกว่าที่ฉันคิดไว้มาก ฉันพยายามใช้อย่างน้อย 1 สำหรับความยาวและ 10 สำหรับประเภทของรหัส: {u '"FLAG"', 1, 10, u'FLAG ', 0} ยังมีข้อผิดพลาดปรากฏขึ้น:' int 'วัตถุไม่มีแอตทริบิวต์' getItem 'ดูบันทึกสำหรับรายละเอียดเพิ่มเติม เลเยอร์ของฉันมีคุณสมบัติดังต่อไปนี้: ชื่อ: flag, Type: string, Length: 0, Precision: 0, Expression: "flag"
JAT86

@ JAT86 การรันเครื่องมือจาก GUI ส่งคืนปัญหาใด ๆ หรือไม่?
mgri

ถ้าโดย GUI คุณหมายถึงเลเยอร์เดียวมันไม่ได้มีปัญหาใด ๆ คอลัมน์ FLAG ถูกลบสำเร็จเมื่อ "คลิกลบเขตข้อมูลที่เลือก" และบันทึกลงในเลเยอร์ใหม่ "ปรับโครงสร้างใหม่"
JAT86

2

มีอัลกอริทึมอื่นที่คล้ายกับสิ่งนี้ซึ่งอินเทอร์เฟซทำให้กระบวนการแบทช์ง่ายขึ้น

ป้อนคำอธิบายรูปภาพที่นี่


1
ภาษาอังกฤษภาษาอังกฤษ
BERA

การแปลภาษาอังกฤษสำหรับรายการเมนูที่เป็นปัญหาคือ "เพิ่มเขตข้อมูลไปยังตารางแอตทริบิวต์"
J. Taylor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.