Maps
generateLeafletMap(id, config, useCases) rendert Leaflet-Karten mit Usecase-Layern, Popups, Marker-Icons, Custom Image Overlays und Positionsbearbeitung.
Funktion
Section titled “Funktion”| Parameter | Required | Typ | Beschreibung |
|---|---|---|---|
id | Ja | string | ID des HTML-Containers. |
config | Ja | object | Kartenkonfiguration. |
useCases | Ja | object[] | Array mit Usecase-Konfigurationen und Grafana-Variablen. |
Panel-Aufbau
Section titled “Panel-Aufbau”Maps folgen dem gleichen Grundaufbau wie alle Custom Panels: Ein eindeutiger HTML-Container wird angelegt, danach werden config und useCases definiert und an generateLeafletMap() übergeben.
Config Optionen
Section titled “Config Optionen”| Pfad | Required | Typ | Default | Beschreibung |
|---|---|---|---|---|
general.worldCopyJump | Nein | boolean | false | Aktiviert/deaktiviert Weltkartenumsprung bei Erreichen des Randes. |
general.doubleClickZoom | Nein | boolean | true | Aktiviert/deaktiviert Zoom bei Doppelklick. |
general.zoomSnap | Nein | number | 1 | Schrittweite der Zoomstufen. |
general.minZoom | Nein | number | 3 | Minimalzoom der Layers und Leaflet. |
general.maxZoom | Nein | number | 22 | Maximalzoom der Layers und Leaflet. |
general.useSimpleCrs | Nein | boolean | false | Nutzt L.CRS.Simple für XY-/Bildkarten statt geografischer CRS. |
display.showStreetMap | Nein | boolean | false | Aktiviert Mapbox Street/Satellite/Combined Base-Layer. |
display.showInitLayer | Nein | 'Streets' | 'Satellite' | 'Combined' | Streets | Initialer Base-Layer, wenn display.showStreetMap aktiv ist. |
display.showInitOverlay | Nein | 'all' | string | string[] | - | Initial sichtbare Usecase-Overlays. |
display.showSimpleCustomImage | Nein | boolean | false | Zeigt ein nicht rotiertes Custom Image Overlay. |
display.showRotatedCustomImage | Nein | boolean | false | Zeigt ein rotiertes Custom Image Overlay. |
display.imageUrl | Bedingt | string | - | URL des Custom Image Overlays. Pflicht bei Custom Image Overlays. |
rotation.isRotated | Nein | boolean | false | Aktiviert Kartenrotation. |
rotation.rotateBearing | Nein | number | 0 | Rotationswinkel von 0 bis 360 Grad. |
rotation.customRotateImageBounds | Bedingt | { topLeft: [number, number]; topRight: [number, number]; bottomLeft: [number, number] } | - | Drei Punkte für rotiertes Image Overlay. |
bounds.hasFixedBounds | Nein | boolean | false | Erzwingt feste Kartenbegrenzung. |
bounds.fixedBounds | Bedingt | { top: number; right: number; bottom: number; left: number } | - | Feste Bounds. Pflicht bei bounds.hasFixedBounds. |
bounds.centerZoom | Nein | { center: [number, number]; zoom: number } | { center: [48.208, 16.372], zoom: 12 } | Startposition und Zoom. |
bounds.defaultPos | Nein | [number, number] | [48.208, 16.372] | Fallback-Position für Marker ohne Koordinaten. |
bounds.customSimpleImageBounds | Bedingt | { top: number; right: number; bottom: number; left: number } | - | Bounds für einfaches Image Overlay. |
interaction.lockScrollWheelZoom | Nein | boolean | false | Scrollrad-Zoom erst bei Kartenfokus. |
interaction.showCoorOnClick | Nein | boolean | false | Zeigt Koordinaten bei Kartenklick. |
interaction.allowEditPosition | Nein | boolean | false | Marker per Drag oder Eingabe verschiebbar. |
interaction.hideMarkerPositionContainer | Nein | boolean | false | Verbirgt Positions-Eingaben. |
interaction.serialInput | Nein | boolean | true | Zeigt Seriennummer-Feld in Positionssteuerung. |
marker.ignoreAppColor | Nein | boolean | false | Ignoriert app_color und nutzt Defaultfarbe. |
marker.ignoreAppBlinking | Nein | boolean | false | Ignoriert app_blinking. |
marker.showDetailsInPopup | Nein | boolean | true | Zeigt Details-Link im Popup. |
marker.sortUsecases | Nein | boolean | false | Sortiert Usecases alphabetisch, sofern forcePosition nicht greift. |
marker.extraHtml | Nein | 'fieldtester' | 'tracking' | 'beaconTracker' | false | false | ExtraHTML-Variante für Legenden oder Beacon/Tracker-Control. |
marker.extraHtmlConfig | Nein | object | {} | Zusatzkonfiguration für marker.extraHtml: 'beaconTracker'. |
marker.forceLayerControl | Nein | 'default' | 'show' | 'hide' | default | Steuert, ob die Layer-Control aufgeklappt ist. |
marker.allowSpiderfy | Nein | boolean | false | Aktiviert OverlappingMarkerSpiderfier. |
marker.showAllMarkerAtDefaultPos | Nein | boolean | false | Setzt fehlende Markerpositionen auf bounds.defaultPos. |
other.extraZoomOut | Nein | boolean | false | Zoomt beim Fitten der Bounds eine Stufe heraus. |
other.showAllMarkerInbound | Nein | boolean | false | Passt die View initial an alle Marker an. |
ExtraHTML
Section titled “ExtraHTML”marker.extraHtml wählt eine optionale Zusatzanzeige. fieldtester und tracking rendern eine
Legende unten links. beaconTracker rendert zusätzliche Beacon- und Tracker-Layer sowie ein
Bedienfeld rechts unten.
BeaconTracker Konfiguration
Section titled “BeaconTracker Konfiguration”marker.extraHtmlConfig wird aktuell nur von marker.extraHtml: 'beaconTracker' ausgewertet.
| Pfad | Required | Typ | Default | Beschreibung |
|---|---|---|---|---|
marker.extraHtmlConfig.beaconsVarGraf | Ja | string | '' | Grafana-Variable mit Beacon-Daten. |
marker.extraHtmlConfig.trackersVarGraf | Ja | string | '' | Grafana-Variable mit Tracker-Daten. |
marker.extraHtmlConfig.parentDeviceId | Nein | string | '' | Device-ID zum Speichern des aktuellen Base-Layers, falls vorhanden. |
marker.extraHtmlConfig.beaconLayerName | Nein | string | Beacons | Layer-Name für Beacon-Marker. |
marker.extraHtmlConfig.trackerLayerName | Nein | string | Tracker | Layer-Name für Tracker-Marker. |
marker.extraHtmlConfig.beaconIcon | Nein | string | BLE-Beacon | Marker-Icon für Beacons. |
marker.extraHtmlConfig.trackerIcon | Nein | string | Tracking | Marker-Icon für Tracker. |
marker.extraHtmlConfig.roundDecimals | Nein | number | 3 | Rundung der gespeicherten XY-Positionen. |
marker.extraHtmlConfig.trackerOffset | Nein | number | 2900 | Abstand der Tracker-Marker um den zugeordneten Beacon. |
marker.extraHtmlConfig.showInitOverlay | Nein | boolean | true | Zeigt Beacon- und Tracker-Layer initial an. |
marker.extraHtmlConfig.autoUpdate | Nein | boolean | false | Aktiviert automatische Karten-Neuladung. |
marker.extraHtmlConfig.followGrafanaRefresh | Nein | boolean | true | Nutzt das Grafana-Refresh-Intervall, wenn intervalMs leer ist. |
marker.extraHtmlConfig.intervalMs | Nein | number | null | Festes Auto-Update-Intervall in Millisekunden. |
Das Legacy-Datenformat wird nur für dieses ExtraHTML geparst.
Beacon-Daten:
Tracker-Daten:
Das mapAttribute wird über § zerlegt. Pro Segment wird der erste Pipe-Wert als Beacon-ID
interpretiert und case-insensitive gegen beacon_id gematcht.
Usecase Optionen
Section titled “Usecase Optionen”| Pfad | Required | Typ | Default | Beschreibung |
|---|---|---|---|---|
useCases[].varGraf | Ja | string | - | Grafana-Variable mit Mapdaten, getrennt durch §. |
useCases[].name | Nein | string | Gerät | Usecase-Name für Layer und Legende. |
useCases[].icon | Nein | string | Hole_White | Marker-Icon vom Fileserver. |
useCases[].showIconInLegend | Nein | boolean | false | Zeigt Icon in Layer-Legende. |
useCases[].forcePosition | Nein | number | - | Erzwingt Sortierposition in der Legende. |
useCases[].popup | Nein | (el) => string | - | Custom HTML für Marker-Popup. |
useCases[].structure | Nein | string[] | - | Benennung zusätzlicher Werte nach den Basisattributen. |
useCases[].polygon | Nein | boolean | - | Rendert Polyline-Daten statt Marker. |
useCases[].options.circle | Nein | (el) => false | LeafletPathOptions & { radius: string | number } | - | Kreis um Marker. Muss radius in Metern liefern. |
useCases[].options.hideMarker | Nein | boolean | (el) => boolean | - | Unterdrückt Marker je Sensor. |
useCases[].options.multiplePositions | Nein | (el) => Array<{ lat: string | number; lng: string | number }> | - | Zusätzliche Markerpositionen für denselben Sensor. |
useCases[].options.multipleDevices | Nein | object | - | Parst mehrere Devices aus einem $-getrennten Wert. |
useCases[].options.multipleDevices.structure | Ja | string[] | - | Struktur eines einzelnen $-Chunks. Muss Lat/Lng enthalten. |
useCases[].options.multipleDevices.key | Ja | string | ((el) => string) | - | Datenquelle für den $-getrennten Multiple-Devices-String. |
SQL-Usecase-Variable
Section titled “SQL-Usecase-Variable”Die Grafana-Variable in useCases[].varGraf muss die Basisattribute in dieser Reihenfolge liefern. Jeder Datensatz endet mit §.
Vor dem § können weitere Custom Attributes ausgegeben werden. Diese müssen in useCases[].structure in der gleichen Reihenfolge definiert werden.
Basisattribute
Section titled “Basisattribute”Die Runtime erwartet die Basisattribute in dieser Reihenfolge:
deviceidserialposYposXdevicetypetimestampstatusoffline_statusapp_colorapp_blinkingisGPS
posY ist Latitude, posX ist Longitude. Das SQL-Attribut is_gps wird in der Runtime als isGPS bereitgestellt.
useCases[].popup ist eine Funktion mit el als Parameter. Seriennummer und timestamp werden im Standard-Popup immer angezeigt; darunter wird der HTML-String aus popup(el) angehängt.
Auf diese Keys kann direkt zugegriffen werden:
| Key | Beschreibung |
|---|---|
el.deviceid | Device-ID vom Marker. |
el.serial | IOTA-Serial. |
el.posY | Latitude. |
el.posX | Longitude. |
el.devicetype | IOTA-Devicetype-ID. |
el.timestamp | Timestamp im ISO-Format. |
el.status | 0/1 für disabled/enabled. |
el.offline_status | IOTA-Attribut offline_status. |
el.app_color | IOTA-Attribut app_color. |
el.app_blinking | IOTA-Attribut app_blinking. |
el.isGPS | IOTA-Attribut is_gps. |
el.data.* | Alle in useCases[].structure definierten Zusatzattribute. |
Popup Beispiele
Section titled “Popup Beispiele”Options.circle
Section titled “Options.circle”useCases[].options.circle(el) funktioniert wie popup(el). Die Funktion muss entweder false oder ein Objekt mit radius in Metern zurückgeben. Zusätzlich können Leaflet Path Options wie color, fillColor oder fillOpacity gesetzt werden.
Beispiele
Section titled “Beispiele”Minimale Streetmap
Section titled “Minimale Streetmap”Satellitenansicht mit initialen Overlays
Section titled “Satellitenansicht mit initialen Overlays”Feste Grenzen und einfaches Custom Image
Section titled “Feste Grenzen und einfaches Custom Image”Rotation und gedrehtes Custom Image
Section titled “Rotation und gedrehtes Custom Image”Bearbeitung und Serial-Eingabe
Section titled “Bearbeitung und Serial-Eingabe”BeaconTracker auf XY-Bildkarte
Section titled “BeaconTracker auf XY-Bildkarte”Mehrere Positionen pro Device
Section titled “Mehrere Positionen pro Device”Multiple Devices aus einem Attribut
Section titled “Multiple Devices aus einem Attribut”Helper Funktion
Section titled “Helper Funktion”SQL-Values
Section titled “SQL-Values”app_blinking
Section titled “app_blinking”app_blinking sollte eine Zahl sein.
| Wert | Bedeutung |
|---|---|
1 | slow |
2 | fast |
3 | medium |
0 oder Default | kein Blinken |
app_color
Section titled “app_color”app_color sollte eine Zahl aus dem gemeinsamen app_color Farbkatalog sein. Die Tabelle
mit Namen und Hex-Werten steht in den Grundlagen unter Icons & Farben.
Die Markerfarbe wird so bestimmt:
Icons-Liste
Section titled “Icons-Liste”Die verfügbaren Map-Marker-Icons stehen in den Grundlagen unter Icons & Farben.