Próbuję utworzyć mapę do wydrukowania, a wielkość moich wielokątów jest bardzo różna. Ponieważ będzie to mapa odniesienia, muszę opisać każdy wielokąt, ale niektóre nazwy nie będą pasować do wielokąta. W takich przypadkach chciałbym zamiast tego użyć identyfikatora funkcji, a następnie mieć tabelę atrybutów łączącą identyfikator z nazwą.
Chciałbym mieć jakieś wyrażenie, którego mogę użyć, aby wybrać, która etykieta ma być użyta na mapie i które wiersze uwzględnić w tabeli atrybutów. Coś takiego isLabelled
mogłoby uwzględniać skalę mapy, długość etykiety, rozmiar czcionki itp.
qgis
labeling
print-composer
qgis-custom-function
Ian Turton
źródło
źródło
Odpowiedzi:
Oto nieco przybliżony (ale miejmy nadzieję skuteczny) sposób na zrobienie tego.
Najpierw trochę matematyki. Musimy dowiedzieć się, ile znaków przy określonym rozmiarze czcionki może zawierać funkcja. Oto rzeczy / założenia, które należy wiedzieć:
Aby dowiedzieć się, jak długi jest element na ekranie / wydruku, możemy użyć jego najdłuższego wymiaru (długość lub wysokość lub tylko długość, jeśli twoje etykiety są tylko poziome) / skala * 100 (aby przejść z M do CM)
Następnie możemy sprawdzić, czy nasza etykieta będzie pasować.
Można to zrobić w silniku wyrażeń, ale niestandardowe wyrażenie w języku Python byłoby bardziej wydajne. Oto samouczek, jak go utworzyć.
Moje niestandardowe wyrażenie:
Następnie użyj tego wyrażenia na etykiecie:
Musisz oczywiście podłączyć dowolny atrybut, którego faktycznie używasz, i zmienić rozmiar czcionki z 8 na cokolwiek, którego używasz. Ponadto, ponieważ czcionki różnią się nieco, być może trzeba będzie je nieco poprawić, aby wyglądało poprawnie.
Możesz także użyć tego wyrażenia, aby zmienić kolor na podstawie tego, czy etykieta pasuje, czy nie.
Aby użyć tego wyrażenia poza obszarem mapy (tj. W etykiecie kompozytora lub tabeli atrybutów), potrzebujemy sposobu, aby programowo uzyskać skalę danego elementu mapy. Umieściłem kod, aby to osiągnąć w innej odpowiedzi tutaj . Metoda daje nam wyrażenie getScale („nazwa kompozytora”, „nazwa mapy”), aby włączyć go do naszego wyrażenia:
źródło
Zduplikuj warstwę, jedną bez symboli, i ustaw różne poziomy powiększenia / ustawienia przeszkód dla etykiet dla każdej z nich.
źródło
Miałem podobną sytuację z obowiązkiem oznakowania każdej drogi warstwą drogi. Moim rozwiązaniem było utworzenie płótna w większym rozmiarze, wyeksportowanie do pliku PDF, a następnie wydrukowanie pliku PDF do wymaganego rozmiaru.
Na przykład gotowy produkt musiał mieć format A3. Na płótnie w A3 nie mogłem zmieścić wszystkich etykiet. Zrobiłem więc płótno A2, dzięki czemu wszystkie etykiety były widoczne. Utwórz plik PDF mapy formatu A2 i wydrukuj go w formacie A3.
źródło