Gå till innehållet

Kartor och indikatorer — Utöka

Det här avsnittet beskriver hur modulen Kartor och indikatorer utökas med anpassad funktionalitet. Det inkluderar att koppla ett Alarm-objekt till en Kartvy för livefiltrering av larm, samt att skapa anpassade kartindikatorer med zoomnavigering, länkning och statushantering.

Det här avsnittet förutsätter kännedom om grunderna i modulen Kartor och indikatorer. Se vid behov Kom igång.

Koppla Alarm till Kartvy

Ett Alarm-objekt kan kopplas till en Kartvy så att det filtrerar larm baserat på vilka statuspinnar eller klusterpinnar som är synliga för tillfället. Det ger användaren både en fullständig systemöversikt och stationsspecifik kontroll.

Lägg till följande onLoad-skript i den Arbetsvy som innehåller både Kartvyn och Alarm-objektet. Detta aktiverar alla systemlarm i larmlistan:

arbetsvy — onLoad
var local = alarmNames.split(",");

for (var index = 0; index < local.length; index++) {
    this.view.Alarm1.addGroup(local[index]);
}

app.alarmView = this.view;
scMap.alarmList = this.view.Alarm1;
scMap.updateAlarmList(scMap.mapView, scMap.alarmList);

// "Gå till larm" i larmlistan (larmgruppernas Åtgärd anropar den här)
var gotoList = this.view.Alarm1;
var gotoViewName = this.view.name;
this.view.goToCurrentAlarm = function () {
    scAlarmFinder.goToAlarm(gotoList.nameForCurrentAlarm, gotoViewName);
};

Note

Ersätt Alarm1 med namnet på det Alarm-objekt som är placerat i vyn. alarmNames är en intern Datalager-variabel som innehåller en kommaseparerad sträng med alla larmgruppsnamn i systemet. Den behöver inte konfigureras manuellt. De sista raderna gör att larmlistans GoTo fungerar, även på webbklienten. Se GoTo i egna larmvyer.

Nästa steg: onLoad-skriptet för Kartvyn hanterar redan uppdateringar av larmlistan om scMap.alarmList är satt. Se till att onLoad-skriptet för Kartvyn är konfigurerat enligt följande:

Map View — onLoad
scMap.mapView = this;
scMap.initClusters(this);
if (scMap.alarmList) scMap.updateAlarmList(this, scMap.alarmList);

Alarm-objektet är nu fullt kopplat till Kartvyn och visar aktiva larm baserat på vad som för tillfället är synligt på kartan.

Skapa anpassade kartindikatorer

Följande avsnitt förklarar de viktigaste koncepten bakom de inbyggda indikatorerna och hur de tillämpas när egna skapas. Snarare än att dokumentera ett specifikt objekt ligger fokus på de underliggande mönstren (zoomnavigering, länkning, statushantering och klustring), så att integratören kan tillämpa dem på valfri anpassad indikator.

Tip

För komplexa indikatorer som statuspinnar och klusterpinnar rekommenderas det starkt att kopiera det befintliga objektet och modifiera det istället för att bygga från grunden. Det bevarar all befintlig logik och tillåter samtidigt full visuell anpassning.

Zoomnivåer och navigering

Kartvy-objekt stöder zoomintervall, som styr vid vilken zoomnivå varje objekt är synligt. Det är ett kraftfullt verktyg för att minska röran. Objekt på en högre nivå kan guida användaren till mer detaljerade vyer på lägre zoomnivåer genom att ange en målzoomnivå vid klick.

För att implementera detta, lägg till en zoomTarget-egenskap på den anpassade indikatorn och använd följande onClick-skript:

Custom indicator — onClick
var mv = this.geo.mapView;
mv.zoomLevel = this.zoomTarget || 15;
mv.latitude = this.geo.latitude;
mv.longitude = this.geo.longitude;

Det här skriptet gör tre saker när indikatorn klickas:

  • Sätter kartans zoomnivå till värdet av zoomTarget. Om inget värde är angivet används standardvärdet 15.
  • Centrerar kartan på indikatorns latitud.
  • Centrerar kartan på indikatorns longitud.

Genom att kombinera zoomintervall med en zoomTarget-egenskap kan indikatorer på högre zoomnivåer fungera som navigeringshjälpmedel: ett klick zoomar in och visar de mer detaljerade indikatorerna nedanför.

Tip

En bra praxis är att ange zoomTarget för en indikator på högre nivå till den lägsta zoomnivå vid vilken dess underordnade indikatorer blir synliga. Det skapar en sömlös navigeringsupplevelse.

Länkning

Anpassade indikatorer kan länkas till en Arbetsvy, en katalog eller ett specifikt objekt beroende på användningsfallet. Det styrs genom att lägga till en linkedView- eller targetObject-egenskap på indikatorn.

Länka till en Arbetsvy

För att länka en indikator till en Arbetsvy, lägg till en linkedView-egenskap och sätt dess värde till sökvägen för den önskade Arbetsvy som slutar med .kvie. Lägg sedan till följande onClick-skript:

Custom indicator — onClick (arbetsvy)
app.MultiViewer.setView(this.linkedView);

Länka till en katalog

För att länka en indikator till en katalog, lägg till en linkedView-egenskap och sätt dess värde till en katalogsökväg som System/Videdal. Vid klick öppnas helskärmsmenyn på den katalogen, vilket gör att användaren kan navigera till önskad Arbetsvy.

Custom indicator — onClick (directory)
var _parts = this.linkedView.split("/");
var root = _parts[0];
var dir = _parts[_parts.length - 1];
app._subNavTarget = { root: root, dir: dir };

Note

Kataloglänkning kräver att helskärmsmenyn är tillgänglig. Se modulen Navigation för mer information.

Länka till ett specifikt objekt

För att länka en indikator direkt till ett specifikt objekt, lägg till en targetObject-egenskap och sätt dess värde till namnet på målobjektet. Lägg sedan till följande onClick-skript:

Custom indicator — onClick (object)
scLinking.goTo(this.targetObject);

Det navigerar till den Arbetsvy som innehåller målobjektet och markerar det. För mer information, se GoTo i modulen Navigation.

Tip

Använd linkedView med en .kvie-sökväg för att navigera till en specifik Arbetsvy, använd linkedView med en katalogsökväg för att öppna helskärmsmenyn på den platsen, och använd targetObject för att ta användaren direkt till ett specifikt objekt som en sensor eller ett styrelement.

Pinnstatus

PinStatus-objektet är det mest komplexa av de inbyggda indikatorerna. Det gör automatiskt två saker när det länkas till en Arbetsvy:

  • Larmräkning — frågar databasen efter alla larm kopplade till den länkade Arbetsvy och lyssnar på ändringar. Resultatet återspeglas i pinnens alarmCount-egenskap.
  • Statusfärg — frågar alla objekt i den länkade Arbetsvy och mappar deras suffixsignaler till en statusnivå med hjälp av skriptet scSuffix. Pinncirkelns färg uppdateras automatiskt för att återspegla den högsta aktiva statusen:
Status Färg
Larm / Fel Röd
Varning Gul
Aktiv / OK Grön
Ingen status Grå

Statusmappningen konfigureras i skriptet scSuffix via objektet suffixObj.Views, som definierar vilka objektsuffix som motsvarar vilken statuskategori. Det behöver inte ändras när en anpassad indikator skapas.

Rekommendation

Snarare än att bygga en anpassad statusindikator från grunden rekommenderas det starkt att kopiera det befintliga PinStatus-objektet och anpassa kopian efter behov. Skriptet är tätt kopplat till skriptet scSuffix och databasstrukturen, vilket gör det komplext att replikera korrekt. Kopiering säkerställer att all befintlig logik bevaras och tillåter samtidigt full visuell anpassning.

Klusterhantering

Klustringssystemet i Kartvy drivs helt av funktionen initClusters() i skriptet scMap. Den identifierar objekt genom att söka efter två specifika egenskaper:

  • Ett objekt med en roi-egenskap behandlas som ett kluster.
  • Ett objekt med en status-egenskap behandlas som en pin och ett potentiellt underordnat element.

Det innebär att valfri anpassad indikator kan delta i klustringssystemet enbart genom att ha rätt egenskap. Det finns inget krav på ett specifikt objektnamn eller en specifik typ.

Note

initClusters() måste anropas i onLoad-skriptet för Kartvyn för att klustring ska fungera. Se Kom igång.

Göra en anpassad indikator klustermedveten

För att en anpassad indikator ska plockas upp som ett underordnat element av klustringssystemet behöver den en status-egenskap. För det inbyggda PinStatus-objektet hanteras detta automatiskt av dess skript, som uppdaterar status via en DataStoreListener när den länkade Arbetsvyn ändrar tillstånd.

För en anpassad indikator måste status underhållas av ett skript. Värdet ska följa samma statushierarki som används av de inbyggda indikatorerna:

Värde Betydelse
3 Larm / Fel
2 Varning
1 Aktiv / OK
0 Ingen status

Rekommendation

Snarare än att bygga ett anpassat kluster från grunden rekommenderas det starkt att kopiera det befintliga klusterobjektet och anpassa kopian efter behov. Klustringslogiken hanteras helt av skriptet scMap, och kopiering säkerställer att det nya objektet identifieras korrekt av initClusters() och tillåter samtidigt full visuell anpassning.