Tutorial: Byg realtids arbejdsordre-routing med Fabric Maps

Microsoft Fabric Maps tilbyder geospatial visualisering og analyse for at levere handlingsorienterede indsigter fra realtids- og historiske rumlige data.

I denne vejledning bruger en feltdispatcher i elforsyningsselskabet Microsoft Fabric Maps til at oprette og administrere reparationsarbejdsordrer, når der rapporteres om strømafbrydelser eller fejl i aktiverne. Scenariet fokuserer på at lokalisere berørte kunder, visualisere aktive arbejdsordrer i realtid og effektivt sende hold ud for at genoprette servicen.

Denne vejledning demonstrerer, hvordan kundernes placeringer kortlægges, live arbejdsordrer vises på kortet, og en optimal rute beregnes ved hjælp af Azure Maps Route Directions API. Tutorialen afsluttes med en optimeret rute, der vises på kortet.

Fabric Maps kører inden for Fabric Real-Time Intelligence og indsamler streaming-telemetri ved hjælp af Eventstream og Eventhouse til realtidsovervågning. Færdiggørelser af arbejdsordrer og driftsresultater gemmes i OneLake, hvor de kan bruges til ruteoptimering og analyser, som vises på kortet.

I denne vejledning vil du:

  • Opret et søhus og upload eksempler på arbejdsordredata.
  • Opsæt en eventstream til at skrive arbejdsordredata til et eventhouse.
  • Opret en Kusto-funktion til at udtrække kundekoordinater fra de importerede arbejdsordredata.
  • Opret et kort og tilføj funktionen som et kortlag.
  • Beregn en optimal rute ved hjælp af Azure Maps Route Directions API.
  • Tilføj den optimerede rute til kortet som et lag.
  • Konfigurer kort- og lagindstillinger.

Forudsætninger

Før du starter denne tutorial, bør du gennemgå Real-Time Intelligence-tutorials for at blive fortrolig med kernekoncepterne og arbejdsgangene.

Opret et søhus og upload eksempler på arbejdsordredata

For at simulere en realtids streamingkilde bruger notesbogen i de følgende trin eksempeldata uploadet til et søhus. I produktion ville disse data blive streamet i stedet for statiske.

Opret arbejdsordredatafilen

Arbejdsordredatafilen indeholder eksempler på arbejdsordreposter, der bruges i denne vejledning til at simulere en realtids streamingkilde. Efter at have oprettet filen, importer den til et søhus i næste trin.

Kopier og indsæt følgende indhold i en tekstfil, og gem det derefter som WorkorderLocations.csv. Du bruger denne fil i næste trin.

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

Opret et lakehouse og importer arbejdsordredatafilen

Opret et nyt lakehouse til indkommende arbejdsordredata og importer filen for arbejdsordreplaceringen.

  1. Fra dit arbejdsområde vælger du Nyt element, indtast lakehouse i søgefeltet, og vælger det for at oprette et nyt lakehouse.
  2. Indtast et navn WorkorderLocationsLakehouse og vælg Opret dem.
  3. I det nye søhus vælger du Upload filer og uploader WorkorderLocations.csv-filen .
  4. I det nye søhus skal du vælge Explorer-panelet i venstre side af skærmen.
  5. I Filer-sektionen i Stifinder skal du vælge WorkorderLocations.csv for at se den fil, du har uploadet.
  6. I Visningsindstillingerne vælger du første række som header.
  7. (Valgfrit) I rullemenuen for visning, vælg Table View.

Skærmbillede af WorkorderLocations.csv-filen efter import til et sommerhus ved søen.

Opret en eventstream og skriv data til et eventhouse

I dette afsnit designer du et eventstream-flow ved hjælp af et brugerdefineret endpoint og sender data via en notebook for at simulere realtidsstreaming.

Microsoft Fabric Eventstream er en realtids datastreamingtjeneste, der gør det muligt at indføre, behandle og dirigere hændelsesdata inden for Microsoft Fabric-økosystemet. Det giver en no-code-oplevelse til at opbygge hændelsesdrevne arbejdsgange, hvilket muliggør problemfri integration af realtidsdata fra forskellige kilder og dirigering til flere destinationer. For mere information om understøttede datakilder eller hvordan man forbinder til et brugerdefineret endpoint, se Oversigt over Microsoft Fabric eventstreams.

Ved at indlæse eventstream-data i et eventhouse gør du streamingbegivenheder tilgængelige for behandling med Kusto, hvor du kan transformere og analysere dem i realtid ved hjælp af tabeller eller funktioner. Du kan få flere oplysninger under Oversigt over Eventhouse.

Opret en eventstream og eventhouse

  1. Fra dit arbejdsområde vælger du Nyt element, og indtast eventstream i søgefeltet.

  2. Vælg Eventstream.

  3. I dialogen Ny Eventstream indtast et Navn: "WorkordersEventstream", og vælg derefter Create.

  4. I skærmen Design et flow til at indtage, transformere og rute streamingbegivenheder , vælg Brug brugerdefineret endpoint.

    Skærmbillede af skærmen Design et flow til at indlæse, transformere og rute streamingbegivenheder i Fabric, der viser muligheden for at bruge brugerdefineret endpoint.

  5. I dialogen for brugerdefineret endpoint Tilføj kilde, vælg Tilføje.

    Et screenshot af dialogen Tilføj kildekode for Custom endpoint i Microsoft Fabric, der viser en breadcrumb-navigation med Custom endpoint-pilen WorkordersEventstream øverst. Dialogen indeholder et kildenavn-felt med en rød stjerne markeret som påkrævet, der indeholder teksten CustomEndpoint-Source. En turkis tilføje-knap er fremhævet i nederste højre hjørne af dialogen, hvilket indikerer, at den skal vælges uden yderligere handling.

    Eventstrømmen er nu oprettet. Dernæst tilføjer du et Eventhouse som destination.

  6. I WorkordersEventstream-noden i eventstream-designeren vælg Eventhouse fra Transform-events eller tilføj destinationsdropdown-listen.

    Et screenshot af Microsoft Fabric eventstream-designeren, der viser et flowdiagram med CustomEndpoint-Source forbundet til WorkordersEventstream-noden. En dropdown-menu udvides fra Transformér begivenheder eller tilføj destinationsflise i højre side, hvor sektionen Destinationer nederst vises med flere muligheder, herunder Eventhouse, som er fremhævet med et rødt rektangel, der angiver, at den skal vælges.

  7. Eventhouse-destinationskonfigurationspanelet vises på højre side af skærmen. Udfyld de ønskede oplysninger som følger, og vælg derefter Gem:

    1. Dataindlæsningstilstand: Sæt til hændelsesbehandling før indlæsning.
    2. Destinationsnavn: Sæt til arbejdsordrerEventhouse.
    3. Arbejdsområde: En dropdown-menu, der viser navnet på dit arbejdsområde.
    4. Eventhouse: Vælg Opret nyt og opret et eventhouse kaldet WorkordersEventhouse.
    5. KQL-database: Vælg arbejdsordrerEventhouse.
    6. KQL Destinationstabell: Vælg Opret nyt link og opret en ny tabel kaldet Workorders.
    7. Inputdataformat: Vælg Json.
    8. Aktiver indtagelse efter tilføjelse af datakilden: Vælg afkrydsningsboksen.

    Et screenshot, der viser Eventhouse destinationskonfigurationspanel, der viser dataindlæsningstilstand med hændelsesbehandling før indtastning valgt, destinationsnavn sat til WorkordersEventhouse, arbejdsområde-dropdown, der viser Mit arbejdsområde, Eventhouse-dropdown, der viser WorkordersEventhouse med Opret nyt link, KQL-databasedropdown, der viser WorkordersEventhouse, KQL destinationstabel dropdown, der viser nye arbejdsordrerEventhouse med Opret nyt link, Aktiver indtagelse efter tilføjelse af datakilde-afkrydsningsboksen tjekket, og en grøn Gem-knap nederst.

  8. Når eventhouset er tilføjet som destination, vælger du Publish for at offentliggøre din nye eventstream.

    Et screenshot, der viser Eventstream-designeren, der viser et flow med CustomEndpoint-Workorders kilde forbundet til en Workorders-stream-node, som igen forbinder til WorkordersEventhouse-destinationen. Publicer-knappen er fremhævet i øverste højre hjørne af værktøjslinjen. Et banner i redigeringstilstand angiver, at ændringer går live, når de er offentliggjort.

Få de nødvendige SAS-nøgle-autentificeringsnøgler

Du skal bruge Event Hub-navnet og Connection string-primærnøgleværdierne fra SAS Key autentificeringssektionen i din notesbogskode.

  1. Vælg den brugerdefinerede endpoint-kildeflise, du lige har tilføjet.

  2. I Details-panelet vælger du SAS Key Authentication.

  3. Kopier følgende to værdier og gem dem til brug i din notesbogskode:

    • Event hub-navn: Bruges til variablen EVENT_HUB_NAME.
    • Forbindelsesstreng-primærnøgle: Bruges til CONNECTION_STR-variabelen .

    Et screenshot, der viser Eventstream-designeren med SAS Key Authentication-muligheden valgt i detaljepanelet, hvor Event hub-navnet og Connection-streng-primærnøglen fremhæves, som bruges i notesbogskoden i et senere trin i denne vejledning.

Simulér realtidsindtagelse ved hjælp af en notesbog

I dette afsnit opretter du en notesbog, der er forbundet til det søhus, du oprettede tidligere, og bruger derefter den medfølgende kode til at læse CSV-dataene og sende begivenheder til eventstreamen. Denne proces simulerer realtidsdataindlæsning. Til demoer kan du køre notesbogen manuelt eller planlægge den til at køre periodisk.

Opret en notesbog i dit Fabric-arbejdsområde

Opret en notesbog med kode til at importere opgaveplaceringsfilen fra dit lakehouse til den eventstream, du oprettede i forrige afsnit. Dette simulerer en realtids streamingkilde, som i et produktionsmiljø streamer data i stedet for at bruge statiske data.

  1. Fra dit arbejdsområde vælger du Nyt element, og indtast notesbog i søgefeltet.

  2. Vælg Notesbog.

    Et screenshot af Microsoft Fabric Nye element-dialogen med en søgeboks, der indeholder tekstnotesbogen. Søgeresultaterne viser en Notebook-flise med et dokumentikon, der viser beskrivelsen Opret en notesbog til at udforske data og bygge maskinlæringsmodeller. Notesbogsindstillingen er fremhævet, hvilket indikerer, at den kan vælges for at oprette et nyt notesbogselement.

  3. I dialogen Ny notesbog indtast WorkorderLocations i Navn-feltet , og vælg derefter Create.

  4. For at forbinde din notesbog til søhuset, vælg Fra OneLake-kataloget fra rullemenuen Tilføj dataelementer .

    Et screenshot af Microsoft Fabric Explorer-panelet, der viser fanen Dataobjekter valgt med beskeden Ingen datakilder tilføjet og et tomt mappeikon. Under beskeden er der en dropdown-knap Tilføj dataelementer, der udvides til at afsløre tre menuvalg: Fra OneLake-kataloget med et databaseikon, Fra Real-Time hub med et lynikon og Nyt søhus med et plustegn. From OneLake-katalogmuligheden er fremhævet med en mørk kant, der angiver valget.

  5. Vælg WorkorderLocationsLakehouse fra OneLake-kataloget og vælg Connect-knappen . Dette søhus er det, du tidligere har skabt.

  6. Efter at have oprettet notesbogen og forbundet den til dit lakehouse, indsæt følgende kode i den første celle og kør den for at installere Azure Event Hubs SDK:

    # Install Azure Event Hubs SDK (only needed once per environment)
    %pip install azure-eventhub
    
  7. Vælg + Kode for at oprette en ny celle i notesbogen.

    Et screenshot af Microsoft Fabric-notebook-grænsefladen, der viser en kodecelle med to linjer Python-kode. Linje 1 indeholder en kommentar, der lyder Install Azure Event Hubs SDK, kun nødvendigt én gang pr. miljø. Linje 2 viser pip install command procent, pip install azure-eventhub. Under kodecellen viser et tooltip Tilføj kode-celle, der peger på en plus-kode-knap markeret med et rødt rektangel. En Plus-Markdown-knap vises til højre. Øverst til højre viser PySpark Python som den valgte kerne.

  8. Vælg den nye celle og indtast 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. Tilføj værdierne for variablerne CONNECTION_STR og EVENT_HUB_NAME , som du fik i det forrige afsnit med titlen Få nødvendige SAS-nøglegodkendelsesnøgler.

  10. Kør notebook-koden. Dette skaber Workorder-tabellen i KQL-databasen i WorkordersEventhouse eventhouse.

Et screenshot af Microsoft Fabric Eventhouse-grænsefladen, der viser tabellen med en Data-forhåndsvisningsfane valgt. Venstre navigationspanel viser KQL-databasetræet med WorkordersEventhouse udvidet, som indeholder tabeller med arbejdsordretabellen valgt.

Opret en Kusto-funktion og tilføj den som et kortlag

I dette afsnit opretter du en Kusto-funktion, der henter aktuelle arbejdsordreplaceringsdata fra Workorder-tabellen i dit eventhouse, og bruger derefter denne funktion som datakilde til et Fabric Maps-kort. Funktionen gør det muligt for kortet at vise aktive arbejdsordrer som et lag, hvilket giver et visuelt overblik over opgaver, der skal planlægges og tildeles felthold.

Opret en Kusto-funktion

Fra dit eventhouse (KQL-database):

  1. Åbn KQL-databasen , der er tilknyttet dit eventhouse.

  2. Vælg Funktioner og derefter Ny funktion.

    Et screenshot, der viser Funktioner-sektionen i WorkordersEventhouse-databasegrænsefladen, som viser en tom tilstand med et stort cirkulært ikon med overlappende firkanter. Hovedoverskriften lyder Ingen funktioner med understøttende tekst, der siger: Når du opretter funktioner, vises de her. En markant grøn knap mærket + Ny funktion er placeret nederst i midten af panelet og inviterer brugerne til at oprette deres første funktion. Venstre sidebjælke viser databasens navigationstræ med Funktioner-mappen valgt og markeret med en rød kant.

    Dette trin opretter en forespørgsel, som ved kørsel opretter en ny funktion kaldet WorkordersFunction.

  3. Angiv følgende forespørgsel:

    .create-or-alter function WorkordersFunction()
    {
        Workorders
        | project Latitude, Longitude, WorkorderID
    }
    
  4. Kør forespørgslen.

    Et screenshot af Microsoft Fabric Eventhouse-grænsefladen, der viser Functions-sektionen, hvor en ny Kusto-funktion ved navn WorkordersFunction bliver oprettet. Venstre sidebjælke viser navigationstræet med Funktioner-mappen valgt. Hovededitorpanelet viser KQL-forespørgselskoden: .create-or-alter function WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. Kør-knappen er synlig i værktøjslinjen øverst, klar til at udføre funktionsoprettelsesforespørgslen. Dette trin etablerer en genanvendelig datakilde, der udtrækker kundekoordinater fra arbejdsordredataene til brug i kortvisualiseringer.

    1 & 2 - KQL-forespørgslen, der bruges til at oprette WorkordersFunction-funktionen .

    3 - Den nyoprettede WorkordersFunction-funktion .

  5. I Funktioner-mappen vælg WorkordersFunction, og derefter Forhåndsvisning af resultater for at sikre, at den returnerer arbejdsordreposter med gyldige placeringsfelter.

    Et screenshot af Microsoft Fabric Eventhouse-grænsefladen, der viser WorkordersFunction Kusto-funktionen med resultater vist i en forhåndsvisningstabel. Venstre sidebjælke viser databasenavigationstræet med Funktioner-mappen valgt, som viser den nyoprettede WorkordersFunction. Hovedpanelet indeholder KQL-forespørgselskoden .create-or-alter funktionen WorkordersFunction() { Workorders | project Latitude, Longitude, WorkorderID }. Under forespørgselseditoren viser Preview-resultatsektionen en datatabel med kolonner for Latitude, Longitude, og WorkorderID, som indeholder ni arbejdsordreposter med koordinatværdier i Wien, Østrig-regionen (ca. 48 grader nordlig bredde og 16 grader østlig længde). Tilstedeværelsen af flere gyldige lokationsposter demonstrerer, at funktionen med succes udtrækker kundekoordinater fra Workorder-tabellen til kortvisualisering.

Denne funktion fungerer som en genanvendelig datakilde for et Fabric Maps-kortdatalag, hvilket demonstreres i næste afsnit.

Opret et kort og tilføj funktionen som et lag

I dette afsnit opretter du et Fabric Maps-kort og bruger den tidligere oprettede KQL-funktion som datalag. Kortet er konfigureret med et opdateringsinterval, så streamingdata fra arbejdsordrer automatisk opdateres og giver et næsten realtids rumligt overblik over aktive arbejdsordrer. Du omdøber derefter laget og justerer dets indstillinger for at styre, hvordan dataene vises på kortet. Denne live geospatiale kontekst hjælper dispatchere med at overvåge feltaktivitet, vurdere efterspørgslen på tværs af serviceområder og træffe mere informerede rute- og tildelingsbeslutninger.

Opret et nyt kort

  1. Fra dit arbejdsområde vælger du Nyt element.
  2. I panelet Nye genstande indtaster du kort i søgefeltet og vælger Kort.
  3. I dialogen Nyt Kort indtast WorkordersMap i Navn-feltet og vælg Create.

Tilføj eventhouse til kortet

  1. I Stifinder-panelet vælger du Fabric-elementer og derefter Tilføj knappen.

  2. Vælg KQL-databasen fra menuen, der vises, når du vælger Tilføj knappen.

    Et screenshot, der viser Microsoft Fabric Maps-grænsefladen med Explorer-panelet til venstre med fanerne Fabric-elementer og eksterne kilder. Fanen Stofgenstande vælges med en tilføj-knap nedenunder, med en dropdown-menu nedenunder, som dukkede op efter at have valgt tilføje-knappen. Den har valgt KQL-databasen. Hovedområdet viser standardverdenskortet i kortområdet.

  3. Fra OneLake-kataloget vælger du det eventhouse WorkordersEventhouse, du tidligere oprettede, og vælger derefter Tilføje.

Tips

Hvis du får en fejl som for eksempel KQL-databasen, har den en beskyttet etiket, der begrænser adgangen. Kontakt venligst din database-ejer for hjælp, tjek følsomhedsetiketten på din KQL-database, da det kan begrænse adgangen. For mere information, se Påfør følsomhedsetiketter på tekstilvarer.

Vis funktion på kort

  1. I Explorer-panelet på dit nye kort vælger du eventhouse WorkordersEventhouse , som du tilføjede i det forrige trin.

  2. Gå til KQL-funktionen WorkordersFunction, og vælg ellipsen (...) for at åbne menuen.

  3. Vælg Vis på kort fra pop-up-menuen.

    Et screenshot af Microsoft Fabric Maps Explorer-panelet, der viser en hierarkisk træstruktur med KQL-databasesektionen udvidet. Træet viser WorkordersEventhouse, der indeholder Workorders-Event tabel og WorkordersFunction-funktionen. En ellipsemenu er åben ved siden af WorkordersFunction og afslører muligheder, herunder vis på kortet markeret med en rød rektangelkant.

  4. Visningen af Eventhouse-data i kortdialogen vises med Forhåndsvisningsdata valgt. Ingen ændringer er nødvendige. Sørg for, at det er korrekt, og vælg derefter Næste

    Et screenshot af View Eventhouse-data på kort-dialogen i Microsoft Fabric, der viser tre trin til venstre: Forhåndsvis data med et grønt flueben, Sæt geometri og dataopdateringsinterval, og Gennemgå og tilføj til kortet. Hovedpanelet viser Visualiser rumlige data over tid på et kort med en dropdown-menu til Vælg en KQL-forespørgsel til visualisering, sat til WorkordersFunction. Nedenfor er en forespørgselsresultat-forhåndsvisningstabel med kolonner for Latitude, Longitude og WorkorderID, der viser ni arbejdsordreposter med koordinater i Wien, Østrig-området. Tilbage og Næste-knapperne vises nederst til højre.

  5. I trinnet Set geometri og dataopdateringsinterval skal du sætte felterne som følger, og derefter vælge Næste:

    • Datalagsnavn: WorkordersFunction

    • Geometrikolonneplacering: Bredde- og længdegradsdata er i separate kolonner

    • Breddegradskolonne: Breddegrad

    • Længdegradskolonne: Længdegrad

    • Dataopdateringsinterval: 5 minutter

      Et screenshot af Microsoft Fabric-dialogen med titlen View Eventhouse data på kortet, der viser konfigurationstrinnet for Set geometri og dataopdateringsintervallet. En venstre sidebjælke viser tre arbejdsgangstrin med flueben for at angive Forhåndsvisningsdata er færdig, og at Set-geometri og dataopdateringsinterval aktuelt er aktivt. Hovedpanelet indeholder en datalagsektion med et navnefelt, der indeholder WorkordersFunction, efterfulgt af en kolonnesektion for geometridata med tre dropdowns: Geometri-kolonneplacering sat til breddegrad og længdegradsdata placeret i separate kolonner, breddegradskolonne sat til breddegrad og længdegrad sat til længdegrad. Nedenfor er en dataopdateringssektion med en dropdown for dataopdateringsinterval sat til 5 minutter. Tilbage og Næste-knapperne vises nederst til højre.

  6. I trinnet Gennemgå og tilføj til kort gennemgår du indstillingerne og vælger Tilføj til kort.

    Et screenshot af Microsoft Fabric View Eventhouse-data i kortdialogen, der viser det endelige gennemgangs- og tilføj til kort-trin i konfigurationsarbejdsprocessen. Venstre sidebjælke viser tre sekventielle arbejdsgangetrin: Forhåndsvisning af data og Sæt geometri og dataopdateringsinterval, begge udført med grønne flueben, samt Gennemgå og tilføj til kort, der aktuelt er aktivt, med en blå prikkindikator. Hovedpanelet viser oversigten over konfigurationsindstillingerne: Datakildesektionen viser KQL-databasen som WorkordersEventhouse og queryset som WorkordersFunction. Datalagssektionen viser lagnavnet WorkordersFunction markeret som påkrævet med en rød stjerne. Geometri-datakolonneafsnittet viser tre nødvendige felter markeret med røde stjerner: Geometri-kolonneplacering sat til breddegrad og længdegradsdata placeret i separate kolonner, breddegradskolonne sat til breddegrad og længdegrad sat til længdegrad. Dataopdateringssektionen angiver, at opdateringsintervallet er sat til 5 minutter, også markeret som påkrævet. Dialogfoden indeholder Tilbage og Tilføj til kort-knapper placeret nederst til højre, med knappen Tilføj til kort markeret, klar til at færdiggøre tilføjelsen af eventhouse-datalaget til kortet.

Funktionsresultaterne vises nu på det opdaterede kort.

Et screenshot, der viser Microsoft Fabric Maps-grænsefladen og viser et kort over Wien, Østrig, med røde cirkulære markører, der angiver arbejdsordreplaceringer. Explorer-panelet til venstre viser et KQL-databasetræ, der indeholder WorkordersEventhouse og WorkordersFunction-poster. Datalagspanelet øverst til venstre på kortet viser WorkordersFunction-laget med en synlighedsknap og indstillingsmenu.

Generer en optimeret multi-stop rute med Azure Maps Route Directions API

I dette afsnit opretter du en ny notesbog, der henter koordinater til arbejdsordrer fra KQL-databasen og kalder Azure Maps Route Directions REST API. Du aktiverer tjenestens multistop-optimeringsfunktion for at bestemme den mest effektive rækkefølge for hvert besøg og returnerer rutegeometrien i den optimerede rækkefølge. Du bruger dette output senere til at visualisere en anbefalet teknikerrute på kortet.

For at fuldføre denne sektion skal du have en Azure-konto med en Azure Maps-konto og abonnementsnøgle. Hvis du ikke har en Azure-konto, så opret en gratis konto. For mere information om oprettelse af en Azure Maps-konto, se Opret en Azure Maps-konto. For mere information om at få en Azure Maps-abonnementsnøgle, se Få abonnementsnøglen til din konto i Azure Maps-quickstart.

Opret en notesbog i dit Fabric-arbejdsområde, der henter den optimale rute

  1. Fra dit arbejdsområde åbner du det eventhouse WorkordersEventhouse, som du tidligere har oprettet.

  2. I venstre navigationspanel under KQL-databaser skal du vælge WorkordersEventhouse.

  3. Den øverste menulinje viser nu en mulighed for Notebook. Vælg den for at oprette en ny notesbog.

    Et screenshot af Microsoft Fabric Eventhouse-grænsefladen, der viser WorkordersEventhouse-databasen, valgt i venstre navigationspanel under KQL-databaser. Den øverste menulinje viser flere muligheder, herunder Notesbog, som er markeret med en rød boks, der angiver, at det er det element, der skal vælges. Hovedpanelet viser Data Activity Tracker med indlæsnings- og forespørgselsstatistikker.

  4. I den nye notesbog, gem værdien for kustoUri-variablen . Du bruger denne værdi i den nye notesbogskode, du opretter i trin 6.

  5. Forbind din notesbog til WorkorderLocationsLakehouse ved at vælge Fra OneLake-kataloget i dropdown-listen Tilføj dataelementer .

    Et screenshot af en Microsoft Fabric-notebook-grænseflade, der viser en kodecelle med PySpark Python-kode. Venstre panel viser Ingen datakilder tilføjet med en knap Tilføj dataelementer, der er markeret af en rød boks. Hovedkodeområdet viser et eksempel på forespørgsel til læsning af data fra Kusto med variablerne kustoQuery sat til Workorders, kustoUri med en Fabric Microsoft URL, og databasen sat til WorkordersEventhouse, kustoUri er fremhævet med en rød boks for at angive, at værdien skal kopieres og bruges i notebook-koden i denne vejledning.

    Bemærkning

    Når du opretter et Lakehouse i Microsoft Fabric, oprettes et SQL-analyse-endpoint med samme navn automatisk.

    Begge elementer vises i arbejdsområdet, men de tjener forskellige formål:

    • Lakehouse bruges til notesbøger, Spark-behandling og dataindlæsning.
    • SQL-analyse-endpointet er en skrivebeskyttet T-SQL-forespørgselsoverflade over Lakehouse-dataene.

    Når du vedhæfter eller opretter en notesbog, skal du sikre dig at vælge Lakehouse og ikke SQL-analyse-endpointet. Hvis WorkorderLocationsLakehouse optræder to gange i OneLake-kataloget, filtrer efter Lakehouse .

  6. Når din nye notesbog er oprettet og forbundet til dit søhus, indtaster du følgende kode i den anden celle i din notesbog og erstatter standardkoden. Tilføj derefter de variabelværdier, du gemte i det forrige trin:

    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. Indtast Din Azure Maps-abonnementsnøgle i notesbogskoden for den AZMAPS_SUBSCRIPTION_KEY variabel ved at erstatte "<Din Azure Maps-abonnementsnøgle>" med Din Azure Maps-abonnementsnøgle.

    Vigtig

    Dette eksempel hardkoder Azure Maps-abonnementsnøglen for enkelhedens skyld. Kod ikke hemmeligheder i produktionsmiljøer. Gem og administrer hemmeligheder sikkert ved at bruge Azure Key Vault og referer til dem under kørsel. For mere information, se Bedste praksis for beskyttelse af hemmeligheder.

  8. Vælg knappen Gem som i menuen og gem notesbogen som OptimizeRoute.

  9. Kør notebooken for at oprette OptimizedRoute.geojson-filen i Files-mappen på dit lakehouse.

    Et screenshot af Microsoft Fabric-grænsefladen, der viser en notesbogskodecelle på højre side med Python-kode, der henter rutedata og skriver en GeoJSON-fil. Explorer-panelet til venstre viser OneLake med WorkorderLocation udvidet, der viser mapperne Tables and Files. Filer-mappen indeholder WorkorderLocations.csv og OptimizedRoute.geojson fremhævet med en rød boks, der angiver den nyoprettede outputfil. Panelet i midten af Filer viser begge filer med OptimizedRoute.geojson også markeret. Notebook-outputtet nederst viser en succesbesked med angivelsen Transformed Directions GeoJSON-waypoints bærer egenskaber.

Tilføj lakehouse til kortet

  1. I Stifinder-panelet vælger du Fabric-elementer og derefter Tilføj knappen.
  2. Vælg Lakehouse fra menuen, der vises, når du vælger Tilføj knap.
  3. Fra OneLake-kataloget vælger du lakehouse WorkorderLocationsLakehouse, som du tidligere oprettede, og vælger derefter Tilføje.

Vis den optimerede rute på kortet

  1. I Explorer-panelet på dit nye kort vælger du lakehouse WorkorderLocationsLakehouse, som du tilføjede i det forrige trin.

  2. Gå til OptimizedRoute.geojson i mappen Filer i dit lakehouse og vælg ellipsen (...) for at vise pop-up-menuen.

  3. Vælg Vis på kort fra pop-up-menuen.

    Et screenshot af Microsoft Fabric Maps Explorer-panelet, der viser fanen Lakehouse valgt med WorkorderLocationsLakehouse udvidet. Filer-mappen indeholder OptimizedRoute.geojson og WorkorderLocations.csv filer. En kontekstmenu er åben ved siden af OptimizedRoute.geojson og viser muligheder, herunder Vis på kortet markeret med et rødt rektangel. Datalagspanelet viser WorkordersFunction som et eksisterende lag med en synlighedsknap.

  4. I Datalagspaneletslår du synligheden fra for WorkordersFunction-laget .

Når det er færdigt, vises det nye kortlag på dit Fabric Maps-kort.

Et screenshot af Microsoft Fabric Maps, der viser et gadekort over Wien, Østrig, med en optimeret rute vist som blå linjer, der forbinder ni nummererede waypoints. Explorer-panelet til venstre viser fanen Lakehouse udvidet med WorkorderLocationsLakehouse, som indeholder en Files-mappe med OptimizedRoute.geojson og WorkorderLocations.csv filer. Datalagspanelet viser to lag: WorkordersFunction med synlighed slået fra og OptimizedRoute, der viser den forbundne rutesti med nummererede stop fra 1 til 9, som angiver den optimerede besøgsrækkefølge.

Indstillinger for kortlag

Fabric Maps tilbyder en række lagindstillinger, hvor du styrer, hvordan data præsenteres på kortet. I dette afsnit tilpasser du laget, der er skabt fra ruteoptimeringsprocessen, ved at omdøbe laget, justere symbolstilen og konfigurere labels baseret på feltværdier. Disse indstillinger hjælper med at forbedre læsbarheden og gør det lettere at fortolke arbejdsordredata med et hurtigt blik.

Omdøb laget

  1. I Datalagspanelet åbner du menuen OptimeretRute-muligheder ved at vælge ellipsen (...).

  2. Vælg Omdøb.

    Et screenshot af Microsoft Fabric Maps Datalagspanelet, der viser to lag: WorkordersFunction og OptimizedRoute. Lagget OptimizedRoute har sin indstillingsmenu udvidet med et rødt rektangel, der fremhæver Rename-muligheden. Andre synlige menumuligheder inkluderer Zoom for at tilpasse, Dupliker og Slet. Panelet vises over en baggrund over gadekortet, der viser Wien, Østrig-området.

Fjern etiketter på kortniveauet

Når du slår Labels til eller fra på kortniveau, påvirker det basemap-tekstetiketter. Disse betegnelser stammer fra den underliggende kortstil og inkluderer:

  • By- og bynavne
  • Land- og regionsnavne
  • Vej- og vejnavne
  • Navne på vandfunktioner (floder, søer, oceaner)
  • Andre administrative eller geografiske stednavne

Når Labels ikke vises, fremstår basemap'et "renere" og mere minimalistisk, uden stednavnstekst gengivet på basemappen.

For at slå basemap-etiketter fra:

  1. Åbn dit kort i Fabric Maps.

  2. Vælg Kortindstillinger i menulinjen.

  3. Find afkrydsningsboksen Labels , og fjern markeringen.

    Et screenshot, der viser Microsoft Fabric Maps-grænsefladen, der viser et gadekort over Wien, Østrig med lilla rutelinjer, der forbinder flere waypoints. Venstre side viser Explorer-panelet med Datalag-panelet, der viser WorkordersFunction og Optimized Route-lagene. Den øverste værktøjslinje fremhæver knappen Kortindstillinger markeret med et rødt rektangel. Højre side viser Basemap-indstillingspanelet med afkrydsningsfeltet Labels uden markering og markeret med et rødt rektangel.

For mere information om kortindstillinger i Fabric Maps, se Konfigurér basemap-indstillinger.

Tilføj datalabels til laget

Datalabels er datadrevne annoteringer, der stammer fra et eller flere felter i lagets datasæt. De er direkte knyttet til lagniveau-kortfunktioner, såsom punkterne på kortet, der repræsenterer arbejdsordreplaceringer. For mere information om Fabric Maps datalabels, se Data label-indstillinger.

  1. Vælg Optimeret rute i Datalagspanelet . Indstillingspanelet Optimeret rute vises i højre side af skærmen.

  2. I panelet Optimerede ruteindstillinger vælger > du Datalabel-indstillinger.

  3. Vælg knappen Aktiver dataetiketter for at slå dataetiketter til. Dette viser flere dataetiketter.

  4. Ændr følgende indstillinger for dataetiketter:

    • Dataetiketter: optimizedIndex
    • Tekstens farve: hvid
    • Tekststørrelsesskyder sat til 20
    • Tekststregfarve: Sort
    • Tekststregbredde-skyderen sat til 2

    Et screenshot af Microsoft Fabric Maps, der viser indstillingspanelet for dataetiketter, udvidet på højre side med Aktiver dataetiketter slået til, dataetiketter sat til optimeretIndex, tekstfarve med en hvid farveplukker, tekststørrelsesskyder sat til 20, tekststregfarve der viser sort og tekststregbredde-skyder sat til 2. Hovedkortområdet viser et gadekort over Wien, Østrig, med lilla rutelinjer, der forbinder nummererede vejpunkter mærket 1 til 9, som angiver den optimerede besøgsrækkefølge. Datalagspanelet til venstre viser WorkordersFunction med synlighed skjult og Optimeret rute som det aktive lag.

Resumé

Denne vejledning viste dig, hvordan du bygger et end-to-end, realtids arbejdsordre-rutescenarie ved hjælp af Microsoft Fabric Real-Time Intelligence og Fabric Maps. Du indlæser, transformerer og forespørger streaming-arbejdsordredata ved hjælp af KQL, og visualiserer derefter dataene på et kort for at skabe et dynamisk, kontinuerligt opdaterende overblik over arbejdsordreplaceringer. Ved at integrere routinglogik og optimale stiberegninger viser løsningen, hvordan realtids geospatial analyse kan hjælpe dispatchere og feltdriftsteams med at træffe hurtigere og bedre informerede beslutninger.

Du kan udvide dette mønster til andre lokationsbaserede scenarier såsom flådesporing, aktivovervågning og hændelsesrespons. Ved at kombinere hændelsesdrevne data, KQL-baseret analyse og kortbaseret visualisering muliggør Microsoft Fabric en overgang fra rå streamingdata til handlingsorienterede geografiske indsigter i næsten realtid.

Næste trin

For mere information om Fabric Maps-artikler, der dækkes i denne vejledning, se: