I gamla kartor så finns det ibland kompasser utplacerade, med utsträckta linjer, som jag antar är till för att hjälpa till med navigeringen. Hur som helst, det är en effekt som man kanske vill efterlikna på en karta.
Jag löser detta med ett punktlager och en lagerstil baserad på geometrigeneratorn.
Punkterna kan vara ett minneslager, om man inte vill spara punkterna. Vilken typ av punktlager som helst fungerar dock.
Stilen jag skapar består av ett SVG-lager och en geometrigenerator.
Det kanske går att skapa en enklare geometrigenerator än vad jag gjort här, men den fungerar i alla fall.
Den skapar en linje som börjar 10’000 enheter till vänster om punkten, går åt höger, därefter upp och sedan snett ner åt vänster, och så vidare så att det skapas linjer genom punkten i åtta olika riktningar. Just 10’000 är valt baserat på den utsträckning och skala jag tänker använda, och om man skapar en karta baserad på latitud och longitud så får man välja andra enheter (exempel längre ner).
Sedan är det bara att placera ut punkter där man vill ha kompasserna och köra på…
Stilsätt bäst du vill med linjer och svg-filer. Om du inte hittar en passande kompassros i standardlådan så kan du skapa en egen eller göra om en rasterbild till svg med Inkscape och använda den (det är det jag har gjort).
För att testa även med lite mera ”globala” data så börjar jag med lite data över Västindien.
Den här kartan är oprojicerad WGS-84, så mina linjer behöver inte sträckas ut så långt. Jag har satt ”40” som värde i stället för 10’000 i geometrigeneratorn. Och bara för att jag kan så har jag lagt till en papperstextur till kartan. Det gör enormt mycket för det färdiga intrycket.
Vill jag nu ha några kompasser av de typer jag visat här så är det bara att skapa ett minneslager, placera ut några punkter och sedan tillämpa någon av mina sparade stilar på detta lager.
Kul med Geometri generator.
Jag provade at skapa linjer genom en vanlig punkt med detta uttryck.
make_line(
make_point( x($geometry) -40, y($geometry)),
make_point( x($geometry) +40, y($geometry)),
make_point( x($geometry) +40, y($geometry) +40),
make_point( x($geometry) -40, y($geometry) -40),
make_point( x($geometry), y($geometry) -40),
make_point( x($geometry), y($geometry) +40),
make_point( x($geometry) -40, y($geometry) +40),
make_point( x($geometry)+40, y($geometry) -40)
)
Men det fungerar inte som jag tänkt mig. Jag har 8 linjer som skär genom punkten men jag får också 3 linjer som går mellan 3 av linjerna. Knepigt att beskriva utan bild och jag undrar om du kanske vet varför jag får ett annat resultat?
Av uttrycket ovan så får jag en linje som går direkt mellan
x: -40, Y: +40 och
x: +40, Y: +40 samt
x:-40, Y: -40
Jag tror vi får samma resultat, det är bara det att mina ”kopplingslinjer” ligger utanför det som är synligt. Prova med ett betydligt större värde än 40, eller byt till lat long som projektion. Det går att skapa separerade linjer, men det kräver 4 geometrigeneratorer.
Ah så sant! Du har rätt, nu såg det ut som ditt exempel =), tack för hjälpen
Detta uttryck fungerade, men eftersom några av linjerna går tillbaka över sig själv när det går tillbaka till punkten så fungerar det inte att använda dashed.
make_line(
make_point( x($geometry) -40, y($geometry)),
make_point( x($geometry) +40, y($geometry)),
make_point( x($geometry) , y($geometry) ),
make_point( x($geometry) +40, y($geometry) +40),
make_point( x($geometry) -40, y($geometry) -40),
make_point( x($geometry) , y($geometry) ),
make_point( x($geometry), y($geometry) -40),
make_point( x($geometry), y($geometry) +40),
make_point( x($geometry) , y($geometry) ),
make_point( x($geometry) -40, y($geometry) +40),
make_point( x($geometry)+40, y($geometry) -40)
)