ข้อมูลฉลากตำแหน่งที่กำหนดไว้สำหรับสเกลมากกว่าหนึ่งในหนึ่งเลเยอร์


10

ฉันกำลังมองหาโซลูชันการติดฉลากที่ดีขึ้นสำหรับโครงการของฉัน ดูเหมือนจะเป็นเรื่องยาก - แต่บางทีฉันแค่ตาบอด

โครงการของฉัน: ฉันสร้างหนังสือจักรยาน - ธุดงค์ มาตราส่วนหลักคือ 1: 75k และมีระดับเมือง 10k และมาตราส่วนภาพรวม 200k เพราะฉันชอบที่จะมีตำแหน่งป้ายกำกับ "ที่เกี่ยวกับการทำแผนที่" ฉันจึงแตะที่ทุกป้ายกำกับและย้ายไปยังตำแหน่งที่ดีที่สุด ฉันต้องทำเช่นนี้กับทุกสเกลเดียวดังนั้นคอลัมน์การติดฉลากของฉันสำหรับ 3 สเกลจะมีลักษณะดังนี้ ('สเกล 1' ย่อมาจาก 10k 'สเกล 2' สำหรับ 75k และ 'สเกล 3' สำหรับ 200k):

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

แต่ก่อนที่ฉันจะพยายามอธิบายรายละเอียดฉันสร้างตัวอย่างโครงการง่ายๆที่คุณสามารถดูและทดสอบโซลูชันการทำฉลาก (เก่า) ของฉันสำหรับเครื่องชั่ง 3 เครื่อง: http://www.map-site.de/tmp/LabelingExample.zip

มันทำงานได้ แต่:

  • คุณต้องติดฉลากคอลัมน์สำหรับเครื่องชั่งทุกเครื่อง
  • คุณต้องการเลเยอร์สำหรับทุกสเกล

ฉันกำลังมองหาทางออกที่ดีกว่าโดยไม่มีเลเยอร์และคอลัมน์ที่ซ้ำกัน ฉันเชื่อในความคิดสร้างสรรค์ของคุณ!

แก้ไข: ฉันได้เพิ่มแผนที่ที่มีความหนาแน่นสูงทั้งสองนี้เป็นตัวอย่าง:

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

มีเพียงตำแหน่งเดียวที่เป็นไปได้เพียงอย่างเดียวสำหรับ "St. Paulus Dom" และไม่ใช่ตำแหน่งใด ป้อนคำอธิบายรูปภาพที่นี่

ต้องย้ายป้ายกำกับทุกป้ายด้วยตนเอง ฉลากบางรายการไม่อยู่ในเสี้ยวเดียว


ป้ายกำกับต้องผ่านเกณฑ์เฉพาะหรือไม่ ฉันไม่เข้าใจความหมายของคุณใน "ตำแหน่งที่ดีที่สุด"
mgri

1
ด้วย "ตำแหน่งที่ดีที่สุด" ฉันหมายถึงตำแหน่งตามการอ้างสิทธิ์แบบแผนที่ มันเป็นเรื่องส่วนตัวมากกว่า
แผนที่

2
ฉันพบว่าตัวอย่างของคุณใช้แบบอักษร 'Noto Sans' ที่ฉันไม่มีและฉันเดาว่าจะเป็นกรณีสำหรับคนอื่นด้วย คุณสามารถดาวน์โหลดแบบอักษรได้ที่นี่google.com/get/notoหลังจากติดตั้งแบบอักษรคุณจะต้องเริ่ม QGIS ใหม่
TJ Rockefeller

ขอบคุณที่เพิ่มลิงค์นั้น - เป็นฟอนต์มาตรฐานของการติดตั้ง Mint ของฉัน
แผนที่

คำตอบ:


7

ฉันต้องบอกว่าสิ่งที่คุณขอมีความซับซ้อนเล็กน้อยเพราะคุณต้องการให้การติดฉลากสามารถมองเห็นได้ในขนาดเล็กอย่างชัดเจนเช่นเดียวกับในขนาดใหญ่ (พอดีที่สุด) ดังนั้นความคิดที่นี่คือวิธีการวางจุดที่สามารถมองเห็นได้ในระดับที่แตกต่างกัน

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

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

จากนั้นคุณจะไปLayer propoerties -> Labels -> Placement -> Offset from pointหรือAround pointทั้งสอง OK Offset from pointแต่ผมเลือก

  1. ที่QuadrantเลือกData defined override -> Editและป้อนสูตรต่อไปนี้:

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

    CASE 
    WHEN  $scale >= 200000 THEN  "priority"  
    WHEN  $scale < 200000 and $scale >= 75000 THEN  "priority"   
    WHEN  $scale < 75000 and $scale >=10000 THEN  5
    WHEN  $scale < 10000 THEN 2 
    END
    

    นี่"Priority"คือที่ตั้งของจุดที่กำหนดไว้ในชื่อฟิลด์Priority

  2. คุณต้องใช้ออฟเซ็ตเพื่อเลื่อนจุดเพื่อการมองเห็นที่ดีขึ้นและฉันใช้สูตรต่อไปนี้:

    CASE
    WHEN  $scale >= 200000 THEN '0.001,0'
    WHEN  $scale < 200000 and $scale >= 75000 THEN '0.001,0'
    WHEN  $scale < 75000 and $scale >=10000 THEN '0.0005,0'
    WHEN  $scale < 10000 THEN '0.0001,0'
    END
    

นี่คือผลลัพธ์ในระดับต่างๆ:

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

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

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

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

เพื่อดูว่าแต่ละหมายเลข [0-8] หมายถึงตำแหน่งใดโปรดดูภาพต่อไปนี้:

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

คุณสามารถควบคุมตำแหน่งของฉลากได้โดยการเพิ่มค่าที่สอดคล้องกับแต่ละตำแหน่ง แต่น่าเสียดายที่คุณไม่สามารถทำได้ด้วยวิธี 'คลิกแล้วย้าย' คุณต้องทำในตารางแอตทริบิวต์

ปรับปรุง:

ตามความต้องการของคุณที่ตำแหน่ง Quadrant ไม่เพียงพอฉันพบว่าคุณเลือกCartographyแทนOffset from pointและเลือกลำดับความสำคัญตามภาพด้านล่างคุณจะมี 12 ลำดับความสำคัญแทน 9 คุณต้องสร้างเขตข้อมูลจากTextนั้น ใส่เฉพาะตัวย่อที่คุณต้องการสำหรับตำแหน่งที่ดีที่สุด 'TL', 'TSL', 'T' ... ฯลฯ นอกจากนี้คุณสามารถป้อนระยะทางเพื่อหลีกเลี่ยงฉลากจากจุดที่ครอบคลุม

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


นั่นเป็นวิธีที่ฉันไม่ได้ลองมาจนถึงตอนนี้ คุณเห็นทางใดทางหนึ่งในการวางป้ายกำกับในควอแดรนท์โดย 'คลิกแล้วย้าย'
แผนที่

น่าเสียดายที่คุณไม่สามารถทำได้ด้วยวิธี 'คลิกแล้วย้าย' คุณต้องทำในตารางแอตทริบิวต์ แต่การเพิ่ม 1 คอลัมน์จะดีกว่า 6 คอลัมน์สำหรับแต่ละระดับ x, y ฉันปรับปรุงคำตอบของฉัน
ahmadhanb

1
ในวันสุดท้ายฉันก็พยายามให้ทางออก แต่ฉันก็ยอมแพ้เพราะฉันคิดว่าปัญหานั้นเป็นเรื่องส่วนตัวเกินไปที่จะเสนอวิธีแก้ปัญหาที่กว้างกว่า แต่โซลูชั่นของ @ahmadhanb ดูเหมือนจะสร้างสรรค์เพียงพอสำหรับการทำ (แต่ฉันไม่ได้ทดสอบ) +1 สำหรับฉัน
mgri

ฉันเห็นด้วยกับคุณ. ผู้กระทำที่นี่สูง มันเป็นความเห็นส่วนตัวเกี่ยวกับวิธีที่คุณสามารถตัดสินตำแหน่งของฉลากได้ว่าเหมาะสมหรือไม่
ahmadhanb

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

3

คุณสามารถกำจัดหลายเลเยอร์โดยใช้นิพจน์

จากสิ่งที่ฉันเห็นในตัวอย่างของคุณความแตกต่างหลักระหว่างเลเยอร์คือData defined Coordinate X Yคำจำกัดความที่ชี้ไปยังค่า x, y ที่แตกต่างกัน

คุณสามารถทำได้ในเลเยอร์เดียวโดยการเลือกดรอปดาวน์ถัดจาก X และ Y และเลือกแก้ไข ... ซึ่งจะทำให้ตัวสร้างสตริงการแสดงออก

สำหรับ X คุณสามารถใช้สิ่งที่ต้องการ

if(@map_scale <=10000, "scale1-x", if(@map_scale <=75000, "scale2-x", "scale3-x"))

และสำหรับ Y คุณสามารถใช้สิ่งที่ชอบ

if(@map_scale <=10000,  "scale1-y" , if(@map_scale <=75000, "scale2-y", "scale3-y"))

สิ่งนี้ควรใช้ค่า scale1 x, y หากมาตราส่วนแผนที่มีค่าน้อยกว่าหรือเท่ากับ 1: 10,000 และมาตราส่วน 2 x, y ถ้ามาตราส่วนแผนที่มีค่าน้อยกว่าหรือเท่ากับ 1: 75,000 และมาตราส่วน 3 x, y สำหรับทุกสิ่งที่เหนือกว่านั้น .

หากคุณต้องจัดตำแหน่งด้วยตนเองสำหรับแต่ละสเกลฉันไม่เห็นวิธีที่คุณสามารถหลีกเลี่ยงคอลัมน์สเกล # -x และสเกล # -y สำหรับแต่ละระดับที่คุณกำหนดไว้


ฉันมีโชคชะตาสูงของฉลากที่มีน้ำหนักแตกต่างกัน ฉันต้องวางพวกเขาด้วยตนเองเนื่องจากไม่มีระบบอัตโนมัติสามารถทำได้ในลักษณะการทำแผนที่ 'ของจริง' และแผนที่จะพิมพ์และอัพเดททุกปีดังนั้นการติดฉลากจะต้องค่อนข้างคงที่ en.wikipedia.org/wiki/Cartographic_labeling#Placement
MAP

@MAP ตกลงเพื่อให้คุณรู้ว่าคุณต้องจัดตำแหน่งรายการด้วยตนเองคุณต้องการเลเยอร์และคอลัมน์น้อยลง
TJ Rockefeller

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