วิธีการต่อฉลากใน QGIS


14

ฉันใช้ QGIS 1.8 บนเครื่อง windows XP และฉันพยายามทำการต่อหลายฟิลด์เพื่อติดป้ายชื่อถนนในท้องที่ของฉันในตารางคุณลักษณะ แต่ฉันไม่พบไวยากรณ์ที่ถูกต้อง ฟิลด์แรกประกอบด้วยถนน, ลิงก์ประเภทที่สองเช่น: ถนนและการวางแนวที่สามเช่นตะวันออกหรือตะวันตก คุณสามารถบอกวิธีเขียนไวยากรณ์ที่ถูกต้องโดยใช้กล่องโต้ตอบของป้ายกำกับตามสูตร แนบภาพหน้าจอที่แสดงตารางแอตทริบิวต์

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

คำตอบ:


19

ตัวดำเนินการเรียงต่อกันคือ||(แปลกฮะ?) ดังนั้นคุณจะใช้สิ่งที่ชอบ:

street || ', ' || link || ', ' || orientation

กระจายพวกเขาด้วยตัวคั่นและสตริงแบบคงที่ที่คุณต้องการ

ตามที่ @NathanW ระบุไว้สิ่งนี้จะล้มเหลวหากมีฟิลด์ใด ๆ เป็น NULL แต่คุณสามารถใช้ค่าทางเลือกในกรณีนั้น:

street || ', ' || CASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END || ', ' || orientation

QGIS รองรับฟังก์ชั่นตัวช่วยcoalesceตั้งแต่รุ่น 2.0 มันมีเพื่อหลีกเลี่ยงปัญหาของ NULLs และตัวอย่างจะมีลักษณะ:

 street || ', ' || coalesce(link, '(nodata)') || ', ' || orientation

2
นอกจากนี้ยังมีconcatฟังก์ชั่นในรุ่น dev ใช้ || ไม่ได้จัดการ NULL ถ้าlinkเป็น NULL ทั้งป้ายกำกับนั้นเป็น Null concatไม่มีปัญหานี้ || ถูกนำมาจาก Postgres postgresql.org/docs/9.1/static/functions-string.html
Nathan W

ดูเหมือนว่าจะไม่สนับสนุนคำสั่งกรณีและปัญหาโดยตรง เป็นตัวเลือกเดียวโดยไม่ต้องใช้ SQL โดยตรงเพื่อสร้างสำเนาของคอลัมน์ลิงค์ที่ไม่ใช่ NULL ใช่หรือไม่
lynxlynxlynx

คุณหมายถึงอะไรที่ไม่สนับสนุนคำสั่งกรณี?
นาธาน W

3
คุณหายไป END สตริงที่ถูกต้องคือCASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W

1
อ่าcoalesceเป็นคนที่ฉันหมายถึง
Nathan W

2

บน QGIS veriosn 2.0.1 นิพจน์ธรรมดาทำงานได้ดังนี้:

"field1" || '(' || "field2" || ')'

ผลลัพธ์ที่ต้องการ: field1 (field2)

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