Kiedy punkty się pokrywają, istnieje ta właściwość, która pozwala automatycznie wyświetlić wiele z nich osobno wokół ich miejsca, zwana „przesunięciem punktu”. Ale to nie działa dla linii, mimo to wydaje mi się całkiem wykonalne koncepcyjnie, aby osiągnąć coś takiego:
Absolutnie muszę zobaczyć różne linie, które w rzeczywistości wszystkie są w tym samym miejscu (pracuję w sieciach telekomunikacyjnych). Jedyny sposób, jaki widzę na razie, to naprawdę tworzenie różnych linii, jak na powyższym obrazku, co powoduje błędy przestrzenne.
Używam QGIS 2.14.
qgis
symbology
style
visualisation
qgis-custom-function
GuiOm Clair
źródło
źródło
Odpowiedzi:
Proponuję podejście, które powtarza się tylko w przypadku generatora geometrii i funkcji niestandardowej.
Przed rozpoczęciem chcę podkreślić, że skupię uwagę na wyjaśnieniu minimalnych czynności, które należy wykonać, aby odtworzyć pożądany rezultat: oznacza to, że niektóre inne drobne parametry (takie jak rozmiary, szerokości itp.) Powinny być łatwo dostosowane przez ciebie dla lepszego dopasowania do twoich potrzeb.
Dlatego to rozwiązanie działa zarówno dla Geograficznego, jak i Projekcyjnego Systemu Referencyjnego: poniżej założyłem, że użyję rzutowanego CRS (tj. Jednostki miary to metry), ale możesz je zmienić zgodnie ze swoim CRS.
Kontekst
Załóżmy, że zaczniemy od tej wektorowej warstwy linii przedstawiającej przewody (etykiety reprezentują liczbę nakładających się (zbieżnych) drutów):
Rozwiązanie
Najpierw przejdź do,
Layer Properties | Style
a następnie wybierzSingle symbol
renderer.W
Symbol selector
oknie dialogowym wybierzGeometry generator
typ warstwy symbolu iLinestring / MultiLinestring
typ geometrii. Następnie kliknijFunction Editor
kartę:Następnie kliknij
New file
i wpiszdraw_wires
jako nazwę nowej funkcji:Zobaczysz, że nowa funkcja została utworzona i jest wymieniona po lewej stronie okna dialogowego. Teraz kliknij nazwę funkcji i zastąp domyślną
@qgsfunction
następującym kodem (nie zapomnij dodać wszystkich dołączonych tutaj bibliotek):Gdy to zrobisz, kliknij
Load
przycisk, a będziesz mógł zobaczyć funkcję zCustom
menuExpression
okna dialogowego.Teraz wpisz to wyrażenie (patrz obrazek poniżej jako odniesienie):
Właśnie uruchomiłeś funkcję, która w wyobrażony sposób mówi:
Jedyną rzeczą, którą musisz zmienić, jest wartość pierwszych dwóch parametrów, jak chcesz, ale oczywiście w rozsądny sposób (pozostaw pozostałe parametry funkcji, jak podano).
Na koniec kliknij
Apply
przycisk, aby zastosować zmiany.Zobaczysz coś takiego:
zgodnie z oczekiwaniami.
EDYTOWAĆ
Zgodnie ze szczególnym żądaniem zgłoszonym przez PO w komentarzu:
Lekko zredagowałem kod. Następująca funkcja powinna zwrócić oczekiwany wynik:
źródło
layer=iface.activeLayer()
a następnieprint layer.wkbType()
. KliknijRun
: jaka jest wartość wydrukowanego numeru?