Szukam lepszego rozwiązania do etykietowania dla moich projektów. Wydaje się to trudne - ale może jestem po prostu ślepy?
Moje projekty: buduję drukowane książki rowerowe. Skala główna wynosi 1: 75k, a skala miasta wynosi 10k, a skala przeglądowa 200k. Ponieważ lubię „kartograficzną” jakość umieszczania etykiet, dotykam każdej etykiety i przesuwam ją do najlepszej pozycji. Muszę to zrobić dla każdej skali, aby moje kolumny do oznaczania 3 skal wyglądały tak („skala 1” oznacza 10k „skala 2” dla 75k i „skala 3” dla 200k):
Ale zanim spróbuję szczegółowo wyjaśnić, buduję ten prosty przykładowy projekt, w którym można zobaczyć i przetestować moje (stare) rozwiązanie do etykietowania dla 3 skal: http://www.map-site.de/tmp/LabelingExample.zip
Cóż, działa, ale:
- Potrzebujesz kolumn etykiet dla każdej skali
- Potrzebujesz warstwy dla każdej skali
Szukam znacznie lepszego rozwiązania bez zduplikowanych warstw i ton kolumn. Liczę na wasze kreatywne umysły!
EDYCJA: Dodałem tę dwie bardzo gęstą mapę jako przykłady:
Jest tylko jedna możliwa pozycja dla „St. Paulus Dom” i nie jest to żaden kwadrant:
Każda etykieta musi zostać przesunięta ręcznie. Niektóre etykiety nie są w kwadrancie.
Odpowiedzi:
Muszę powiedzieć, że to, o co prosisz, jest trochę skomplikowane, ponieważ chcesz, aby etykiety były widoczne zarówno na małą skalę, jak i na dużą skalę (najlepsze dopasowanie). Chodzi o to, aby umieścić punkt, który będzie widoczny w różnych skalach.
Po kilku testach odkryłem, że zamiast tworzyć kilka kolumn dla każdego zakresu skali i umieszczać współrzędne dla xiy w stałych punktach, możesz utworzyć tylko jedną kolumnę dla pozycji priorytetowych dla każdego punktu dla najlepszej lokalizacji, jak widać poniżej (I śledził lokalizacje w twoim pliku):
Następnie przejdź do
Layer propoerties -> Labels -> Placement -> Offset from point
lubAround point
oba są w porządku, ale ja wybrałemOffset from point
.W
Quadrant
WybierzData defined override -> Edit
i wprowadź następującą formułę:Tutaj
"Priority"
znajduje się lokalizacja punktów zdefiniowanych w nazwie polaPriority
Musisz użyć przesunięcia, aby przesunąć punkty dla lepszej widoczności, a ja użyłem następującej formuły:
Oto wynik w różnych skalach:
Aby zobaczyć, co reprezentuje każdy numer [0–8] w której lokalizacji, spójrz na następujący obraz:
Możesz kontrolować pozycję etykiet, dodając wartość odpowiadającą każdej pozycji. Niestety nie można tego zrobić za pomocą metody „kliknij i przenieś”. Musisz to zrobić w tabeli atrybutów.
Aktualizacja:
Na podstawie twojego wymogu, że 9 pozycji kwadrantu nie wystarczy, znalazłem, jeśli wybierzesz
Cartography
zamiastOffset from point
i wybierzesz priorytet, tak jak na poniższym obrazku, będziesz miał 12 pozycji priorytetowych zamiast 9. Musisz utworzyć poleText
typu, a następnie wpisz tylko odpowiedni skrót dla najlepszej pozycji „TL”, „TSL”, „T” ... itd. Możesz także wprowadzić odległość, aby etykieta nie zakryła punktu.źródło
Możesz pozbyć się wielu warstw za pomocą wyrażeń.
Z tego, co mogłem zobaczyć w twoim przykładzie, główną różnicą między warstwami są
Data defined Coordinate X Y
definicje wskazujące na różne wartości x, y skali.Możesz to zrobić na pojedynczej warstwie, wybierając listy rozwijane obok X i Y i wybierając edytuj ..., co wywoła konstruktora ciągów wyrażeń.
Do X możesz użyć czegoś takiego
A dla Y możesz użyć czegoś takiego
Powinno to używać wartości skali 1x, y, jeśli skala mapy jest mniejsza lub równa 1: 10 000 i skali 2 x, y, jeśli skala mapy jest mniejsza lub równa 1: 75 000 i skali 3 x, y dla czegokolwiek powyżej tego .
Jeśli musisz ręcznie ustawić pozycję dla każdej skali, nie widzę, jak możesz odejść od skali # -x i skali # -y dla każdego zdefiniowanego poziomu.
źródło