QGIS'te Etiketten Unsura Düz Çizgiler?


11

Ne yapmaya çalışıyorum nokta özellikleri bir dizi etiket ama nokta özellikleri yoğunluğu nedeniyle etiketleri nokta özellikleri uzak taşımak zorunda kalacak. Daha sonra hangi etiketin hangi noktaya atıfta bulunduğunu göstermek için basit bir düz çizgi (ok değil) kullanmak istiyorum.

Etiketleri oluşturmak ve bunları istediğim yere taşımak için “Kolay Özel Etiketler” eklentisini kullandım. Ama yapamadığım nokta ve masa arasında basit bir ince düz çizgi oluşturmak.

Elde ettiğim en iyi şey, "simge katmanı türünü" (Etiketler katmanı> Özellikler> Stil) "ok" olarak değiştirmek, "eğri oklar" işaretini kaldırmak ve "her segmentte tekrar oku" işaretini kaldırmaktır. Ve sonra kafa uzunluğunu ve kalınlığını 0 yapın ve “başlangıçta“ ok genişliği ”ve“ başlangıçta ok genişliği ”ni mümkün olduğunca yapın. Ama bu hala tıknaz bir çizgi yaratıyor. Bkz. Resim A.

"Sembol daha sonra türü" ayarını "basit çizgi" olarak ayarlamayı denedim, ancak bu, bükülmeler / köşeler / köşeler içeren çizgilerle sonuçlanıyor. Bkz. Resim B.

İdeal olarak, etiketler ve özellik (resim A'daki gibi) arasında resim B'deki genişliğe benzer düz çizgiler istiyorum.

İki tür etiketleme örneği

Yanıtlar:


11

Etiket ve geometri arasında çizgi oluşturmak için bir ifade kullanabilirsiniz.

resim açıklamasını buraya girin

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

Ve sonuç şu olmalıdır:

resim açıklamasını buraya girin


Sadece bir sidenote, etiketler etiketleme özellikleri araç çubuğu kullanılarak manuel olarak taşınır ve projede konum saklanırsa, label_x, y değişkenleri "auxiliary_storage_labeling_positionx" ve "auxiliary_storage_labeling_positiony" olarak adlandırılan alanlara dönüşür.
Gabriel C.

2
Orta noktanızı burada yaptığınız gibi batıya 2 birim yerleştirmek make_point(label_x -2,label_y), batı sahilindeki etiketleri komik gösterecektir. Ayrıca, farklı bir ölçekte çalışmak bunu işe yaramaz hale getirecektir. Bu noktayı etiketinize olan uzaklık ve sentroidinizden göreli konumla ilişkili olarak ayarlamak daha iyi çalışır.
Albert

2

Carlos'un cevabı, geometri üretecinde sadece bir daha az nokta düz çizgiler vermesine rağmen, etiket ucunda yatay olarak hizalanmış bir lider yapar. Örneğimde, QGIS 3.0.3'teki etiketleme araç çubuğunu kullanarak etiketleri manuel olarak taşıdım. Tekniğin 232709 numaralı soruda bulunabileceğini unutmayın .

Yapmam gereken tek değişiklik ifademdeki x, y değerleridir:

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

Lider çizgilerin kendilerine gelince, semboloji ağacı şöyle gider:

  • dolgu
    • Geometri üreteci
      • Hat
        • İşaret çizgisi
          • İşaretleyici
            • Basit işaretleyici
          • Basit çizgi

Liderlerin etiket merkezinde sona ermesini sağlamak için, etiketlerin veri tanımlı hizalamasını yatay için 'Merkez' ve dikey için 'Yarı' olarak düzenleyin. Çizgiyi ihtiyacınız olana göre şekillendirmek için işaretçi çizgisinde iç içe olan basit çizgiyi kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.