เส้นตรงจากป้ายกำกับถึงคุณสมบัติใน QGIS?


11

สิ่งที่ฉันพยายามทำคือติดป้ายชุดคุณลักษณะของจุด แต่เนื่องจากความหนาแน่นของคุณลักษณะจุดฉันจะต้องย้ายป้ายกำกับออกจากคุณลักษณะของจุด จากนั้นฉันต้องการใช้เส้นตรงที่เรียบง่าย (ไม่ใช่ลูกศร) เพื่อแสดงว่าฉลากหมายถึงจุดใด

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

สิ่งที่ดีที่สุดที่ฉันทำได้คือเปลี่ยน "ประเภทเลเยอร์สัญลักษณ์" (เลเยอร์เลเบล> คุณสมบัติ> สไตล์) เป็น "ลูกศร" ยกเลิกการทำเครื่องหมาย "ลูกศรโค้ง" และยกเลิกการทำเครื่องหมาย "ลูกศรซ้ำในแต่ละเซ็กเมนต์" จากนั้นสร้างความยาวหัวและความหนา 0 และสร้าง "ความกว้างของลูกศร" และ "ความกว้างของลูกศรเมื่อเริ่มต้น" เท่าที่จะทำได้ แต่สิ่งนี้ยังคงสร้างเส้นหนา ๆ ดูภาพก

ฉันได้ลองตั้งค่า "สัญลักษณ์ในภายหลังพิมพ์" เป็น "เส้นแบบง่าย ๆ " แต่ผลลัพธ์นี้เป็นเส้นที่มีจุดอ่อน / มุม / มุมในนั้น ดูภาพ B

โดยอุดมคติแล้วฉันต้องการเส้นตรงระหว่างป้ายกำกับและคุณลักษณะ (เช่นในภาพ A) ที่มีความกว้างใกล้เคียงกับที่อยู่ในภาพ B

ตัวอย่างการติดฉลากสองประเภท

คำตอบ:


11

คุณสามารถใช้นิพจน์สำหรับเพื่อสร้างเส้นแบ่งระหว่างเลเบลและเรขาคณิต

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

expresion:

CASE 
 WHEN (label_x IS NOT NULL AND label_y IS NOT NULL) THEN
  make_line(centroid($geometry),make_point(label_x -2,label_y), make_point(label_x ,label_y))
ELSE
  NULL
END

และนี่ควรผลลัพธ์:

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


เพียงแค่ sidenote หากมีการย้ายป้ายกำกับด้วยตนเองโดยใช้แถบเครื่องมือคุณสมบัติการติดฉลากและตำแหน่งจะถูกเก็บไว้ในโครงการตัวแปร label_x, y จะเปลี่ยนเป็นเขตข้อมูลที่เรียกว่า "iliary_storage_labeling_positionx "และ"
Gabriel C.

1
การวางจุดกึ่งกลางของคุณ 2 หน่วยทางทิศตะวันตกในขณะที่คุณทำที่นี่make_point(label_x -2,label_y)จะทำให้ป้ายที่ชายฝั่งตะวันตกดูตลก นอกจากนี้การทำงานในระดับที่แตกต่างกันจะทำให้สิ่งนี้ไร้ประโยชน์ มันจะทำงานได้ดีขึ้นในการกำหนดจุดนี้เกี่ยวกับระยะห่างจากฉลากและตำแหน่งที่สัมพันธ์กันจากเซนทรอยด์
อัลเบิร์ต

2

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

การเปลี่ยนแปลงเดียวที่ฉันต้องทำคือค่า x, y ในนิพจน์ของฉัน:

CASE
   WHEN ("auxiliary_storage_labeling_positionx" IS NOT NULL AND "auxiliary_storage_labeling_positiony" IS NOT NULL) THEN
        make_line(centroid($geometry),make_point("auxiliary_storage_labeling_positionx","auxiliary_storage_labeling_positiony"))
   ELSE
      NULL
END

สำหรับผู้นำจะจัดลำดับต้นต้นไม้ symbology ดังนี้:

  • เติม
    • เครื่องกำเนิดเรขาคณิต
      • ไลน์
        • สายทำเครื่องหมาย
          • มาร์กเกอร์
            • เครื่องหมายง่าย
          • เส้นเรียบง่าย

เพื่อให้แน่ใจว่าผู้นำจะต้องจบที่ศูนย์ฉลากเพียงแก้ไขค่าในการจัดตำแหน่งข้อมูลที่กำหนดไว้ที่ป้าย 'ศูนย์กลาง' สำหรับแนวนอนและ 'ครึ่ง' สำหรับแนวตั้ง หากต้องการจัดรูปแบบเส้นตามที่คุณต้องการให้ใช้บรรทัดแบบง่าย ๆ ซ้อนอยู่ในบรรทัดเครื่องหมาย

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