Bir katmanda birden fazla ölçek için veri tanımlı etiket konumu


10

Projelerim için daha iyi bir etiketleme çözümü arıyorum. Zor görünüyor - ama belki sadece körüm?

Projelerim: Basılı bisiklet yürüyüş kitapları yapıyorum. Ana ölçek 1: 75k ve 10k şehir ölçeği ve 200k genel bakış ölçeği var. Etiket yerleşimlerinin "kartografik" kalitesine sahip olmayı sevdiğim için her etikete dokunuyorum ve en iyi konumuna taşıyorum. Bunu her bir ölçek için yapmak zorundayım, bu yüzden 3 ölçek için etiketleme sütunlarım şöyle görünüyor ('ölçek 1' 75k için 10k 'ölçek 2' ve 200k için 'ölçek 3' anlamına geliyor):

resim açıklamasını buraya girin

Ancak ayrıntılı olarak açıklamaya çalışmadan önce, (eski) etiketleme çözümümü 3 ölçek için görebileceğiniz ve test edebileceğiniz bu basit Örnek Projeyi oluşturuyorum: http://www.map-site.de/tmp/LabelingExample.zip

Çalışıyor ama:

  • Her ölçek için etiketleme sütunlarına ihtiyacınız var
  • Her ölçek için bir katmana ihtiyacınız var

Yinelenen katmanlar ve tonlarca sütun olmadan çok daha iyi bir çözüm arıyorum. Yaratıcı zihinlerinize güveniyorum!

DÜZENLEME: Bu çok yoğun haritayı örnek olarak ekledim:

resim açıklamasını buraya girin

"St. Paulus Dom" için tek bir olası pozisyon var ve herhangi bir kadran değil: resim açıklamasını buraya girin

Her etiket manuel olarak taşınmalıdır. Bazı etiketler çeyrekte değil.


Etiketlerin belirli kriterleri yerine getirmesi gerekiyor mu? "En iyi konum" ile ne demek istediğini anlamıyorum.
mgri

1
"En iyi pozisyon" ile kartografik iddialara göre bir pozisyon demek istiyorum. Daha öznel.
HARİTA

2
Örneğinizin sahip olmadığım bir yazı tipi olan 'Noto Sans' kullandığını ve başkaları için de böyle olacağını tahmin ettim. Yazı tipini buradan indirebilirsiniz. Google.com/get/noto Yazı tiplerini kurduktan sonra QGIS'i yeniden başlatmanız gerekir.
TJ Rockefeller

Bu bağlantıyı eklediğiniz için teşekkürler - Mint kurulumumun standart yazı tipi.
HARİTA

Yanıtlar:


7

İstediğiniz şeyin biraz karmaşık olduğunu söylemeliyim çünkü etiketlemenin hem küçük ölçekte hem de büyük ölçekte (en uygun) görünür olmasını istiyorsunuz. Buradaki fikir, farklı ölçeklerde görülebilen noktanın nasıl yerleştirileceğidir.

Birkaç testten sonra, her bir ölçek aralığı için birkaç sütun oluşturmak ve sabit noktalara x ve y için koordinatlar koymak yerine, aşağıda görebileceğiniz gibi, en iyi konum için her bir nokta için öncelik konumları için yalnızca bir sütun oluşturabileceğinizi gördüm (I dosyanızdaki konumları izledi):

resim açıklamasını buraya girin

Sonra, Layer propoerties -> Labels -> Placement -> Offset from pointya gidin, ya da Around pointher ikisi de iyi, ama ben seçtim Offset from point.

  1. At QuadrantSelect Data defined override -> Editve aşağıdaki formülü girin:

    resim açıklamasını buraya girin

    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
    

    Burada, "Priority"alan adında tanımlanan noktaların konumuPriority

  2. Daha iyi görünürlük için noktaları kaydırmak için ofset kullanmanız gerekir ve aşağıdaki formülü kullandım:

    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
    

İşte farklı ölçeklerde çıktı:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Her bir sayının [0-8] hangi konumda neyi temsil ettiğini görmek için lütfen aşağıdaki resme bakın:

resim açıklamasını buraya girin

Her bir konuma karşılık gelen değeri ekleyerek etiketlerin konumunu kontrol edebilirsiniz. Ancak maalesef, 'tıkla ve taşı' yaklaşımıyla yapamazsınız. Bunu nitelik tablosunda yapmanız gerekir.

Güncelleme:

9 kadran pozisyonları yeterli olmadığını da ihtiyaca binaen, ben seçerseniz bulundu Cartographyyerine Offset from point, basıp öncelik, aşağıdaki resimde olduğu gibi, Sen bir alan oluşturmak gerekir yerine 9'a 12 öncelikli konumlarını olacak Texto zaman, tip sadece en iyi 'TL', 'TSL', 'T' ... vb. için istediğiniz kısaltmayı yazınız. Ayrıca, etiketin noktayı kaplamasını önlemek için bir mesafe girebilirsiniz.

resim açıklamasını buraya girin


Şimdiye kadar denemediğim bir yaklaşım. 'Tıkla ve taşı' ile etiketi çeyreğe yerleştirmenin herhangi bir yolu var mı?
HARİTA

Ne yazık ki, 'tıkla ve taşı' yaklaşımıyla yapamazsınız. Bunu nitelik tablosunda yapmanız gerekir. Ancak her x, y ölçek düzeyi için 1 sütun eklemek 6 sütundan daha iyidir. Cevabımı güncelledim.
ahmadhanb

1
Son günlerde de bir çözüm vermeye çalıştım ama vazgeçtim çünkü sorunun daha genel bir çözüm önermek için çok öznel olduğunu düşündüm. Bunun yerine, @ahmadhanb'nin çözümü bunu yapmak için yeterince yaratıcı görünüyor (yine de test etmedim). +1 benim için.
mgri

Size katılıyorum. Buradaki öznellik yüksektir. Esas olarak, etiketlerin konumlarını uygun olup olmadıklarını nasıl değerlendirebileceğiniz konusunda kişisel bir görüştür.
ahmadhanb

1
Öncelikli konumları düzenlemek için tanımlama aracını kullanmayın, seçme aracını kullanmak daha iyidir. Özellik tablosunu açın ve yalnızca seçili noktaları göstermeyi seçin. Oturumu düzenlemeye başlayın, konumu güncelleyin ve düzenlemeleri kaydedin. İfadeyi Veri tanımlı geçersiz kılmaya önceden eklediyseniz, öncelik konumu doğrudan güncellenir.
ahmadhanb

3

İfadeleri kullanarak birden çok katmandan kurtulabilirsiniz.

Örneğinizde görebildiğim kadarıyla, katmanlar arasındaki temel fark Data defined Coordinate X Y, farklı ölçek x, y değerlerine işaret eden tanımlardır.

X ve Y'nin yanındaki açılır menüleri seçip bir ifade dizesi oluşturucu getirecek düzenle ... seçeneğini belirleyerek bunu tek bir katmanda gerçekleştirebilirsiniz.

X için şöyle bir şey kullanabilirsiniz:

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

Ve Y için şöyle bir şey kullanabilirsiniz:

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

Harita ölçeği 1: 10.000'den küçük veya ona eşitse ölçek1 x, y değerlerini ve harita ölçeği 1: 75.000'den küçük veya ona eşitse ölçek 1 x, y ve ölçek 3 x, y değerini kullanmalıdır. .

Her ölçek için manuel olarak konumlandırmanız gerekiyorsa, tanımladığınız her düzey için ölçek # -x ve ölçek # -y sütunlarından nasıl uzaklaşacağınızı göremiyorum.


Farklı ağırlıktaki etiketlerin yüksek bir kaderi var. Bunları manuel olarak yerleştirmeliyim çünkü hiçbir otomatizm 'gerçek' bir kartografik şekilde yapamaz. Haritalar her yıl basılacak ve güncellenecek, böylece etiketleme biraz statik olmalıdır. tr.wikipedia.org/wiki/Cartographic_labeling#Placement
MAP

@ HARİTA Tamam, böylece öğeleri manuel olarak konumlandırmanız gerektiğini biliyorsunuz, sadece daha az katman ve sütun istiyorsunuz.
TJ Rockefeller

1
Bu, 3 ölçek etiketinin tek bir katmanla görüntülenmesine yardımcı olur. Ancak QGIS, koordinatları ifade ile "geri yazamaz". Yani, belirttiğiniz gibi ölçek ifadesini kullanırsam, etiketleri artık taşıyamam.
HARİTA
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.