Aussehen und Darstellung
In diesem Kapitel zeige ich Ihnen, wie Sie die Leaflet-Karte gestalten. Am Ende wissen Sie, wie Sie Ihre eigene Ansicht erstellen und auf ihrer Website nutzen.
Last updated
Was this helpful?
In diesem Kapitel zeige ich Ihnen, wie Sie die Leaflet-Karte gestalten. Am Ende wissen Sie, wie Sie Ihre eigene Ansicht erstellen und auf ihrer Website nutzen.
Last updated
Was this helpful?
Um sicherzustellen, dass die Karte das ganze Browserfenster ausfüllt, nutzen Sie am besten CSS. Setzen Sie hier die Höhe und die Weite des Kartenelements div
auf 100 %. Außerdem ist es erforderlich, dass das body
-Element und das html
-Element mit 100 % angezeigt werde.
Standardmäßig reicht dies alleine leider nicht immer aus, weil Browser unterschiedliche Werte für Abstände verwenden. Wenn Sie eine Bildlaufleiste sehen, nachdem Sie die Höhe und die Breite von body
, html
und div
des Kartenelements auf 100 % gesetzt haben, dann ist es erforderlich, diese Standardabstände zu überschreiben.body {
Mit diesen CSS-Eigenschaften passt sich die Karte immer automatisch an die Größe des Browserfensters an. Falls Sie dies nicht wünschen, dann setzten Sie die Leaflet-Eigenschaft auf false
. Standardmäßig ist diese mit true
belegt. Mit gleich false
bleibt die Karte an einer Position fixiert.
In Version 1.6.0 verwendet Leaflet standardmäßig folgende Stile.
Der im obigen Codebeispiel hinzugefügte Tooltip wird mit diesen Stilen wie folgt gezeichnet:
Falls Ihnen das Standardlayout nicht gefällt, dann nutzen Sie eigenes CSS. Damit überschreiben Sie die Standardeigenschaften. Sie können zum Beispiel folgendes CSS nutzen:
Wie der Tooltip mit diesen Eigenschaften dargestellt wird, zeigt das nächste Bild. Wie erwartet ist der Hintergrund nun rot und die Pfeilspitze ist verschwunden.
Jeden Punkt auf der Erde markieren Sie mit einem Popup und/oder einem Marker, um ihn zu kennzeichnen. Den Beschreibungstext im Popup verschönern Sie mit HTML und CSS. Das nächste Beispiel zeigt, wie Sie ein Bild zusammen mit anderen HTML-Elementen in einem Popup anzeigen.
Wie das Popup auf der Karte angezeigt wird, zeigt das nächste Bild.
Der Inhalt des Popup ist per Inline-Styles veränderbar.
Mit dem vorhergehenden CSS-Inline-Style wird die Frage rot gefärbt.
Inline-Styles führen zu Problemen, wenn die Karte komplexer wird. Der Code wird schwerer lesbar. Deshalb ist es eine Regel, das Aussehen vom Inhalt zu trennen. Wie das mithilfe von CSS-Klassen umgesetzt wird, zeigt das nächste Beispiel.
Der Code ist anders, das Ergebnis ist das Gleiche.
Ein Path-Objekt erstellen Sie nie direkt. Die Vektor Ebenen erben von der Klasse Path.
Wenn Sie eine Vektorebene gestalten, haben Sie in Leaflet Version 1.0.6 die Auswahl zwischen folgenden Optionen.
Option
Beschreibung
Gibt an, ob ein Strich entlang des Pfads gezeichnet wird. Setzen Sie diesen Wert auf false
, um Rahmen für Polygone oder Kreise zu deaktivieren. Standardmäßig ist die Option mit true
belegt.
Strichfarbe
Strichbreite in Pixel
Strichdeckkraft
Ein String, der die Form definiert, die am Ende des Strichs verwendet wird.
Ein String, der die Form definiert, die an den Ecken des Strichs verwendet wird.
Ein String, der das Strichmuster definiert.
Ein String, der den Abstand zum Strichmuster zum Starten des Strichs definiert.
Bestimmt, ob der Pfad mit Farbe gefüllt werden soll. Setzen Sie diesen Wert auf false
, um das Ausfüllen von Polygonen oder Kreisen zu deaktivieren.
Füllfarbe
Deckkraft der Füllung.
Ein String, der das Innere einer Form bestimmt.
Wenn true
, löst ein Mausereignis auf diesem Pfad dasselbe Ereignis auf der Karte aus (sofern nicht L.DomEvent.stopPropagation verwendet wird).
Verwenden Sie diesen Renderer für diesen Pfad. Hat Vorrang vor dem Standardrenderer der Karte.
Der für ein Element festgelegte benutzerdefinierte Klassenname. Nur für SVG-Renderer.
Im nächsten Kapitel sehen wir uns einige dieser Optionen genauer an.
Option
Beschreibung
smoothFactor
Wie vereinfacht sich die Polylinie in jeder Zoomstufe? Ein höherer Wert steht für bessere Performance und glatteres Aussehen, und ein geringer Wert bewirkt eine genauere Darstellung.
noClip
Deaktivieren Sie das Abschneiden von Polylinien.
Die Eigenschaften, die die Polyline von Path erbt, hatte ich im vorhergehenden Kapitel aufgelistet.
Die Linie, die wir im Beispiel nutzen, ist grün, 10 Pixel breit und hat eine Deckkraft von 80 %. Wir haben den Äquator grün gezeichnet! Nachfolgend füge ich zuerst den relevanten Programmcode ein und danach die Abbildung des Beispiels auf meinem Computer. Zeichen Sie selbst ein paar Linien – bitte komplexere. Spielen Sie mit den Optionen herum. Meiner Meinung nach lernt man so am meisten und kommt nebenbei auf neue Ideen.
Eine gestrichelte Linie zeichnen Sie unter Zuhilfenahme der Option dashArray
. Diese Option erbt die Polyline von der Klasse Path.
Die Option dashArray
nimmt, anderes als der Name vermuten lässt, einen String entgegen – eine kommagetrennte Zahlenreihe innerhalb von doppelten oder einfachen Anführungszeichen.
Die erste Zahl steht für die Länge des ersten Striches in Pixeln. Die zweite Zahl ist der Wert für die erste Lücke in Pixeln.
Im Beispiel ist dashArray
mit ‘30, 15, 5, 15‘
belegt. Dies ist ein komplizierteres Muster. Der erste Strich ist 30 Pixel und die erste Lücke 15 Pixel lang. Danach folgt ein 5 Pixel langer Strich gefolgt von einer 15 Pixel langen Lücke. Dies wiederholt sich dann solange, bis die Polyline fertig gezeichnet ist.
Zeichnen wir als Nächstes diese gestrichelte Linie und fügen diese zur Karte hinzu!
Das Beispiel lässt sich schnell verändern. Probieren Sie aus, wie die Linie mit unterschiedlichen Mustern aussieht. Es keine besser Methode, um ein Gefühl für das Zeichnen von gestrichelten Linie zu bekommen. Was passiert, wenn Sie eine ungerade Zahl an Werten in der Option dashArray eintragen?
Das Icon fügen Sie zum Marker hinzu. Falls kein spezielles Icon beim Erstellen des Markers angegeben wird, wählt Leaflet automatisch das Standardicon.
Wichtig ist es beim Marker Bild einen alternativen Text mit der Option alt
anzugeben. Dieser wird angezeigt, wenn die Bilddatei des Icons nicht gefunden wird oder wenn ein Screenreader den Inhalt der Website vorliest.
Wenn Leaflet einen Marker auf einer Karte anzeigt, werden gleich zwei Bilddateien angezeigt.
Zunächst wird das eigentliche Bild an die passende Stelle auf die Karte gelegt.
Danach wird ein Schatten zu diesem Bild hinzugefügt. Mit einem passenden Schatten fallen die Marker eher ins Auge. Der Schatten verleiht einem Marker eine Tiefe. So hebt dieser sich besser von der Karte ab.
Im nachfolgenden Beispiel sehen Sie den Text, der für die Anzeige des benutzerdefinierten Markers verantwortlich ist.
Sehen wir uns diese Zeilen genau an: Zunächst einmal sticht die Instanziierung des Bildes hervor.
Die Bedeutung der einzelnen Optionen habe ich in der nachfolgenden Abbildung veranschaulicht. Aber zunächst einmal sehen wir uns das Problem genauer an:
Die Schwierigkeit beim Positionieren des Bildes liegt darin, die Position des Icons mit der Stelle auf der Erde, die markiert werden soll, zu verbinden. Das Bild ist in der Regel größer als der zu markierende Punkt. Außerdem enthält das Bild oft eine Art Pfeil, dessen Spitze auf den zu markierenden Punkt zeigen sollte. Zudem gibt es meist noch ein Popup, das relativ zum Bild geöffnet werden sollte. Wie also nutzen Sie die Optionen, um das Bild an der passende Stelle auf der Karte anzuzeigen?
Sie können mit der Option iconSize: [38, 95]
die Größe des Bildes mitgeben. Mit der Option shadowSize: [50, 64]
können Sie die Größe des Schattens beeinflussen. Wenn Sie die Werte für diese Optionen nicht setzten, wird die Originalgröße des Images verwendet.
Die Option iconAnchor: [22, 94]
gibt Ihnen nun die Möglichkeit, die Stelle, an der das Bild in die Karte eingefügt werden soll, zu definieren. Ohne ein Setzen dieser Option, würde die linke obere Ecke des Bildes an der Stelle, die markiert werden soll, beginnen. In der Regel ist es aber so, dass man das Bild mittig oder vielleicht sogar über dieser Stelle einfügen möchte. iconAnchor: [22, 94]
fügt das Bild 22 Pixel weiter links und 94 Pixel oberhalb der zu markierenden Stelle ein. Das hört sicher kompliziert an, oder?
Ein Bild sagt oft mehr als 1000 Worte: Wenn Sie sich die nachfolgende Abbildung ansehen, wird dies klarer. Der rote Punkt stellt in der Abbildung die zu markierende Stelle dar. Für die Option shadowAnchor: [4, 62]
gilt das gleiche wie für iconAnchor
. Das Schattenbild wird 4 Pixel links und 76 Pixel oberhalb des roten Punktes, also der zu markierenden Stelle, eingefügt. Die Belegung der Wert in der Option popupAnchor: [-3, -76]
ist meiner Meinung nach etwas verwirrend, weil im Gegensatz zu den anderen Optionen für die gleiche Wirkung ein Minuszeichen vorangestellt werden muss. Wenn Sie das Popup Fenster links obenhalb der zu markierenden Position öffnen möchten, müssen Sie bei der Option popupAnchor
also ein Minuszeichen voran stellen!
iconUrl:
Die iconUrl
müssen Sie auf alle Fälle angeben.
Diese Option muss die Adresse zur Bilddatei enthalten – absolut oder relativ zu
dem Verzeichnis, in dem Ihr Skript gespeichert ist.
iconRetinaUrl:
Die iconRetinaUrl
bietet Ihnen optional die Möglichkeit,
die Adresse einer für Retina Bildschirme optimierten Version des Bildes –
absolut oder relativ zu dem Verzeichnis, in dem Ihr Skript gespeichert ist –
anzugeben. Wie Leaflet dieses Bild genau optimiert,
erkläre ich Ihnen im Anschluss an die Auflistung dieser Optionen.
iconSize:
Die optionale iconSize
beeinflusst die Größe, mit der das Bild angezeigt wird.
IconAnchor:
Die Option IconAnchor
beschreibt die Pixelkoordinate, an der das Bild eingefügt werden soll. Die Koordinate gibt die Pixelwerte relativ zu der Stelle an, die markiert werden soll.
Achtung, verwechseln Sie die Pixel-Koordinat nicht mit der geografischen Koordinate.
PopupAnchor:
Die Option PopupAnchor
beschreibt den Punkte, an dem ein Popup Fenster geöffent werden soll. Die Koordinate gibt die Pixelwerte relativ zu der Stelle an, die markiert werden soll. Wenn Sie das Pop-up Fenster links obenhalb der zu markierenden Position öffnen möchten, müssen Sie bei den Werten der Option popupAnchor
ein Minuszeichen voran stellen! Sind die Werte positiv, öffnet sich das Pop-up rechts unterhalb zu markierenden Position.
ShadowUrl:
Die Option ShadowUrl
enthält die Adresse zur Imagedatei, die den Schatten darstellen soll. Wenn nichts angegeben ist, wird kein Schattenbild erstellt.
ShadowRetinaUrl:
Mit der Option ShadowRetinaUrl
können Sie ein Bild angeben, dass speziell für Retina Displays optimiert ist. Wie Leaflet dieses Bild genau optimiert, erkläre ich Ihnen im Anschluss an die Auflistung dieser Optionen.
shadowSize:
shadowSize
beschreibt die Höhe und Breite des Bildes, dass den Schatten darstellen soll, in Pixeln.
shadowAnchor:
Die Pixel Koordinaten an der das Schattenbild eingefügt werden soll,
können Sie mit der Option ShadowAnchor
übergeben.
Ansonsten gilt für diese Option das gleiche, was ich bei der Option iconAnchor
geschrieben habe.
className:
Mit der Option className
können Sie für beide Bilder - also dem Schattenbild und dem eigentlichen Marker Bild -
den Namen einer CSS-Klasse definieren.
So, nun haben Sie einen benutzerdefinierten Marker erstellt und möchten weitere Marker kreiere. Schön, dass Leaflet objektorientiertes Arbeiten unterstützt. So können Sie sich das Erstellen von neuen Marker Objekten sehr einfach machen. Erweitern Sie einfach die Klasse L.Icon
und geben alle gemeinsamen Eigenschaften hier einmal an. Ausschließlich die besonderen Eigenschaften des Markers müssen Sie separat für jeden Marker angeben. Das nachfolgende Codebeispiel zeigt Ihnen, wie Sie drei unterschiedliche Marker, die ein paar gemeinsame Eigenschaften haben, mithilfe von einer Eltern-Klasse erstellen können. So können die drei Marker von dem Elternteil die gemeinsamen Eigenschaften erben.
Dieser Programmcodeabschnitt hat Ähnlichkeit mit dem vorherigen Beispiel. Wenn Sie genau hinsehen, finden Sie aber Unterschiede. Wir erstellen im ersten Schritt kein neues Icon
Objekt um dieses Anzuzeigen, sondern erweitern die Klasse L:Icon
mit der Klasse LeafIcon
. Wir legen nur die gemeinsamen Optionen für das Objekt LeafIcon
fest. Die URL des Bildes ist die Option, die von Marker zu Marker unterschiedlich ist. Deshalb geben wir diese beim Erweitern der Klasse in den Optionen noch nicht an.
Im zweiten Schritt erstellen wir drei Instanzen des LeafIcon
, also des erweiterten L.Icon
.
Und zu guter Letzt fügen wir die Marker mit dem zugehörigen Icon an die passende Stelle auf der Karte zum Kartenobjekt hinzu.
Im nachfolgenden Bild sehen Sie das Ergebnis. Jeder Marker wird nun mit einem individuellen Icon erstellt. Die meisten Optionen sind gleich – allerdings hat jeder Marker seine eigene Farbe.
Ich gestalte oft Ebenen um, nachdem ich sie erstellt und zur Karte hinzugefügt habe. Hierfür ist die Methode setStyle
die passende Wahl.
Erstellen wir zunächst einmal eine Ebene und fügen Sie zur Karte hinzu. Das erstellte Bermuda-Dreieck sehen Sie im nachfolgenden Bild.
Als Nächstes ändern wir die Ebene mittels setStyle
. Das geänderte Bermuda-Dreieck sehen Sie im nachfolgenden Bild.
Sie sehen: Sie bearbeiten den Stil einer Vektor-Ebene genauso wie Sie CSS in einem HTML-Dokument nutzen. Geändert werden nur die Eigenschaften, die Sie mit neuen Werten belegen. Alles andere bleibt so, wie es vorher war.
Weitere Beispiele zu setStyle
finden Sie im Kapitel Vektor-Ebenen. Eine Abgrenzung zur gleichnamigen Methode für GeoJSON-Layer folgt hier.
Ich hatte eben schon erwähnt, dass das Zuweisen von Stilen bei GeoJSON-Ebenen etwas anders ist. Sie sind in der Lage, die Eigenschaften dieses Layertyps alle auf einen Schlag zurück auf null zu setzen. Da ein Beispiel mehr als 100 Worte sagt sehen wir uns das praktisch an. Das Bermudadreieck sieht im Falle von GeoJSON genauso aus, wie auf der Vektor-Ebene – alles andere hätte verwundert, oder?
Beim Testen bin ich froh, dass es Tabula rasa gibt. Wenn ich mich zerfranst habe, dann setze ich alles auf null. Und genau hier kommt resetStyle
ins Spiel. Das nächste Beispiel setzt die Eigenschaften unserer GeoJSON Ebene zurück - mithilfe von setTime
zeitverzögert. setTime
habe ich hier nur zur Veranschaulichung beigefügt. Das Mittel der Wahl ist die Methode resetStyle
.
Beachten Sie, dass resetStyle
nur auf einzelne Ebenen angewendet wird. Wenn Sie alle Ebenen Ihrer Karte auf einen Schlag resetten, dann passiert dies mit der Methode eachLayer
am schnellsten.
Jedes HTML-Element ist mithilfe von Leaflet verschiebbar. Unsere Karte war bisher in der Vollansicht. So ist es egal, wo Sie das Element genau positionieren. Falls Ihre Karte nur einen Teil des sichtbaren Bereichs einnimmt, dann ist es relevant, wo Sie das verschiebbare Element einfügen. Wenn Sie es im body
-Tag setzten, dann ist es auf der ganzen Seite verschiebbar – nicht nur innerhalb des Kartenbereichs.
Wenn Sie Probleme mit der Sichtbarkeit des Elements haben, dann setzen sie den z-Index auf einen höheren Wert. Es ist erforderlich, dass ein Element relativ
, absolut
oder fixed
positioniert ist, damit eine Änderung des z-index
übernommen wird. Im nächsten Beispiel erstellen Sie eine Schaltfläche und fügen diese zunächst zur Karte und später zum body
-Element hinzu. Ändern Sie position
in den Wert relative
, um den z-index
zu nutzen. Der Wert 400 reicht, damit die Schaltfläche im Vordergrund erscheint. Wenn Sie den z-index
auf einen geringeren Wert setzen, ist der Button nicht sichtbar, weil die Klasse leaflet-pane
einen z-index
von 400 hat. Mit einem höheren Wert gehen Sie auf Nummer sicher. Mit den Eigenschaften top
und left
positionieren wir die Schaltfläche in der Nähe des Steuerelements zum Zoomen – links oben.
Sie streben es an, ein Steuerelement zu verschieben? Leaflet-Controls haben standardmäßig keine ID. Deshalb ist es erforderlich, auf die Klasse zuzugreifen. Eine Idee, dies umzusetzen, zeigt Ihnen das nächste Beispiel. Ermöglichen Sie es, die Attribution an eine andere Stelle zu schieben.
Jedem Steuerelement, welches Sie in Leaflet erstellen, wird automatisch eine Klasse zugeordnet. So stellt Leaflet das Design einheitlich dar. Dies hat viele Vorteile. Sogar, wenn Sie die Darstellung selbst in die Hand nehmen, ist es bequeme auf diese Klassen zurückzugreifen.
Jedes Steuerelement hat eine Hauptklasse. Der Name dieser Klasse beginnt mit leaflet-control
und endet mit dem Namen des Steuerelements. leaflet-control-attribution
ist ein Beispiel von Vielen.
Unterhalb dieser Hauptklasse gibt es weitere Klassen. Das nächste Bild zeigt die Klassen des Leaflet-Control-Containers. Ich habe diese mit den Developer Tools von Firefox geöffnet.
Soweit die Theorie. Das nächste Beispiel ist für diejenigen, die die Praxis bevorzugen.
Nehmen wir an, die dominierende Farbe Ihrer Website ist türkis. Um genau zu sein: #16868F. Dann wäre es doch angebracht, wenn ihre Karte dies widerspiegeln würde. Malen Sie die Steuerelemente in Ihre Farbe an! Fangen wir mit dem Zoom an:
Mit diesem CSS Code sieht das Zoom Element wie folgt aus.
Sie haben zwei Steuerelemente in einer Ecke positioniert. In Kapitel 4 haben Sie gesehen, dass diese immer untereinander angezeigt werden.
Das gefällt Ihnen nicht. Dann positionieren Sie die Steuerelemente nebeneinander!
Wenn Sie den Aufruf dieser Methode vergessen, wirkt es, als ob Ihre Anwendung einen Fehler hätte. Vermeiden Sie dies auf alle Fälle.
invalidateSize()
invalidateSize()
überprüft, ob sich die Größe des Kartencontainers geändert hat, und aktualisiert gegebenenfalls die Karte. Rufen Sie diese Methode auf, nachdem Sie die Kartengröße dynamisch geändert haben!
Ohne die Zeile map.invalidateSize();
würde Ihre Karte so aussehen wie, im nachfolgenden Bild zu sehen ist. Der erweiterte Bereich wäre grau gefärbt. Mit map.invalidateSize();
wird hier die Landkarte gezeichnet.
Der Vollständigkeit halber erwähne ich hier, dass es möglich ist, ein Bild als Hintergrund deines Kartenobjektes einzusetzen. Ich habe dies einmal genutzt. Aus Datenschutzgründen wurde die Karte erst per Klick auf eine Schaltfläche geladen. Vorher habe ich den Kartencontainer mit dem Logo der Firma gefüllt, die die Website betrieb.
Ein Bild drucke ich hier nicht ab, weil dieses Beipsiel ein Zufallsbild lädt und deshalb immer anders aussieht.
Bei dem Einbau von Seitenleisten reagierte die Karte teilweise unerwartet, wenn Sie auf ein Objekt zoomen und dieses dabei zentriert darstellen. Zumindest dann, wenn Sie Leaflet nicht mitgeteilt haben, dass Ihre Karte mit der Seitenleiste nicht vollständig sichtbar ist.
Probieren Sie es aus. Erstellen Sie zuerst eine Seitenleiste.
Laden Sie dann Daten. In diesem Beispiel habe ich alle Länder der Erde auf der Karte eingezeichnet.
Es sieht alles so aus, wie im folgenden Bild zu sehen ist.
Fügen Sie ein Klick-Ereignis hinzu.
Klicken Sie als Nächstes auf Spanien. Sie erwarten sicher, dass Sie daraufhin das Land vollständig sehen. Dies ist nicht so. Leaflet weiß nicht, dass Ihre Seitenleiste den rechten Bereich verdeckt. Es zählt diesen Teil der Karte mit und als Folge wird Spanien teilweise hinter der Seitenleiste angezeigt.
Das Ergebnis: Ihr Klick auf Spanien bewirkt das, was Sie erwarten.
Kosmtik ist ein modulares Open-Source-Mapping-Framework zum Verwalten des CartoCSS-Renderings von OpenStreetMap-Stylesheets und zum Erstellen von Mapnik-fähigen Rasterfeldkarten – Kacheln. Es besteht aus einem JavaScript-Node Modul und benötigt Software wie PostgreSQL, PostGIS, Python, osm2pgsql und Node.js. Kosmtik enthält Abhängigkeiten zu Mapnik und Carto.
Die empfohlene Methode zur Installation von Kosmtik ist über ein Docker-Image. Ich zeige Ihnen hier, wie Sie nacheinander alle erforderlichen Schritte unter Ubuntu 18.04. Mein Ziel ist es, Ubuntu-Pakete und offizielle PPAs zu verwenden, wann immer dies möglich ist.
Stellen Sie sicher, dass Ihr Ubuntu-System auf dem neuesten Stand ist:
Der vorherige Befehl gibt die Ubuntu-Version zurück.
So aktualisieren Sie das System:
Für die nachfolgenden Installationsschritte gehe ich davon aus, dass Sie sich in Ihrem Home-Verzeichnis befinden.
Das Importieren und Verwalten von Kartendaten nimmt Platz im Arbeitsspeicher in Anspruch. Verwenden Sie einen der folgenden beiden Befehle, um zu überprüfen, ob auf Ihrem System eine Swap-Partition konfiguriert ist:
Meldet die Zusammenfassung der Swap-Nutzung (keine Ausgabe bedeutet, dass es keine Auslagerungsdatei gibt):
swapon -s
Zeigt den freien und verwendeten Speicher im System an:
free -h
Wenn Sie keine aktive Auslagerungspartition haben, empfehle ich Ihnen, eine Auslagerungsdatei hinzuzufügen. Zuerst verwenden wir den Befehl fallocate, um eine Datei zu erstellen. Die nächste Anweisung zeigt, wie Sie eine Auslagerungsdatei mit dem Namen swapfile mit einer Kapazität von 2 GB in der Root ihres Dateisystems anlegen.
Stellen Sie sicher, dass nur der Benutzer root
Lese- und Schreibzugriff hat.
Formatieren Sie die Datei als Auslagerungsdatei.
Aktivieren Sie die Auslagerungsdatei.
Führen Sie das Gebietsschema aus, um die Gebietsschemas aufzulisten, die derzeit für das aktuelle Benutzerkonto definiert sind.
So legen Sie das Gebietsschema en_GB fest:
Tragen Sie die exportierten Variablen in die Datei /etc/environment
ein.
jj
cc
j
Erstellen Sie mit Ihrem bevorzugten Editor eine Datei mit dem Namen localconfig.json
im Verzeichnis openstreetmap-carto
, einschließlich der folgenden:
Passen Sie gegebenenfalls Koordinaten Benutzer und Kennwort an Ihre Umgebung an.
Wenn Sie eine virtuelle Remote-Maschine vorbereiten, konfigurieren Sie die Firewall so, dass Remotezugriff auf den lokalen Port 6789 möglich ist.
Führen Sie eine cloud-basierte VM aus? Stellen Sie die VM so eingestellt sein, dass der Port 6789 geöffnet ist.
PostgreSQL ist eine relationale Datenbank. PostGIS erweitert PostgreSQL. Mit PostGIS speichern Sie geografische Objekte. PostgreSQL + PostGIS werden für eine Vielzahl von Funktionen wie das Rendern von Karten, das Geokodieren und die Analyse verwendet.
Unter Ubuntu gibt es vorgefertigte Versionen von PostGIS und POSTgreSQL, so dass Sie diese über den Ubuntu-Paketmanager installieren.
Der verwendete PostgreSQL-Port
ist standardmäßig 5432
.
Während des Installationsvorgangs wird ein Benutzer
namens postgres
erstellt.
postgres
festWechseln Sie zu Postgres auf Ihrem Server, indem Sie Folgendes eingeben:
Greifen Sie auf die Postgres-Eingabeaufforderung zu, indem Sie Folgendes eingeben:
Sie werden bei der PostgreSQL-Eingabeaufforderung angemeldet, und von hier aus agieren Sie sofort mit dem Datenbankverwaltungssystem.
Verlassen Sie die PostgreSQL-Eingabeaufforderung, indem Sie Folgendes eingeben:
Dadurch kehren Sie zur Eingabeaufforderung von Linux zurück.
Die Standardeinstellungen verschiedener Programme, einschließlich openstreetmap-carto
(Project.mml), suchen nach einer Datenbank namens gis. Erstellen Sie eine PostgreSQL-Datenbank und richten Sie eine PostGIS-Erweiterung für diese Datenbank ein.
Das in der Datenbank zu verwendende Zeichencodierungsschema ist UTF8 und die angenommene Kollatierung ist en_GB.utf8
.
So installieren Sie osm2pgsql aus dem Paket. Beachten sie, dass dabei keine aktualisierte Version installiert wird.
Sie müssen eine .osm
oder .pbf
-Datei herunterladen, um sie anschließend über osm2pgsql
in die zuvor erstellte PostGIS-Instanz zu laden.
Es gibt viele Möglichkeiten, die OSM-Daten herunterzuladen.
Kartendaten des gesamten Planeten:
Kartendaten von Rheinland Pfalz mit Prüfung
osm2pgsql
verwendet Overcommit wie viele wissenschaftliche und große Datenanwendungen, für die eine Kerneleinstellung erforderlich ist:
Führen Sie die folgenden Schritte aus, um Daten aus einer .osm
oder .pbf
-Datei in PostGIS zu laden:
Beachten Sie, dass der vorgeschlagene Prozess die Option -s (--slim) verwendet, die temporäre Tabellen verwendet, sodass für die Ausführung mehr Speicherplatz benötigt wird (und dies langsam ist), während weniger RAM-Speicher verwendet wird. Sie können die Option --drop mit -s (--slim) hinzufügen, um temporäre Tabellen nach dem Import zu löschen. Andernfalls finden Sie die Knoten, Methoden und rels der temporären Tabellen (diese Tabellen begannen als reine „Hilfstabellen“ für speicherarme Systeme, aber sie sind heute weit verbreitet, da sie eine Voraussetzung für Updates sind).
Wenn alles in Ordnung ist, können Sie zu Indizes erstellen und Benutzern gewähren gehen.
Beachten Sie, dass die folgenden Elemente verwendet werden:
Abhängig von der Größe der Eingabedatei dauert der Befehl osm2pgsql lange.
Erstellen Sie Teilindizes, um die in project.mml
enthaltenen Abfragen zu beschleunigen, und gewähren Sie Zugriff auf alle GIS-Tabellen, um Renderfehler beim Zugriff auf Tabellen mit dem Benutzer tileserver zu vermeiden. Fügen Sie die von openstreetmap-carto
angegebenen Teilgeometrieindizes hinzu, um die Abfragen effektiv zu verbessern:
Erstellen Sie den PostgreSQL-Benutzer tileserver und gewähren Sie allen gis db-Tabellen Rechte für den Benutzer tileserver und für alle angemeldeten Benutzer:
Geben Sie den folgenden Befehl ein, um alle in der GIS-Datenbank verfügbaren Tabellen aufzulisten.
Es ist wichtig, dass die Datenbank die Tabellen rels
, ways
und nodes
enthält. Andernfalls wird es bei Aktualisierungen Probleme geben.
Beschriftungen oder Tooltips fügen Sie mithilfe von hinzu.
Eine Alternative zum Beschriften mit dem ist das . Falls Sie mit dem Tooltip nicht froh sind, dann blättern Sie zurück zu Kapitel 6 und der Erklärung zum DivIcon.
Formen und Linien erben in LeafletJs von der Klasse . Wenn Sie eine , ein , ein oder einen gestalten, sehen Sie sich am besten zunächst die an.
Zeichen wir eine Linie – eine . Die Poliyline hat eigene Eigenschaften und erbt von der Klasse Path. Das wissen Sie schon.
Die eigenen Eigenschaften der sind übersichtlich – es sind in Version 1.6.0 genau zwei:
Wenn Sie die Polyline färben, haben Sie die Auswahl zwischen
Das erinnert ein bisschen an .
Am schnellsten ändern Sie das Aussehen des Standardicons, indem Sie die Datei im Leaflet Sourcecode austauschen. Dieses Vorgehen empfehle ich Ihnen nicht! Das Ändern der Kerndateien einer Software ist nur vermeintlich die beste Lösung. Bei der nächsten Aktualisierung holt Sie dies wieder ein: Sie haben den Corehack vergessen und überschreibt die geänderte Datei. Irgendwann später wundern Sie sich, warum denn etwas nicht wie erwartet läuft. Dann ist das Rekonstruieren aufwendig.
Ein eigenes Icon erstellen Sie mithilfe der Klasse . Wenn das Icon genauso groß ist, wie das Standardicon von Leaflet reichte es aus, den Dateinamen anzugeben. Variiert die Form, dann sind die Optionen iconSize
, iconAnchor
, popupAnchor
, shadowSize
und shadowAnchor
relevant.
Wenn Sie die Dateien zu Leaflet auf Ihren Rechner kopiert haben, sehen Sie unter den kopierten Daten einen Unterordner mit dem Namen . Dieser Ordner enthält die Imagedateien die angezeigt werden, wenn kein individuelles Image angegeben ist. Ich habe die Bilder hier nachfolgend abgedruckt. Wenn Sie dieses Buch bisher durchgearbeitet haben, kommen Ihnen die Bilder bekannt vor.
Wenn Sie zwei Bilder haben – also ein Bild, das Ihren Marker selbst darstellt und eines, das den Schatten zeigt – dann können wir diese beiden Bilder als Marker in Ihre Karte einbinden. Ich habe hier zum Ausprobieren die Bilddateien aus dem Leaflet Tutorial verwenden.
Ein eigenes Marker Bild erstellen Sie in Leaflet mithilfe der . Das haben Sie eben praktisch gesehen. Diese Klasse bietet Ihnen eine Menge Optionen.
Besonderheiten beim Hochauflösende Displays haben eine höhere Pixeldichte als gewöhnliche Monitore. Auf der gleichen Fläche werden etwa viermal so viele Pixel dargestellt. Der Vorteil dieser Technologie liegt darin, dass die Pixel nun so klein sind, dass das menschliche Auge sie nicht mehr auflösen kann. Das Ergebnis sind sehr scharfe Grafiken und Texte. Damit das Bild nun auf einem HiDPI (High Dots Per Inch) Bildschirm, also einem Retina Display, scharf dargestellt wird, muss es mit mindestens zweifacher Breite und Höhe zur Verfügung gestellt werden. Denn: Eine Pixelgrafik, die bei gewöhnlicher Auflösung das ganze Display ausfüllt, würde auf einem Retina Display der gleichen Größe nur ein Viertel des Displays einnehmen. Ein Pixel der Grafik entspricht auch auf dem Retina-Display einem Pixel. Es werden aber auf der gleichen Fläche viermal so viele Pixel, nun allerdings nur mit einem Viertel der Größe, abgebildet. Damit die Pixelgrafiken nicht plötzlich alle zu klein dargestellt werden, rechnen die Geräte die Grafiken um. Dadurch geht Qualität verloren. Pixelgrafiken wirken auf dem Retina-Display daher teilweise unscharf. Um dieses Problem zu umgehen, prüft Leaflet die Auflösung des Anzeigegerätes. Anschließend werden die Marker Bilder – sofern eine Grafik mit hoher Auflösung vorhanden ist – in hoher Auflösung angezeigt.
Sie haben vielleicht bemerkt, dass wir das Schlüsselwort new
für die Erstellung von LeafIcon
Instanzen verwendet haben. Warum haben wir vorher alle Leafelt Objekte ohne das Schlüsselwort new
erstellt? Die Antwort ist einfach: Die echten Leaflet Klassen sind mit einem Großbuchstaben – beispielsweise L.Icon
– benannt und diese müssen mit new
erstellt werden. Es gibt aber Shortcuts mit Kleinbuchstaben – L.icon
– die aus Bequemlichkeitsgründen von den Leaflet-Programmierern für Sie erstellt wurden: L.icon = function icon(options) {
return new L.Icon(options);
};
Die Funktion L.icon
können Sie sich auf Github in der Datei ansehen.
Leaflet setzt hier das Entwurfsmuster ein. Das Muster beschreibt, wie ein Objekt durch Aufruf einer Methode, anstatt durch direkten Aufruf eines Konstruktors, erzeugt wird. Dies hatte ich im Kapitel Wir beginnen mit einer einfachen Karte schon einmal erwähnt.
Die sind meiner Meinung nach eine gute Wahl, um sich einen Überblick über die Elemente einer Website zu verschaffen.
Die spricht auf unmittelbare Interaktion des Benutzers an. Die Pseudoklassen selektieren Elemente, die mit dem Mauszeiger berührt werden.
Im folgenden Beispiel laden wir ein Bild von .
Wie verhindern Sie dies? Nutzen Sie .
war das ursprüngliche Werkzeug für die Entwicklung des openstreetmap-carto
-Stils. Es wurde von entwickelt, wird heute von einer betreut. Derzeit ist das empfohlene Tool für das Bearbeiten von OpenStreetMap-Stylesheets. TileMill wird offiziell nicht unterstützt.
Die von den OpenStreetMap-Kachelservern übernommene Betriebssystemoptimierung finden Sie in der entsprechenden -Konfiguration.
In diesem Beispiel ist die Standardmitte (9.111, 45.111) und der Standardzoom 15. Weitere Informationen zu den Parametern finden Sie auf .
Starten Sie die Datenbank im Falle von .
ist eine OpenStreetMap-spezifische Software, mit der die OSM-Daten in die PostGIS-Datenbank geladen werden.
Die Referenz ist .
Am einfachsten ist es meiner Meinung nach, eine pbf
-Datei mit OSM-Daten von der abzurufen.
Die zu osm2pgsql
enthält alle für die Verwendung dieses ETL-Tools erforderlichen Informationen, einschließlich der zugehörigen Befehlszeilenoptionen.
Openstreetmap-carto Kosmtik-Plugins. Bei lokaler Installation installieren Sie diese mit folgendem Befehl.
Einen überblick über alle möglichen finden Sie auf Github.