Jak w QGIS 2.12.2 mogę skonfigurować etykietowanie warstw, aby uniknąć umieszczania etykiet tam, gdzie już istnieją elementy z innej warstwy?
Na przykład, jeśli mam warstwę polilinii strumienia / rzeki , która zawiera „ linie środkowe” jeziora, i umieszczam nad nią warstwę wielokąta „jeziornego” w kolejności rysowania, nie chcę, aby warstwa rzeki umieszczała etykietę wewnątrz jeziora . Zamiast tego wolałbym, aby rzeka była oznakowana poza jeziorem (w razie potrzeby). W ten sposób mogę umieszczać etykiety z warstwy jezior i nie wpadam na kolizje etykiet.
Oto przykład, w którym (celowo umieściłem linie na wierzchu w celach wizualnych), mam nadzieję, że nie uda mi się znaleźć żadnych etykiet linii środkowej rzeki wewnątrz wielokąta jeziora:
Odpowiedzi:
Automatyczne etykietowanie jest naprawdę trudnym problemem, ale geometria elementów nie jest taka zła.
Nawet jeśli staż zapewni ci odpowiednią pracę przez większość czasu, prawdopodobnie będą wyjątki. Niektóre z nich zauważysz i być może uda ci się je rozwiązać. Inne, których nie zauważysz podczas tworzenia dużej mapy lub zestawu kafelków, ponieważ nie możesz przelać każdego calu mapy w różnych skalach. Prawie zawsze będziesz miał ochotę ręcznie przenieść niektóre automatycznie umieszczone etykiety, z perspektywy kartograficznej.
Jak zasugerowałem w moim komentarzu, ułatwiłbym problem silnikowi etykietowania. W tym przypadku zrobiłbym to, definiując moje rzeki jako widok tabeli *, z geometriami rzek przyciętymi w celu przestrzegania granic jezior. W ten sposób w jeziorach nie ma cech rzek do oznakowania, ani kolizji etykiet.
* Zakładam, że tutaj używam RDBMS, takiego jak PostgreSQL / PostGIS, dla wygody i możliwości aktualizacji tylko wiarygodnego źródła danych, a widok działa bez interwencji użytkownika. Ale możesz też trochę popracować z plikami statycznymi, aby przycinać i usuwać obiekty, ale nie polecam tego, jeśli kiedykolwiek planujesz odwiedzić mapę.
Przykład:
Począwszy od dwóch plików kształtów (mogą to być tabele bazy danych) rzek i jezior, z rzekami przecinającymi jeziora i powodującymi problemy z etykietowaniem, które trudno rozwiązać całkowicie i pewnie:
Wprowadź je do Postgres, jeśli potrzebujesz z shp2pgsql :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
Następnie zdefiniuj widok za pomocą ST_Difference :
Dodaj widok do swojego układu:
Chociaż problem w moim przykładzie jest celowo sfabrykowany, style w dwóch warstwach rzeki (oryginał i widok) są takie same i są umieszczane nad jeziorem w kolejności rysowania. Po zaktualizowaniu geometrii jezior lub rzek nie musisz robić nic więcej niż odświeżać rendering.
źródło
W QGIS> = 2.12 można ustawić warstwę wielokąta „jeziornego” jako przeszkodę na etykiecie. Odbywa się to poprzez właściwości warstwy warstwy „jeziornej” w sekcji „Etykiety”. Zmień pole kombi u góry z „ Brak etykiet ” na „ Odradzaj innym etykietom zakrywanie obiektów na tej warstwie ”.
źródło
Uważam, że etykietowanie jest ogólnie dość trudne, przynajmniej w celu wygenerowania etykiet, które zadowolą zmysły mojego kartografa. Chociaż funkcja automatycznego etykietowania działa dobrze przez 80% czasu, zdarzają się przypadki takie jak problem z etykietowaniem rzeki / jeziora, w którym nie generuje ładnego etykietowania. Automatyczne etykietowanie jest często powiązane z geometrią elementu, np. Ile części jest w linii, tak aby na początku wszystkie części były etykietowane. Oczywiście QGIS ma środki zapobiegające wielokrotnemu etykietowaniu, które zależy również od skali bieżącego widoku mapy.
W każdym razie moja wskazówka nie jest szybkim rozwiązaniem. Często tworzę specjalną warstwę tylko do etykietowania, aby łatwiej kontrolować moje etykiety. I często geometria elementów do reprezentacji kartograficznej może kolidować z dobrą geometrią do etykietowania. Proponuję więc stworzyć nową warstwę, w której strumienie nie przecinają jezior, aby można było całkowicie obejść problem. Posiadanie dodatkowej warstwy etykietowania może również pomóc w zapobieganiu problemom, w których kierunek etykietowania nie jest zgodny z zamierzonym, ponieważ jest związany z tym, jak utworzono geometrię.
Cóż, obawiam się, że moja wskazówka nie jest tym, czego się spodziewałeś, ale mam nadzieję, że moje alternatywne podejście pomoże ci jakoś.
źródło
dostępna jest wtyczka o nazwie „ Maska ”, której można używać do filtrowania etykiet opartych na wielokątach.
Jak wspomniano w moim poprzednim komentarzu, byłoby jednak znacznie łatwiej, gdybyś mógł rozdzielić swoje linie na przecięciu z jeziorami (zobacz inne metody tutaj ). Następnie możesz zdefiniować etykietę o zerowym rozmiarze dla segmentów znajdujących się w obrębie jezior („Warstwa”> „Etykietowanie”> „Ustawienia danych zdefiniowanych”> „Rozmiar”, a następnie wybierz kolumnę, w której przechowujesz rozmiar etykiety). Podział zachowuje większość właściwości sieci rzecznej i jest odwracalny po rozpuszczeniu, dzięki czemu możesz kontynuować pracę z pojedynczą warstwą (w razie potrzeby zapisz całkowitą długość w określonej tabeli atrybutów).
źródło