You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/hr/3-transport/lessons/3-visualize-location-data/README.md

21 KiB

Vizualizacija podataka o lokaciji

Sketchnote pregled ove lekcije

Sketchnote autorice Nitya Narasimhan. Kliknite na sliku za veću verziju.

Ovaj video pruža pregled Azure Maps s IoT-om, usluge koja će biti obrađena u ovoj lekciji.

Azure Maps - Microsoft Azure Enterprise Location Platform

🎥 Kliknite na sliku iznad za gledanje videa

Kviz prije predavanja

Kviz prije predavanja

Uvod

U prethodnoj lekciji naučili ste kako dobiti GPS podatke sa svojih senzora i spremiti ih u oblak u spremnik za pohranu koristeći serverless kod. Sada ćete otkriti kako vizualizirati te točke na Azure karti. Naučit ćete kako stvoriti kartu na web stranici, upoznati se s GeoJSON formatom podataka i kako ga koristiti za iscrtavanje svih prikupljenih GPS točaka na vašoj karti.

U ovoj lekciji obradit ćemo:

💁 Ova lekcija uključuje malu količinu HTML-a i JavaScripta. Ako želite naučiti više o web razvoju koristeći HTML i JavaScript, pogledajte Web development for beginners.

Što je vizualizacija podataka

Vizualizacija podataka, kako i samo ime sugerira, odnosi se na prikazivanje podataka na način koji ljudima olakšava razumijevanje. Obično se povezuje s grafikonima i dijagramima, ali zapravo uključuje bilo koji način slikovitog prikazivanja podataka kako bi se ljudima omogućilo bolje razumijevanje i donošenje odluka.

Uzmimo jednostavan primjer - u projektu farme prikupljali ste podatke o vlažnosti tla. Tablica podataka o vlažnosti tla prikupljenih svakog sata za 1. lipnja 2021. mogla bi izgledati ovako:

Datum Očitavanje
01/06/2021 00:00 257
01/06/2021 01:00 268
01/06/2021 02:00 295
01/06/2021 03:00 305
01/06/2021 04:00 325
01/06/2021 05:00 359
01/06/2021 06:00 398
01/06/2021 07:00 410
01/06/2021 08:00 429
01/06/2021 09:00 451
01/06/2021 10:00 460
01/06/2021 11:00 452
01/06/2021 12:00 420
01/06/2021 13:00 408
01/06/2021 14:00 431
01/06/2021 15:00 462
01/06/2021 16:00 432
01/06/2021 17:00 402
01/06/2021 18:00 387
01/06/2021 19:00 360
01/06/2021 20:00 358
01/06/2021 21:00 354
01/06/2021 22:00 356
01/06/2021 23:00 362

Kao ljudima, razumijevanje ovih podataka može biti teško. To je zid brojeva bez ikakvog značenja. Kao prvi korak u vizualizaciji ovih podataka, mogu se iscrtati na linijskom grafikonu:

Linijski grafikon gore navedenih podataka

Ovo se može dodatno poboljšati dodavanjem linije koja označava kada je automatski sustav za zalijevanje uključen pri očitanju vlažnosti tla od 450:

Linijski grafikon vlažnosti tla s linijom na 450

Ovaj grafikon vrlo brzo pokazuje ne samo razine vlažnosti tla, već i točke kada je sustav za zalijevanje uključen.

Grafikoni nisu jedini alat za vizualizaciju podataka. IoT uređaji koji prate vremenske uvjete mogu imati web ili mobilne aplikacije koje vizualiziraju vremenske uvjete koristeći simbole, poput simbola oblaka za oblačne dane, simbola kišnog oblaka za kišne dane i slično. Postoji ogroman broj načina za vizualizaciju podataka, neki ozbiljni, neki zabavni.

Razmislite o načinima na koje ste vidjeli vizualizirane podatke. Koje su metode bile najjasnije i omogućile vam najbrže donošenje odluka?

Najbolje vizualizacije omogućuju ljudima brzo donošenje odluka. Na primjer, zid s mnoštvom mjerača koji prikazuju razne očitanja industrijskih strojeva teško je obraditi, ali trepćuće crveno svjetlo kada nešto pođe po zlu omogućuje čovjeku donošenje odluke. Ponekad je najbolja vizualizacija trepćuće svjetlo!

Kada radite s GPS podacima, najjasnija vizualizacija može biti iscrtavanje podataka na karti. Karta koja prikazuje dostavna vozila, na primjer, može pomoći radnicima u pogonu da vide kada će vozila stići. Ako ta karta prikazuje više od samih slika vozila na njihovim trenutnim lokacijama, već daje i informacije o sadržaju vozila, tada radnici u pogonu mogu planirati u skladu s tim - ako vide rashladno vozilo u blizini, znaju da trebaju pripremiti prostor u hladnjaku.

Usluge karata

Rad s kartama je zanimljiv zadatak, a postoji mnogo opcija poput Bing Maps, Leaflet, Open Street Maps i Google Maps. U ovoj lekciji naučit ćete o Azure Maps i kako oni mogu prikazati vaše GPS podatke.

Azure Maps logo

Azure Maps je "zbirka geoprostornih usluga i SDK-ova koji koriste svježe podatke o kartama kako bi pružili geografski kontekst za web i mobilne aplikacije." Programerima su dostupni alati za stvaranje lijepih, interaktivnih karata koje mogu, primjerice, pružiti preporučene prometne rute, informacije o prometnim incidentima, unutarnju navigaciju, mogućnosti pretraživanja, informacije o nadmorskoj visini, vremenske usluge i još mnogo toga.

Eksperimentirajte s nekim primjerima koda za karte

Možete prikazati karte kao prazno platno, pločice, satelitske slike, satelitske slike s ucrtanim cestama, razne vrste sivih karata, karte s osjenčanim reljefom za prikaz nadmorske visine, karte noćnog prikaza i karte visokog kontrasta. Možete dobiti ažuriranja u stvarnom vremenu na svojim kartama integrirajući ih s Azure Event Grid. Možete kontrolirati ponašanje i izgled svojih karata omogućavanjem raznih kontrola koje omogućuju karti da reagira na događaje poput štipanja, povlačenja i klikanja. Kako biste kontrolirali izgled svoje karte, možete dodati slojeve koji uključuju mjehuriće, linije, poligone, toplinske karte i još mnogo toga. Koji stil karte implementirati ovisi o vašem izboru SDK-a.

Azure Maps API-je možete koristiti putem REST API-ja, Web SDK-a ili, ako gradite mobilnu aplikaciju, Android SDK-a.

U ovoj lekciji koristit ćete web SDK za crtanje karte i prikazivanje puta GPS lokacija vašeg senzora.

Kreiranje Azure Maps resursa

Prvi korak je kreiranje Azure Maps računa.

Zadatak - kreiranje Azure Maps resursa

  1. Pokrenite sljedeću naredbu iz svog Terminala ili Command Prompt-a kako biste kreirali Azure Maps resurs u svojoj gps-sensor grupi resursa:

    az maps account create --name gps-sensor \
                           --resource-group gps-sensor \
                           --accept-tos \
                           --sku S1
    

    Ovo će kreirati Azure Maps resurs nazvan gps-sensor. Korišteni sloj je S1, koji je plaćeni sloj koji uključuje niz značajki, ali s velikodušnim brojem besplatnih poziva.

    💁 Za pregled troškova korištenja Azure Maps, pogledajte stranicu s cijenama Azure Maps.

  2. Trebat će vam API ključ za resurs karata. Koristite sljedeću naredbu za dobivanje ovog ključa:

    az maps account keys list --name gps-sensor \
                              --resource-group gps-sensor \
                              --output table
    

    Zabilježite vrijednost PrimaryKey.

Prikaz karte na web stranici

Sada možete prijeći na sljedeći korak, a to je prikazivanje karte na web stranici. Koristit ćemo samo jednu html datoteku za vašu malu web aplikaciju; imajte na umu da će u produkcijskom ili timskom okruženju vaša web aplikacija vjerojatno imati više dijelova!

Zadatak - prikaz karte na web stranici

  1. Kreirajte datoteku pod nazivom index.html u nekoj mapi na svom lokalnom računalu. Dodajte HTML oznake za prikaz karte:

    <html>
    <head>
        <style>
            #myMap {
                width:100%;
                height:100%;
            }
        </style>
    </head>
    
    <body onload="init()">
        <div id="myMap"></div>
    </body>
    </html>
    

    Karta će se učitati u myMap div. Nekoliko stilova omogućuje joj da zauzme širinu i visinu stranice.

    🎓 div je dio web stranice koji se može imenovati i stilizirati.

  2. Ispod otvarajuće <head> oznake, dodajte vanjski stilopis za kontrolu prikaza karte i vanjsku skriptu iz Web SDK-a za upravljanje njenim ponašanjem:

    <link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.css" type="text/css" />
    <script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.js"></script>
    

    Ovaj stilopis sadrži postavke za izgled karte, a datoteka sa skriptom sadrži kod za učitavanje karte. Dodavanje ovog koda slično je uključivanju C++ zaglavnih datoteka ili uvozu Python modula.

  3. Ispod te skripte, dodajte blok skripte za pokretanje karte.

    <script type='text/javascript'>
        function init() {
            var map = new atlas.Map('myMap', {
                center: [-122.26473, 47.73444],
                zoom: 12,
                authOptions: {
                    authType: "subscriptionKey",
                    subscriptionKey: "<subscription_key>",
    
                }
            });
        }
    </script>
    

    Zamijenite <subscription_key> s API ključem za vaš Azure Maps račun.

    Ako otvorite svoju index.html stranicu u web pregledniku, trebali biste vidjeti kartu učitanu i fokusiranu na područje Seattlea.

    Karta koja prikazuje Seattle, grad u saveznoj državi Washington, SAD

    Eksperimentirajte s parametrima za zumiranje i centriranje kako biste promijenili prikaz karte. Možete dodati različite koordinate koje odgovaraju širini i dužini vaših podataka kako biste ponovno centrirali kartu.

💁 Bolji način za rad s web aplikacijama lokalno je instalacija http-server. Trebat će vam node.js i npm instalirani prije korištenja ovog alata. Nakon što su ti alati instalirani, možete navigirati do lokacije svoje index.html datoteke i upisati http-server. Web aplikacija će se otvoriti na lokalnom web poslužitelju http://127.0.0.1:8080/.

GeoJSON format

Sada kada imate svoju web aplikaciju s prikazanom kartom, trebate izvući GPS podatke iz svog spremnika za pohranu i prikazati ih u sloju markera na vrhu karte. Prije nego što to učinimo, pogledajmo GeoJSON format koji zahtijeva Azure Maps.

GeoJSON je otvoreni standard JSON specifikacije s posebnim formatiranjem dizajniranim za rukovanje geografskim podacima. Možete ga proučiti testiranjem uzoraka podataka koristeći geojson.io, koji je također koristan alat za otklanjanje pogrešaka u GeoJSON datotekama.

Uzorak GeoJSON podataka izgleda ovako:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -2.10237979888916,
          57.164918677004714
        ]
      }
    }
  ]
}

Posebno je zanimljiv način na koji su podaci ugniježđeni kao Feature unutar FeatureCollection. Unutar tog objekta nalazi se geometry s coordinates koji označavaju geografsku dužinu i širinu.

Kada gradite svoj GeoJSON, obratite pažnju na redoslijed latitude i longitude u objektu, inače se vaše točke neće pojaviti na pravom mjestu! GeoJSON očekuje podatke u redoslijedu lon,lat za točke, a ne lat,lon.

Geometry može imati različite tipove, poput jedne točke ili poligona. U ovom primjeru, to je točka s dvije specificirane koordinate, geografskom dužinom i širinom. Azure Maps podržava standardni GeoJSON uz neke napredne značajke, uključujući mogućnost crtanja krugova i drugih geometrijskih oblika.

Prikaz GPS podataka na karti koristeći GeoJSON

Sada ste spremni koristiti podatke iz pohrane koju ste izgradili u prethodnoj lekciji. Podsjetimo, podaci su pohranjeni kao niz datoteka u blob pohrani, pa ćete morati dohvatiti te datoteke i obraditi ih kako bi Azure Maps mogao koristiti te podatke.

Zadatak - konfiguriranje pohrane za pristup s web stranice

Ako pokušate pristupiti svojoj pohrani kako biste dohvatili podatke, mogli biste se iznenaditi kada vidite pogreške u konzoli vašeg preglednika. To je zato što trebate postaviti dozvole za CORS na ovoj pohrani kako biste omogućili vanjskim web aplikacijama da čitaju njezine podatke.

🎓 CORS označava "Cross-Origin Resource Sharing" i obično ga je potrebno eksplicitno postaviti u Azureu iz sigurnosnih razloga. Sprječava neželjene stranice da pristupe vašim podacima.

  1. Pokrenite sljedeću naredbu kako biste omogućili CORS:

    az storage cors add --methods GET \
                        --origins "*" \
                        --services b \
                        --account-name <storage_name> \
                        --account-key <key1>
    

    Zamijenite <storage_name> nazivom vašeg računa za pohranu. Zamijenite <key1> ključem računa za vašu pohranu.

    Ova naredba omogućuje bilo kojoj web stranici (zvjezdica * označava bilo koju) da napravi GET zahtjev, odnosno da dobije podatke iz vašeg računa za pohranu. --services b znači da se ovo postavljanje primjenjuje samo na blobove.

Zadatak - učitavanje GPS podataka iz pohrane

  1. Zamijenite cijeli sadržaj funkcije init sljedećim kodom:

    fetch("https://<storage_name>.blob.core.windows.net/gps-data/?restype=container&comp=list")
        .then(response => response.text())
        .then(str => new window.DOMParser().parseFromString(str, "text/xml"))
        .then(xml => {
            let blobList = Array.from(xml.querySelectorAll("Url"));
                blobList.forEach(async blobUrl => {
                    loadJSON(blobUrl.innerHTML)                
        });
    })
    .then( response => {
        map = new atlas.Map('myMap', {
            center: [-122.26473, 47.73444],
            zoom: 14,
            authOptions: {
                authType: "subscriptionKey",
                subscriptionKey: "<subscription_key>",
    
            }
        });
        map.events.add('ready', function () {
            var source = new atlas.source.DataSource();
            map.sources.add(source);
            map.layers.add(new atlas.layer.BubbleLayer(source));
            source.add(features);
        })
    })
    

    Zamijenite <storage_name> nazivom vašeg računa za pohranu. Zamijenite <subscription_key> API ključem za vaš Azure Maps račun.

    Ovdje se događa nekoliko stvari. Prvo, kod dohvaća vaše GPS podatke iz vašeg blob spremnika koristeći URL endpoint koji se gradi pomoću naziva vašeg računa za pohranu. Ovaj URL dohvaća podatke iz gps-data, što označava da je vrsta resursa spremnik (restype=container), i navodi informacije o svim blobovima. Ovaj popis neće vratiti same blobove, već će vratiti URL za svaki blob koji se može koristiti za učitavanje podataka iz bloba.

    💁 Ovaj URL možete staviti u svoj preglednik kako biste vidjeli detalje o svim blobovima u vašem spremniku. Svaka stavka imat će svojstvo Url koje također možete učitati u pregledniku kako biste vidjeli sadržaj bloba.

    Kod zatim učitava svaki blob, pozivajući funkciju loadJSON, koju ćete kreirati u sljedećem koraku. Zatim kreira kontrolu karte i dodaje kod u događaj ready. Ovaj događaj se poziva kada se karta prikaže na web stranici.

    Događaj ready kreira izvor podataka za Azure Maps - spremnik koji sadrži GeoJSON podatke koji će kasnije biti popunjeni. Ovaj izvor podataka se zatim koristi za kreiranje sloja mjehurića - to jest skupa krugova na karti centriranih oko svake točke u GeoJSON-u.

  2. Dodajte funkciju loadJSON u svoj blok skripte, ispod funkcije init:

    var map, features;
    
    function loadJSON(file) {
        var xhr = new XMLHttpRequest();
        features = [];
        xhr.onreadystatechange = function () {
            if (xhr.readyState === XMLHttpRequest.DONE) {
                if (xhr.status === 200) {
                    gps = JSON.parse(xhr.responseText)
                    features.push(
                        new atlas.data.Feature(new atlas.data.Point([parseFloat(gps.gps.lon), parseFloat(gps.gps.lat)]))
                    )
                }
            }
        };
        xhr.open("GET", file, true);
        xhr.send();
    }    
    

    Ova funkcija se poziva od strane rutine za dohvaćanje kako bi obradila JSON podatke i pretvorila ih u format koji se čita kao geografske koordinate (dužina i širina) u GeoJSON-u. Nakon obrade, podaci se postavljaju kao dio GeoJSON Feature. Karta će se inicijalizirati i mali mjehurići će se pojaviti duž puta koji vaši podaci prikazuju:

  3. Učitajte HTML stranicu u svoj preglednik. Stranica će učitati kartu, zatim učitati sve GPS podatke iz pohrane i prikazati ih na karti.

    Karta Saint Edward State Parka blizu Seattlea, s krugovima koji prikazuju put oko ruba parka

💁 Ovaj kod možete pronaći u code mapi.


🚀 Izazov

Lijepo je moći prikazati statične podatke na karti kao oznake. Možete li unaprijediti ovu web aplikaciju kako biste dodali animaciju i prikazali put oznaka tijekom vremena, koristeći JSON datoteke s vremenskim oznakama? Evo nekih primjera korištenja animacije unutar karata.

Kviz nakon predavanja

Kviz nakon predavanja

Pregled i samostalno učenje

Azure Maps je posebno koristan za rad s IoT uređajima.

Zadatak

Postavite svoju aplikaciju


Odricanje od odgovornosti:
Ovaj dokument je preveden pomoću AI usluge za prevođenje Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane ljudskog prevoditelja. Ne preuzimamo odgovornost za bilo kakva nesporazuma ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.