Widget:Karte
Zur Navigation springen
Zur Suche springen
Zweck
Eine interaktive Karte auf Basis der API zum einbinden in Infoboxen und Artikel oder als eigenständige Seiten.
Hinweis: Dieses Widget wird mittels der API bereitgestellt und befindet sich noch in der Testphase. Diskussionen und Verbesserungsvorschläge hier: GW2Wiki Diskussion:Projekte/Interaktive Karten. Falls Du einen Fehler findest, welcher mit der Kartendarstellung zusammenhängt, melde diesen bitte dort. Danke! |
Parameter
Allgemein
- lang
- Sprache (1=de, 2=en, 3=es, 4=fr), default: 1
- disable_controls
- (bool), blendet die Steuerelemente aus (sinnvoll bei kleinen Karten), default: 0
- disable_eventdata
- (bool), deaktiviert das Laden von Eventdaten, was normal einen weiteren API-Zugriff erfordert, default: 0
Kartenauswahl
- continent_id
- id des Kontinents (1=Tyria, 2=Die Nebel), default: 1
- floor_id
- id der Ebene, default: 2
- region_id
- id der Region
- map_id
- id der Karte, nur in Verbindung mit
region_id
- poi_id
- id eines Punktes auf der Karte, nur in Verbindung mit
region_id, map_id
undpoi_type
- poi_type
- Typ des Kartenpunktes (1=landmark, 2=sector, 3=skill, 4=task, 5=vista, 6=waypoint)
Größenkontrolle
- width
- Breite in Pixel, default 800
- w_percent
- (bool), Breitenangabe in %, default: 0
- height
- Höhe in Pixel, default: 450
- h_percent
- (bool), Höhenangabe in %, default: 0
Sonstiges
- linkbox
- Breite in Pixel, zeigt eine Liste der Kartenpunkte in der angegebenen Breite an, default: 0
- polyline
- Sammlung von Pixelkoordinaten zur Darstellung einer Polylinie nach dem Schema: X,Y<space>... Es können mehrere Polylinien mit einem Semikolon getrennt Dargestellt werden. Folgende Parameter können zum Ändern des Aussehens verwendet werden:
- color: Farbe als 3- oder 6-Stelliger Hexadezimalwert (f0a oder ff00aa), default: ffe500
- width: Dicke der Linie in Pixel, default: 3
- opacity: Deckkraft der Linie in Prozent, default: 80
- style: Style der Linie, momentan nur "dash", stellt die Linie als Strichpunktlinie dar
- type: Typ der Liniendekoration: "arrow" zeichnet einen Richtungspfeil alle 150 Pixel, "marker" setzt ein Marker-Icon an den Anfang und ans Ende der Linie
- Einen Editor für Polylinien gibt es unter Widget:Karte/Polyline-Editor.
- markers
- Sammlung von Pixelkoordinaten zur Darstellung von einzelnen Markern nach dem selben Schema wie Polylinien, momentan keine weiteren Parameter verfügbar.
Beispiel
{{#Widget:Karte|width=100|w_percent=1|height=250|region_id=4|map_id=15|poi_id=225|poi_type=4|linkbox=300|polyline=color=ff9c31 width=4 opacity=80 type=arrow 12418,12867 12410,12900 12410,12934...}}
Bekannte Probleme
Die Links in der Liste sind völlig durcheinanderDas liegt daran, dass die Kartendaten in der API-Abfrage unsortiert sind, und innerhalb des Scripts bisher keine weitere Sortierung vorgenommen wird.- Die Skillpunkte und Vistas haben eine völlig wirre Beschriftung
- Da Vistas keine Namen haben wird dort nur die zugehörige ID angezeigt. Für die Fertigkeitsherausforderungen werden momentan weder Namen noch eine ID von der API zurückgegeben, daher werden dort nur die Koordinaten angegeben.
- Die Icons verdecken den Zonennamen
- Das ist auch gut so. Man könnte zwar mittels der CSS-Eigenschaft "z-index" den Namen über die Icons "heben", was allerdings zur Folge hätte, dass man darunterliegende Icons nicht mehr anklicken kann.
- Es wird nur ein Teil der Karte dargestellt, obwohl sie auf kleinerer Zoomstufe ins Fenster passen würde
- Das mit dem Zoom ist gar nicht so einfach: leaflet.js stellt den automatisch anhand der Bildschirmgröße bzw. der daraus resultierenden Containergröße ein und positioniert die Karte anhand der "bounding box", welche die API vorgibt, auf einem möglichst großen Zoomlevel. Da die Karten alle unterschiedlich groß sind, kann man nicht einfach Zoomlevel X einstellen - das würde in vielen Fällen zu unerwünschten Ergebnissen führen.
- Die Karte beginnt zu hüpfen, wenn ich weit herauszoome
- Dieser Bug wurde mit leaflet v0.6.3 "eingebaut": vorher wurde die minimale Zoomstufe automatisch festgelegt (s.o.), sodass man nicht weiter herauszoomen konnte, sobald die "bounding box" kleiner als der Kartencontainer war - diese Beschränkung wurde nun aufgehoben und verursacht dafür das hüpfen.
- Ich sehe überhaupt garkeine Karte o.O
- Hast du Javascript deaktiviert oder verhindert irgendein Programm (Antivirus-Software, Werbeblocker, etc.) die Darstellung? Falls Du einen Scriptblocker wie etwa NoScript für Firefox oder ScriptSafe für Chrome benutzt, solltest Du neben http://wiki-de.guildwars2.com/ auch http://cdn.leafletjs.com/ und https://d1h9a8s8eodvjz.cloudfront.net/ auf die Whitelist setzen.
Code
Den vollständigen Code und eine Anleitung zur Implementation gibt es unter https://github.com/codemasher/Guild-Wars-2-WikiMaps (englisch).
Erzeugter HTML
<div class="gw2map" data-language="1" data-disable_controls="1" data-continent_id="1" data-floor_id="2" data-region_id="4" data-map_id="50" data-poi_id="1057" data-poi_type="1" data-width="250" data-w_percent="0" data-height="250" data-h_percent="0" data-linkbox="0"></div>
MediaWiki:Common.js
jQuery(document).ready(function(){ if($('.gw2map').length){ $.each([ "https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.3/leaflet.css", "https://d1h9a8s8eodvjz.cloudfront.net/fonts/menomonia/08-02-12/menomonia.css", "https://d1h9a8s8eodvjz.cloudfront.net/fonts/menomonia/08-02-12/menomonia-italic.css" ], function(){ var ref = document.createElement("link"); ref.setAttribute("rel", "stylesheet"); ref.setAttribute("href", this); document.getElementsByTagName("head")[0].appendChild(ref); }); $.ajax("https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.3/leaflet.js", { cache: true, dataType: "script" }).done(function(){ $.ajax("https://wiki-de.guildwars2.com/index.php?title=Widget:Karte/JS&action=raw&ctype=text/javascript", { cache: true, dataType: "script" }).done(function(){ $(".gw2map").each(function(){ GW2Maps.init(this); }); }); }); } });
MediaWiki:Common.css
.gw2map{ width: 800px; height: 450px; background-color: #fff; } .sector_text{ color: #fff; font-family: Menomonia,sans-serif; font-style: italic; font-size: 20px; white-space: nowrap; text-align: center; } .table-row{ display: table-row; } .table-cell{ display: table-cell; vertical-align: top; } .linkbox{ overflow: scroll; overflow-x: auto; overflow-y: scroll; padding: 0 .25em 0 .25em; } .linkbox > div{ white-space: nowrap; cursor: pointer; } .linkbox > div.header{ cursor: default; font-size: 200%; font-weight: bold; padding: 0.25em 0 0.25em 0; } .linkbox > div.header.sub{ font-size: 150%; padding: 0.25em 0 0.25em 0; } .linkbox > div:not(.header):not(.sub):hover{ background-color: #ccc; }