Veiledning: Bygg sanntids arbeidsordre-ruting med Fabric Maps

Microsoft Fabric Maps tilbyr geospatial visualisering og analyse for å levere handlingsrettede innsikter fra sanntids- og historiske romlige data.

I denne veiledningen bruker en feltoperatør i elektrisitetsverket Microsoft Fabric Maps for å opprette og administrere reparasjonsarbeidsordrer når strømbrudd eller eiendelsfeil rapporteres. Scenarioet fokuserer på å lokalisere berørte kunder, visualisere aktive arbeidsordrer i sanntid, og sende ut mannskap effektivt for gjenoppretting av tjenesten.

Denne veiledningen demonstrerer hvordan kundeposisjoner kartlegges, live arbeidsordrer vises på kartet, og en optimal rute beregnes ved hjelp av Azure Maps Route Directions API. Opplæringen avsluttes med en optimalisert rute vist på kartet.

Fabric Maps kjører i Fabric Real-Time Intelligence, og tar inn strømmende telemetri ved hjelp av Eventstream og Eventhouse for sanntidsovervåking. Fullføringer av arbeidsordrer og driftsresultater lagres i OneLake, hvor de kan brukes til ruteoptimalisering og analyse som vises på kartet.

I denne opplæringen vil du:

  • Lag et innsjøhus og last opp eksempler på arbeidsordredata.
  • Sett opp en hendelsesstrøm for å skrive arbeidsordredata til et eventhouse.
  • Lag en Kusto-funksjon for å hente ut kundekoordinater fra de importerte arbeidsordredataene.
  • Lag et kart og legg til funksjonen som et kartlag.
  • Beregn en optimal rute ved å bruke Azure Maps Route Directions API.
  • Legg til den optimaliserte ruten på kartet som et lag.
  • Konfigurer kart- og laginnstillinger.

Forutsetninger

Før du starter denne veiledningen, er det nyttig å gå gjennom Real-Time Intelligence-veiledningene for å bli kjent med kjernekonseptene og arbeidsflytene.

Lag et innsjøhus og last opp eksempeldataene for arbeidsordre

For å simulere en sanntids strømmekilde bruker notatboken i følgende steg eksempeldata lastet opp til et innsjøhus. I produksjon ville disse dataene bli strømmet i stedet for statisk.

Opprett datafilen for arbeidsordre

Arbeidsordredatafilen inneholder eksempler på arbeidsordreposter brukt i denne veiledningen for å simulere en sanntids strømmingskilde. Etter å ha opprettet filen, importerer du den til et innsjøhus i neste steg.

Kopier og lim inn følgende innhold i en tekstfil, og lagre den deretter som WorkorderLocations.csv. Du vil bruke denne filen i neste steg.

WorkorderID,Latitude,Longitude
100,48.22610712,16.32977412
101,48.23519063,16.37364699
102,48.19785896,16.38669028
103,48.18125837,16.37068261
107,48.15151126,16.41766590
108,48.20290349,16.32492121
104,48.23400591,16.4563533
105,48.18145603,16.40506946
106,48.16366378,16.36001083

Opprett et innsjøhus og importer arbeidsordredatafilen

Opprett et nytt lakehouse for innkommende arbeidsordredata og importer den tidligere opprettede lokasjonsfilen for arbeidsordren.

  1. Fra arbeidsområdet ditt velger du Nytt element, og skriv inn lakehouse i søkeboksen og velg det for å opprette et nytt lakehouse.
  2. Skriv inn et navn WorkorderLocationsLakehouse og velg Create.
  3. I det nye innsjøhuset velger du Last opp filer og last opp den WorkorderLocations.csv filen som ble opprettet i forrige steg.
  4. I det nye innsjøhuset velger du Utforsker-panelet på venstre side av skjermen.
  5. I Filer-delen av Utforskeren velger duWorkorderLocations.csv for å se filen du lastet opp.
  6. I Visningsinnstillingene, velg første rad som overskrift.
  7. (Valgfritt) I nedtrekkslisten for visninger, velg Table View.

Skjermbilde av WorkorderLocations.csv-filen etter å ha importert den til et hus ved innsjøen.

Lag en hendelsesstrøm og skriv data til et eventhus

I denne delen designer du en hendelsesstrømflyt med et tilpasset endepunkt og sender data med en notatbok for å simulere sanntidsstrømming.

Microsoft Fabric Eventstream er en sanntids datastrømmingstjeneste som gjør det mulig for brukere å ta inn, behandle og rute hendelsesdata innenfor Microsoft Fabric-økosystemet. Det gir en no-code-opplevelse for å bygge hendelsesdrevne arbeidsflyter, som muliggjør sømløs integrasjon av sanntidsdata fra ulike kilder og ruting til flere destinasjoner. For mer informasjon om støttede datakilder eller hvordan du kobler til et tilpasset endepunkt, se Oversikt over Microsoft Fabric-hendelsesstrømmer.

Ved å ta inn hendelsesstrømdata i et eventhouse, blir strømmende hendelser tilgjengelige for behandling med Kusto, hvor de kan transformeres og analyseres i sanntid ved hjelp av tabeller eller funksjoner. Hvis du vil ha mer informasjon, kan du se Oversikt over Eventhouse.

Opprett en eventstrøm og eventhouse

  1. Velg Nytt element fra arbeidsområdet ditt, og skriv inn eventstream i søkeboksen.

  2. Velg Eventstream.

  3. I dialogen Ny Eventstream , skriv inn et navn: "WorkordersEventstream", og velg deretter Create.

  4. I skjermen Design en flyt for å innlese, transformere og rute strømmehendelser, velg Bruk egendefinert endepunkt

    Skjermbilde av skjermen Design en flyt for å importere, transformere og rute strømmehendelser i Fabric, som viser muligheten til å bruke egendefinert endepunkt.

  5. I dialogen for egendefinert endepunkt Legg til kilde, velg Legg til.

    Et skjermbilde av dialogen Add source for Custom endpoint i Microsoft Fabric som viser en breadcrumb-navigasjon med Custom endpoint-pilen WorkordersEventstream øverst. Dialogen inneholder et Kildenavn-felt med rød stjerne markert som påkrevd, som inneholder teksten CustomEndpoint-Source. En turkis Legg til-knapp er markert nederst til høyre i dialogen og indikerer at den skal velges uten at det kreves flere handlinger.

    Eventstrømmen er nå opprettet. Legg deretter til et Eventhouse som reisemål.

  6. I WorkordersEventstream-noden i eventstream-designeren, velg Eventhouse fra Transform-hendelsene eller legg til destinasjonslisten .

    Et skjermbilde av Microsoft Fabric eventstream-designeren som viser et flytdiagram med CustomEndpoint-Source koblet til WorkordersEventstream-noden. En nedtrekksmeny utvides fra Transformér-hendelser eller legg til destinasjonsflis på høyre side, og viser Destinasjon-seksjonen nederst med flere alternativer, inkludert Eventhouse, som er markert med et rødt rektangel som indikerer at den skal velges.

  7. Konfigurasjonspanelet for Eventhouse destinasjon vises på høyre side av skjermen. Fyll ut opplysningene som er etterspurt, og velg deretter Lagre:

    1. Datainntaksmodus: Sett til hendelsesbehandling før inntasting.
    2. Destinasjonsnavn: Sett til arbeidsordreEventhouse.
    3. Arbeidsområde: En nedtrekksmeny som viser navnet på arbeidsområdet ditt.
    4. Eventhouse: Velg Lag nytt og opprett et eventhus kalt WorkordersEventhouse.
    5. KQL-database: Velg arbeidsordrerEventhouse.
    6. KQL Destinasjonstabell: Velg Opprett ny lenke og opprett en ny tabell kalt Arbeidsordrer.
    7. Inndataformat: Velg Json.
    8. Aktiver inntak etter å ha lagt til datakilden: kryss av i boksen.

    Et skjermbilde som viser Eventhouse destinasjonskonfigurasjonspanel som viser datainntaksmodus med hendelsesbehandling før inntasting valgt, destinasjonsnavn satt til WorkordersEventhouse, arbeidsområde-nedtrekksmeny som viser mitt arbeidsområde, Eventhouse-nedtrekksmeny som viser arbeidsordrerEventhouse med opprett ny lenke, KQL-databasenedtrekksmeny som viser arbeidsordrerEventhouse, KQL destinasjonstabell som viser nye arbeidsordrerEventhouse med Opprett ny lenke, aktiver inntasting etter å ha lagt til avkrysningsboksen for datakilden sjekket, og en grønn Lagre-knapp nederst.

  8. Når eventhuset er lagt til som destinasjon, velg Publiser for å publisere din nye eventstrøm.

    Et skjermbilde som viser Eventstream-designeren som viser en flyt med CustomEndpoint-Workorders kilde koblet til en Workorders-stream-node, som igjen kobler til WorkordersEventhouse-destinasjonen. Publiser-knappen er markert øverst til høyre i verktøylinjen. Et banner i redigeringsmodus indikerer at endringer går live når de er publisert.

Få nødvendige SAS-nøkkelautentiseringsnøkler

Du trenger Event Hub-navnet og Connection string-primærnøkkelverdiene fra SAS Key-autentiseringsseksjonen i notatboken din.

  1. Velg den egendefinerte endepunkts-kildeflisen du nettopp la til.

  2. I Detaljpanelet , velg SAS Key Authentication.

  3. Kopier følgende to verdier og lagre dem for bruk i notatboken din:

    • Event hub-navn: Brukes for EVENT_HUB_NAME-variabelen.
    • Forbindelsesstreng-primærnøkkel: Brukes for CONNECTION_STR-variabelen .

    Et skjermbilde som viser Eventstream-designeren med SAS Key Authentication-alternativet valgt i detaljpanelet, som markerer Event hub-navnet og Connection string-primærnøkkelfeltene som brukes i notatboken i et senere steg i denne veiledningen.

Simuler sanntidsinntak ved hjelp av en notatbok

I denne seksjonen lager du en notatbok koblet til lakehouse du opprettet tidligere, og bruker deretter den medfølgende koden til å lese CSV-dataene og sende hendelser til hendelsesstrømmen. Dette simulerer sanntids datainntak; For demoer kan du kjøre notatboken manuelt eller planlegge den til å kjøre periodisk.

Lag en notatbok i Fabric-arbeidsområdet ditt

Lag en notatbok med kode for å importere jobbordre-lokasjonsfilen fra innsjøhuset ditt til hendelsesstrømmen du opprettet i forrige avsnitt. Dette simulerer en sanntids strømmekilde, som i et produksjonsmiljø ville strømmes i stedet for statisk.

  1. Fra arbeidsområdet ditt velger du Nytt element, og skriver inn notatbok i søkeboksen.

  2. Velg notatbok.

    Et skjermbilde av Microsoft Fabric New item-dialogen med en søkeboks som inneholder tekstnotatboken. Søkeresultatene viser en notatblokkflis med et dokumentikon, som viser beskrivelsen Lag en notatbok for å utforske data og bygge maskinlæringsmodeller. Notatbok-alternativet er markert, noe som indikerer at det kan velges for å opprette et nytt notatbokelement.

  3. I dialogen Ny notatbok, skriv inn WorkorderLocations i Navn-feltet , og velg deretter Create.

  4. For å koble notatboken din til innsjøhuset, velg Fra OneLake-katalogen fra nedtrekksmenyen Legg til dataelementer .

    Et skjermbilde av Microsoft Fabric Explorer-panelet som viser fanen Dataelementer valgt med meldingen Ingen datakilder lagt til og en tom mappe-ikon. Under meldingen er det en nedtrekksmeny for å legge til dataelementer, utvidet for å vise tre menyvalg: Fra OneLake-katalogen med et databaseikon, Fra Real-Time hub med et lynikon, og Nytt innsjøhus med et plusstegn. Katalogvalget From OneLake er markert med en mørk kant som indikerer utvalg.

  5. Velg WorkorderLocationsLakehouse fra OneLake-katalogen og velg Connect button. Dette er innsjøhuset du laget tidligere.

  6. Etter å ha opprettet notatboken og koblet den til hytta ved innsjøen, lim inn følgende kode i den første cellen og kjør den for å installere Azure Event Hub SDK:

    # Install Azure Event Hub SDK (only needed once per environment)
    %pip install azure-eventhub
    
  7. Velg + Kode for å opprette en ny celle i notatboken.

    Et skjermbilde av Microsoft Fabric-notatboken som viser en kodecelle med to linjer Python-kode. Linje 1 inneholder en kommentar som sier Installer Azure Event Hub SDK trengs bare én gang per miljø. Linje 2 viser pip-installasjonskommandoen prosentandel pip install azure-eventhub. Under kodecellen viser en verktøytips Legg-kode-celle som peker på en pluss-kodeknapp markert med et rødt rektangel. En Pluss-Markdown-knapp vises til høyre. Øverst til høyre viser PySpark Python som valgt kjerne.

  8. Velg den nye cellen og skriv inn følgende kode i den:

    from azure.eventhub import EventHubProducerClient, EventData
    import pandas as pd
    import json
    import time
    
    # Replace with your actual connection string and Event Hub name
    CONNECTION_STR = "" # Connection string-primary key
    EVENT_HUB_NAME = "" # Event hub name
    producer = EventHubProducerClient.from_connection_string(conn_str=CONNECTION_STR, eventhub_name=EVENT_HUB_NAME)
    
    df = spark.read.csv("Files/WorkorderLocations.csv", header=True, inferSchema=True)
    pdf = df.toPandas()
    total_records = len(pdf)
    
    for index, row in pdf.iterrows():
        # Convert row to dictionary
        row_dict = row.to_dict()
    
        # Truncate coordinates to 5 decimal digits
        if 'lat' in row_dict:
            row_dict['Latitude'] = round(float(row_dict['Latitude']), 5)
        if 'lon' in row_dict:
            row_dict['Longitude'] = round(float(row_dict['Longitude']), 5)
    
        # Serialize to JSON
        payload = json.dumps(row_dict)
    
        # Send to Event Hub
        event_data = EventData(payload)
        with producer:
            producer.send_batch([event_data])
    
        # Wait 100ms
        time.sleep(0.1)
    
  9. Legg til verdiene for variablene CONNECTION_STR og EVENT_HUB_NAME oppnådd i forrige avsnitt med tittelen Get required SAS key authentication keys.

  10. Kjør notatbokkoden. Dette oppretter Workorder-tabellen i KQL-databasen i WorkordersEventhouse eventhouse.

Et skjermbilde av Microsoft Fabric Eventhouse-grensesnittet som viser tabellen Arbeidsordrer med en Data-forhåndsvisningsfane valgt. Venstre navigasjonspanel viser KQL-databasetreet med WorkordersEventhouse utvidet, som inneholder tabeller med arbeidsordretabellen valgt.

Lag en Kusto-funksjon og legg den til som et kartlag

I denne seksjonen lager du en Kusto-funksjon som henter nåværende arbeidsordrelokasjonsdata fra Workorder-tabellen i eventhouse-et ditt, og bruker deretter denne funksjonen som datakilde for et Fabric Maps-kart. Funksjonen gjør det mulig for kartet å vise aktive arbeidsordrer som et lag, og gir en visuell oversikt over jobber som må planlegges og tildeles feltmannskaper.

Lag en Kusto-funksjon

Fra ditt eventhouse (KQL-database):

  1. Åpne KQL-databasen knyttet til eventhuset ditt.

  2. Velg Funksjoner og deretter Ny funksjon.

    Et skjermbilde som viser Functions-delen av WorkordersEventhouse-databasegrensesnittet som viser en tom tilstand med et stort sirkulært ikon som inneholder overlappende firkanter. Hovedoverskriften lyder 'Ingen funksjoner' med støttetekst under som sier 'Når du oppretter funksjoner, vises de her'. En fremtredende grønn knapp merket '+ Ny funksjon' er plassert nederst i midten av panelet, og inviterer brukerne til å lage sin første funksjon. Venstre sidefelt viser databasenavigasjonstreet med Funksjoner-mappen valgt og markert med en rød kant.

    Dette oppretter en spørring som, når den kjøres, lager en ny funksjon kalt WorkordersFunction.

  3. Skriv inn følgende:

    .create-or-alter function WorkordersFunction()
    {
        Workorders
        | project Latitude, Longitude, WorkorderID
    }
    
  4. Kjør spørringen

    Et skjermbilde av Microsoft Fabric Eventhouse-grensesnittet som viser Functions-seksjonen hvor en ny Kusto-funksjon kalt WorkordersFunction blir opprettet. Venstre sidefelt viser navigasjonstreet med Funksjoner-mappen valgt. Hovededitorpanelet viser KQL-spørringskoden: .create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. Kjør-knappen er synlig i verktøylinjen øverst, klar til å utføre funksjonsopprettelsesforespørselen. Dette steget etablerer en gjenbrukbar datakilde som henter ut kundekoordinater fra arbeidsordredataene for bruk i kartvisualiseringer.

    1 & 2 - KQL-spørringen som brukes til å lage WorkordersFunction-funksjonen .

    3 - Den nyopprettede WorkordersFunction-funksjonen

  5. I Functions-mappen velger du WorkordersFunction, og deretter Forhåndsvisning av resultater for å verifisere at den returnerer arbeidsordreposter med gyldige lokasjonsfelt.

    Et skjermbilde av Microsoft Fabric Eventhouse-grensesnittet som viser WorkordersFunction Kusto-funksjonen med resultater vist i en forhåndsvisningstabell. Venstre sidefelt viser databasenavigasjonstreet med Funksjoner-mappen valgt, og viser den nyopprettede WorkordersFunction. Hovedpanelet inneholder KQL-spørringskoden .create-or-alter funksjonen WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. Under spørringseditoren viser seksjonen Forhåndsvisningsresultater en datatabell med kolonner for Latitude, Longitude, og WorkorderID, som inneholder ni arbeidsordreposter med koordinatverdier i Wien, Østerrike-regionen (omtrent 48 grader nordlig bredde og 16 grader østlig lengdegrad). Tilstedeværelsen av flere gyldige lokasjonsposter viser at funksjonen med suksess henter ut kundekoordinater fra Workorder-tabellen for kartvisualisering.

Denne funksjonen fungerer som en gjenbrukbar datakilde for et Fabric Maps-kartdatalag, som demonstreres i neste seksjon.

Lag et kart og legg til funksjonen som et lag

I denne seksjonen lager du et Fabric Maps-kart og bruker den tidligere opprettede KQL-funksjonen som datalag. Kartet er konfigurert med et oppdateringsintervall slik at strømmende arbeidsordredata oppdateres automatisk, og gir en nær sanntids romlig oversikt over aktive arbeidsordrer. Deretter gir du laget nytt navn og justerer innstillingene for å kontrollere hvordan dataene vises på kartet. Denne sanntids geospatiale konteksten hjelper dispatchere med å overvåke feltaktivitet, vurdere etterspørsel på tvers av tjenesteområder og ta mer informerte rute- og tildelingsbeslutninger.

Lag et nytt kart

  1. Fra arbeidsområdet ditt velger du Nytt element.
  2. I panelet for nye gjenstander , skriv inn kartet i søkefeltet og velg Kart.
  3. I dialogen Nytt kart , skriv inn WorkordersMap i Navn-feltet og velg Opprette.

Legg til eventhouse på kartet

  1. I Utforsker-panelet , velg Fabric-elementer og deretter Legg til-knappen .

  2. Velg KQL-databasen fra menyen som vises når du velger Legg til-knappen .

    Et skjermbilde som viser Microsoft Fabric Maps-grensesnittet med Utforsker-panelet til venstre, med fanene Fabric-objekter og eksterne kilder. Fanen Stoffgjenstander velges med en legg til-knapp under, med en nedtrekksmeny under den, som dukket opp etter å ha valgt legg til-knappen. Den har KQL-databasen valgt. Hovedområdet viser standard verdenskart i kartområdet.

  3. Fra OneLake-katalogen velger du eventhouse WorkordersEventhouse som du opprettet tidligere, og velger deretter Legg til.

Tips

Hvis du får en feilmelding som KQL-databasen har en beskyttet etikett som begrenser tilgangen. Vennligst kontakt databaseeieren din for hjelp. Sjekk sensitivitetsetiketten på KQL-databasen din, da den kan begrense tilgangen. For mer informasjon, se Påfør følsomhetsetiketter på tekstilprodukter.

Vis funksjon på kart

  1. I Utforsker-panelet på det nye kartet ditt velger du eventhouse WorkordersEventhouse som du la til i forrige steg.

  2. Gå til KQL-funksjonen WorkordersFunction, og velg ellipsen (...) for å vise popup-menyen.

  3. Velg Vis på kart fra popup-menyen.

    Et skjermbilde av Microsoft Fabric Maps Explorer-panelet som viser en hierarkisk trestruktur med utvidet KQL-databaseseksjon. Treet viser WorkordersEventhouse som inneholder Workorders-Event tabell og WorkordersFunction-funksjonen. En ellipsemeny er åpen ved siden av WorkordersFunction og avslører alternativer, inkludert Vis på kartet markert med en rød rektangulær ramme.

  4. View Eventhouse-dataene i kartdialogen vises med forhåndsvisningsdata valgt. Ingen endringer er nødvendige. Sørg for at det stemmer, og velg deretter Neste

    Et skjermbilde av View Eventhouse-data i kart-dialogen i Microsoft Fabric som viser tre steg til venstre: Forhåndsvisning av data med et grønt haketegn, Sett geometri og dataoppdateringsintervall, og Gjennomgå og legg til kartet. Hovedpanelet viser Visualiser romlige data over tid på et kart med en nedtrekksmeny for å velge en KQL-spørring å visualisere satt til WorkordersFunction. Nedenfor er en forhåndsvisningstabell for spørringsresultater med kolonner for Latitude, Longitude, og WorkorderID som viser ni arbeidsordreposter med koordinater i Wien, Østrige-området. Tilbake- og Neste-knappene vises nederst til høyre.

  5. I steget Sett geometri og dataoppdateringsintervall , sett feltene som følger, og velg deretter Neste:

    • Datalagsnavn: WorkordersFunction

    • Geometrikolonneplassering: Bredde- og lengdegradsdata plasseres i separate kolonner

    • Breddegradskolonne: Breddegrad

    • Lengdegradskolonne: Lengdegrad

    • Dataoppdateringsintervall: 5 minutter

      Et skjermbilde av Microsoft Fabric-dialogen med tittelen View Eventhouse-data på kart som viser konfigurasjonssteget for Set-geometri og dataoppdateringsintervall. En venstre sidebar viser tre arbeidsflytsteg med haker som indikerer at forhåndsvisningsdata er fullført og at Sett geometri og oppdateringsintervall for data for øyeblikket er aktivt. Hovedpanelet inneholder en datalagsseksjon med et navnefelt som inneholder WorkordersFunction, etterfulgt av en kolonneseksjon for geometridata med tre nedtrekksmenyer: Geometrikolonneplassering satt til breddegrad og lengdegraddata plassert i separate kolonner, breddegradskolonne satt til breddegrad, og lengdegradskolonne satt til lengdegrad. Nedenfor er en dataoppdateringsseksjon med en nedtrekksmeny for dataoppdateringsintervall satt til 5 minutter. Tilbake- og Neste-knappene vises nederst til høyre.

  6. I trinnet Gjennomgå og legg til kart, se gjennom innstillinger og velg Legg til kart.

    Et skjermbilde av Microsoft Fabric View Eventhouse-dataene i kartdialogen som viser den endelige gjennomgangen og legg til kart-steget i konfigurasjonsflyten. Venstre sidefelt viser tre sekvensielle arbeidsflytsteg: Forhåndsvisning av data og Sett geometri- og dataoppdateringsintervall, begge fullført med grønne haker, og Gjennomgå og legg til på kart som for øyeblikket er aktivt med en blå prikkindikator. Hovedpanelet viser sammendraget av konfigurasjonsinnstillinger: Datakildeseksjonen viser KQL-databasen som WorkordersEventhouse og spørringssettet som WorkordersFunction. Datalagsseksjonen viser lagnavnet WorkordersFunction merket som nødvendig med en rød stjerne. Kolonneseksjonen for geometridata viser tre obligatoriske felt merket med røde stjerner: Geometrikolonneplassering satt til breddegrad og lengdegradsdata plassert i separate kolonner, breddegradskolonne satt til breddegrad, og lengdegradskolonne satt til lengdegrad. Dataoppdateringsseksjonen indikerer at oppdateringsintervallet er satt til 5 minutter, også markert som nødvendig. Dialogfoten inneholder Tilbake- og Legg til kart-knapper nederst til høyre, med knappen Legg til kart markert klar til å fullføre eventhouse-datalaget på kartet.

Funksjonsresultatene vises nå på det oppdaterte kartet.

Et skjermbilde som viser Microsoft Fabric Maps-grensesnittet som viser et kart over Wien, Østerrike, med røde sirkulære markører som indikerer arbeidsordreplasseringer. Utforskerpanelet til venstre viser et KQL-databasetre som inneholder WorkordersEventhouse og WorkordersFunction-oppføringer. Datalag-panelet øverst til venstre på kartet viser WorkordersFunction-laget med synlighetsknapp og innstillingsmeny.

Generer en optimalisert rute med flere stopp med Azure Maps Route Directions API

I denne delen oppretter du en ny notatbok som henter arbeidsordrekoordinater fra KQL-databasen og kaller Azure Maps Route Directions REST API. Du aktiverer tjenestens multi-stopp optimaliseringsfunksjon for å bestemme den mest effektive rekkefølgen for å besøke hvert sted, og returnerer rutegeometrien i den optimaliserte rekkefølgen. Denne utgangen brukes senere til å visualisere en anbefalt teknikerrute på kartet.

For å fullføre denne delen trenger du en Azure-konto med en Azure Maps-konto og abonnementsnøkkel. Hvis du ikke har en Azure-konto, kan du opprette en gratis konto før du begynner. For mer informasjon om hvordan du oppretter en Azure Maps-konto, se Opprett en Azure Maps-konto. For mer informasjon om hvordan du får en Azure Maps-abonnementnøkkel, se Få abonnementnøkkelen for kontoen din i Azure Maps-hurtigstart.

Opprett en notatbok i Fabric-arbeidsområdet ditt som henter den optimale ruten

  1. Fra arbeidsplassen din åpner du eventhouse WorkordersEventhouse som du tidligere opprettet.

  2. I venstre navigasjonspanel under KQL-databaser, velg WorkordersEventhouse.

  3. Den øverste menylinjen skal nå vise et alternativ for Notatbok. Velg den for å lage en ny notatbok.

    Et skjermbilde av Microsoft Fabric Eventhouse-grensesnittet som viser WorkordersEventhouse-databasen valgt i venstre navigasjonspanel under KQL-databaser. Menylinjen øverst viser flere alternativer, inkludert Notatbok, som er markert med en rød boks som indikerer at det er objektet du skal velge. Hovedpanelet viser Data Activity Tracker med inntastings- og spørringsstatistikk.

  4. I den nye notatboken lagrer du verdien for kustoUri-variabelen . Du bruker denne verdien i den nye notatboken du lager i steg 6.

  5. Koble notatboken din til WorkorderLocationsLakehouse ved å velge Fra OneLake-katalogen fra nedtrekksmenyen Legg til dataelementer .

    Et skjermbilde av et Microsoft Fabric-notatbokgrensesnitt som viser en kodecelle med PySpark Python-kode. Venstre panel viser ingen datakilder lagt til, med en knapp for å legge til dataelementer markert med en rød boks. Hovedkodeområdet viser et eksempel på en spørring for å lese data fra Kusto med variablene kustoQuery satt til Workorders, kustoUri som inneholder en Fabric Microsoft URL, og databasen satt til WorkordersEventhouse, kustoUri er markert med en rød boks for å indikere at verdien må kopieres og brukes i notatboken som er gitt i denne veiledningen.

    Bemerkning

    Når du oppretter et Lakehouse i Microsoft Fabric, opprettes et SQL-analyseendepunkt med samme navn automatisk.

    Begge elementene vises i arbeidsområdet, men de har forskjellige formål:

    • Lakehouse brukes til notatbøker, Spark-behandling og datainntak.
    • SQL-analyseendepunktet er en skrivebeskyttet T-SQL-spørringsflate over Lakehouse-dataene.

    Når du vedlegger eller oppretter en notatbok, sørg for å velge Lakehouse, ikke SQL-analyse-endepunktet. Hvis WorkorderLocationsLakehouse vises to ganger i OneLake-katalogen, filtrer etter Lakehouse .

  6. Når din nye notatbok er opprettet og koblet til hytta ved innsjøen, tast du inn følgende kode i den andre cellen i notatboken, erstatter standardkoden, og legg deretter til variabelverdiene som ble lagret i forrige steg:

    import os, json, requests
    from pyspark.sql import types as T
    from pyspark.sql.functions import col
    
    # ---- Configuration ----
    AZMAPS_SUBSCRIPTION_KEY = os.environ.get(
        'AZMAPS_SUBSCRIPTION_KEY',
        '<Your Azure Maps subscription key>'
    )
    API_VERSION = '2025-01-01'
    BASE_URL    = 'https://atlas.microsoft.com'
    
    # KQL query that invokes the stored function
    kustoQuery = """WorkordersFunction()"""
    # Your Kusto URI
    kustoUri = "" 
    # Your KQL database name
    database = "WorkordersEventhouse" 
    
    # The access credentials.
    accessToken = mssparkutils.credentials.getToken(kustoUri)
    kustoDf  = spark.read\
        .format("com.microsoft.kusto.spark.synapse.datasource")\
        .option("accessToken", accessToken)\
        .option("kustoCluster", kustoUri)\
        .option("kustoDatabase", database)\
        .option("kustoQuery", kustoQuery).load()
    
    # Write transformed response to a new file so the raw output is preserved
    OUTPUT_GEOJSON_PATH_TRANSFORMED = (
        'Files/OptimizedRoute.geojson' # GeoJSON output file 
    )
    
    # ---- Read Stores from KQL database table ----
    stores_df  = spark.read\
        .format("com.microsoft.kusto.spark.synapse.datasource")\
        .option("accessToken", accessToken)\
        .option("kustoCluster", kustoUri)\
        .option("kustoDatabase", database)\
        .option("kustoQuery", kustoQuery).load()\
        .select(
                    col("WorkorderID").alias("workorder_id"),
                    col("Latitude").alias("lat"),
                    col("Longitude").alias("lon")
                )
    
    # Ordered waypoints: origin first, then the rest by workorder_id
    # (API will re-order when optimizeWaypointOrder=True)
    stores_pd = stores_df.orderBy('workorder_id').toPandas()
    waypoints_lonlat = [[float(r['lon']), float(r['lat'])] for _, r in stores_pd.iterrows()]
    
    # ---- Build Directions request body (GeoJSON) ----
    features = []
    for idx, (lon, lat) in enumerate(waypoints_lonlat):
        features.append({
            "type": "Feature",
            "geometry": {"type": "Point", "coordinates": [lon, lat]},
            "properties": {"pointIndex": idx, "pointType": "waypoint"}
        })
    
    dir_body = {
        "type": "FeatureCollection",
        "features": features,
        "optimizeRoute": "fastestWithTraffic",
        "routeOutputOptions": ["routePath"],  # ensures route path geometry in response
        "travelMode": "truck",
        "optimizeWaypointOrder": True
    }
    
    # ---- Call Azure Maps Directions (POST) ----
    url     = f"{BASE_URL}/route/directions"
    params  = {"api-version": API_VERSION}
    headers = {
        "Accept": "application/geo+json",
        "Content-Type": "application/geo+json",
        "subscription-key": AZMAPS_SUBSCRIPTION_KEY
    }
    
    resp = requests.post(url, params=params, data=json.dumps(dir_body), headers=headers)
    resp.raise_for_status()
    resp_json = resp.json()  # exact payload as returned by the API
    
    # ---- Transform: move order.optimizedIndex -> properties.optimizedIndex for all Waypoint features to add as a data label in the map----
    for feat in resp_json.get("features", []):
        props = feat.get("properties") or {}
        if props.get("type") == "Waypoint":
            order = props.get("order") or {}
            opt_idx = order.pop("optimizedIndex", None)
            if opt_idx is not None:
                props["optimizedIndex"] = opt_idx + 1
            # reassign possibly-updated order (still contains inputIndex if present)
            props["order"] = order
            feat["properties"] = props
    
    # ---- Write transformed GeoJSON ----
    from notebookutils import mssparkutils
    mssparkutils.fs.put(OUTPUT_GEOJSON_PATH_TRANSFORMED, json.dumps(resp_json), True)
    
    print(f"Transformed Directions GeoJSON (waypoints carry properties.optimizedIndex) written to {OUTPUT_GEOJSON_PATH_TRANSFORMED}")
    
  7. Skriv inn Din Azure Maps-abonnementnøkkel i notatbokkoden for den AZMAPS_SUBSCRIPTION_KEY variabelen ved å erstatte "<Din Azure Maps-abonnementnøkkel>" med Din Azure Maps-abonnementnøkkel.

    Viktig!

    Dette eksempelet hardkoder Azure Maps-abonnementnøkkelen for enkelhets skyld. Ikke hardkode hemmeligheter i produksjonsmiljøer. Lagre og administrere hemmeligheter sikkert ved å bruke Azure Key Vault og referere til dem under kjøring. For mer informasjon, se Beste praksis for å beskytte hemmeligheter.

  8. Velg Lagre som-knappen i menyen og lagre notatboken som OptimizeRoute.

  9. Kjør notatboken for å lage OptimizedRoute.geojson-filen i Files-mappen til lakehouse-et ditt.

    Et skjermbilde av Microsoft Fabric-grensesnittet som viser en notatblokkkodecelle på høyre side med Python-kode som henter rutedata og skriver en GeoJSON-fil. Utforskerpanelet til venstre viser OneLake med WorkorderLocation utvidet og viser mappene Tabeller og filer. Filer-mappen inneholder WorkorderLocations.csv og OptimizedRoute.geojson markert med en rød boks som viser den nyopprettede utdatafilen. Senterpanelet Files viser begge filene med OptimizedRoute.geojson også markert. Notatbokens utdata nederst viser en suksessmelding som sier Transformed Directions GeoJSON-veipunkter bærer egenskaper.

Legg til lakehouse på kartet

  1. I Utforsker-panelet , velg Fabric-elementer og deretter Legg til-knappen .
  2. Velg Lakehouse fra menyen som vises når du velger Legg til-knappen .
  3. Fra OneLake-katalogen, velg lakehouse WorkorderLocationsLakehouse som du opprettet tidligere, og velg deretter Legg til.

Vis den optimaliserte ruten på kartet

  1. I Utforsker-panelet på det nye kartet ditt, velg lakehouse WorkorderLocationsLakehouse som du la til i forrige steg.

  2. Gå til OptimizedRoute.geojson i Filer-mappen i hytta ved innsjøen din og velg ellipsen (...) for å vise popup-menyen.

  3. Velg Vis på kart fra popup-menyen.

    Et skjermbilde av Microsoft Fabric Maps Explorer-panelet som viser fanen Lakehouse valgt med WorkorderLocationsLakehouse utvidet. Filer-mappen inneholder OptimizedRoute.geojson og WorkorderLocations.csv filer. En kontekstmeny er åpen ved siden av OptimizedRoute.geojson og viser alternativer, inkludert Vis på kart, markert med et rødt rektangel. Datalag-panelet viser WorkordersFunction som et eksisterende lag med en synlighetsbryter.

  4. I Datalag-panelet , slå av synligheten for WorkordersFunction-laget .

Når det er fullført, vises det nye kartlaget i Fabric Maps-kartet ditt.

Et skjermbilde av Microsoft Fabric Maps som viser et gatekart over Wien, Østerrike, med en optimalisert rute vist som blå linjer som forbinder ni nummererte veipunkter. Utforskerpanelet til venstre viser fanen Lakehouse utvidet med WorkorderLocationsLakehouse, som inneholder en Files-mappe med OptimizedRoute.geojson og WorkorderLocations.csv filer. Datalag-panelet viser to lag: WorkordersFunction med synlighet slått av, og OptimizedRoute som viser den tilknyttede rutestien med nummererte stopp fra 1 til 9 som indikerer den optimaliserte besøkssekvensen.

Kartlaginnstillinger

Fabric Maps tilbyr en rekke laginnstillinger som lar deg kontrollere hvordan data presenteres på kartet. I denne seksjonen tilpasser du laget som er laget fra ruteoptimaliseringsprosessen ved å gi laget nytt navn, justere symbolstilen og konfigurere etiketter basert på feltverdier. Disse innstillingene bidrar til å forbedre lesbarheten og gjør det enklere å tolke arbeidsordredata med et blikk.

Gi laget nytt navn

  1. I Datalag-panelet , åpne menyen Optimaliserte rute ved å velge ellipsen (...).

  2. Når du er i alternativmenyen, velg Omdøp.

    Et skjermbilde av Microsoft Fabric Maps Data-lagpanelet som viser to lag: WorkordersFunction og OptimizedRoute. Optimaliserte rute-laget har utvidet alternativmenyen med et rødt rektangel som fremhever Rename-alternativet. Andre synlige menyvalg inkluderer Zoom for å tilpasse, Dupliser og Slett. Panelet vises over en bakgrunn over et gatekart som viser Wien, Østerrike-området.

Fjern etiketter på kartnivå

Når du slår Labels av eller på kartnivå, påvirker det basemap-tekstetiketter. Disse betegnelsene kommer fra den underliggende kartstilen og inkluderer:

  • By- og bynavn
  • Land- og regionsnavn
  • Vei- og veinavn
  • Navn på vannelementer (elver, innsjøer, hav)
  • Andre administrative eller geografiske stedsnavn

Når etiketter ikke vises, fremstår basemapet som «renere» og mer minimalistisk, uten stedsnavntekst gjengitt på basemap.

For å slå av basemap-etiketter:

  1. Åpne kartet ditt i Fabric Maps.

  2. Velg kartinnstillinger i menylinjen.

  3. Finn avkrysningsboksen for etiketter , og fjern haken i den.

    Et skjermbilde som viser Microsoft Fabric Maps-grensesnittet som viser et gatekart over Wien, Østerrike, med lilla rutelinjer som forbinder flere veipunkter. Venstre side viser Utforsker-panelet med Datalag-panelet som lister opp ArbeidsordrerFunksjon og Optimaliserte rute-lag. Den øverste verktøylinjen fremhever knappen for kartinnstillinger markert med et rødt rektangel. Høyre side viser Basemap-innstillingspanelet med Labels-avkrysningsboksen ukrysset og markert med et rødt rektangel.

For mer informasjon om kartinnstillinger i Fabric Maps, se Endre kartinnstillinger

Legg til dataetiketter i laget

Dataetiketter er datadrevne annotasjoner som kommer fra ett eller flere felt i lagets datasett. De er direkte knyttet til kartfunksjoner på lagnivå, som punktene på kartet som representerer arbeidsordre-lokasjoner. For mer informasjon om Fabric Maps dataetiketter, se Data label-innstillinger.

  1. Velg Optimalisert rute i Datalag-panelet . Innstillingspanelet for optimalisert rute vises på høyre side av skjermen.

  2. I panelet for innstillinger for optimalisert rute , velg > innstillinger for dataetikett.

  3. Velg Aktiver dataetiketter for å aktivere dataetiketter. Dette viser flere innstillinger for dataetiketter.

  4. Endre følgende innstillinger for dataetiketter:

    • Dataetiketter: optimaliserteIndeks
    • Tekstfarge: hvit
    • Tekststørrelsesbryter satt til 20
    • Tekststrekfarge: Svart
    • Tekststrekbredde-glidebryteren satt til 2

    Et skjermbilde av Microsoft Fabric Maps som viser innstillingspanelet for dataetiketter utvidet på høyre side med Aktiver dataetiketter slått på, nedtrekksmenyen for dataetiketter satt til optimaldIndex, tekstfarge som viser en hvit fargevelger, tekststørrelsesglideren satt til 20, tekststrekfarge som viser svart, og tekststrekbredde-glidebryteren satt til 2. Hovedkartområdet viser et gatekart over Wien, Østerrike, med lilla rutelinjer som forbinder nummererte veipunkter merket 1 til 9 og angir den optimaliserte besøksrekkefølgen. Datalagspanelet til venstre viser WorkordersFunction med synlighet skjult og Optimalisert rute som aktivt lag.

Sammendrag

Denne veiledningen demonstrerte hvordan man bygger et ende-til-ende, sanntids rutingscenario for arbeidsordre ved bruk av Microsoft Fabric Real-Time Intelligence og Fabric Maps. Strømming av arbeidsordredata importeres, transformeres og forespørres ved bruk av KQL, og visualiseres deretter på et kart for å lage en dynamisk, kontinuerlig oppdatert visning av arbeidsordreplasseringer. Ved å integrere rutelogikk og optimale ruteberegninger viser løsningen hvordan sanntids geospatiale analyser kan hjelpe operatører og feltoperasjonsteam med å ta raskere og bedre informerte beslutninger.

Dette mønsteret kan utvides til andre lokasjonsbaserte scenarier som flåtesporing, overvåking av eiendeler og hendelsesrespons. Ved å kombinere hendelsesdrevne data, KQL-basert analyse og kartbasert visualisering, muliggjør Microsoft Fabric en overgang fra rå strømmedata til handlingsrettede geografiske innsikter i nær sanntid.

Neste trinn

For mer informasjon om Fabric Maps-artiklene som dekkes i denne veiledningen: