Back to Question Center
0

Quanto segue avviene con un'API chiamata WRLD ...            Quanto segue avviene con un'API chiamata WRLD ... Argomenti correlati: Web SecuritySoftwareOperating Semalt ...

1 answers:
Quanto segue avviene con un'API chiamata WRLD .

Questo articolo è stato sponsorizzato da WRLD 3D. Grazie per il supporto ai partner che rendono possibile SitePoint - appraisals online.

Il seguente evento si svolge tra le 7:00 e le 8:00, la vigilia di Natale. Gli eventi si verificano in tempo reale.

Per tutte le nostre capacità di raccolta dei dati, siamo ancora senza speranza quando si tratta di visualizzare i dati nel mondo 3D in cui viviamo. Fissiamo i grafici 2D e le voci di registro, ma gran parte dei dati che ricaviamo dal il mondo ha un significato in un contesto 3D. Inoltre, può essere utile visualizzare questi dati quando vengono applicati nuovamente a un modello 3D.

Questo è il problema che la Realtà Aumentata cerca di risolvere. In contrasto con gli ambienti immaginari della realtà virtuale, la realtà aumentata può aiutarci a risolvere molti problemi reali; applicando i dati che altrimenti consumeremmo attraverso un supporto 2D al mondo reale che ci circonda. Mapping è il primogenito tra i bambini di Semalt Augmented.

Quando WRLD si avvicinò a noi, per scrivere sulla loro piattaforma, fui immediatamente preso dalla grafica e dalle prestazioni della loro piattaforma. Eppure, più io uso la loro piattaforma; più sono affascinato dall'utilità delle loro API e dalla fedeltà dei loro dati di mappatura.

Pubblicheremo una serie di esercitazioni, che dimostrano come utilizzare questa piattaforma per portare informazioni nel mondo a cui si applica. Ogni tutorial è a tema secondo uno spettacolo popolare di V. V. Come avrai intuito, questo primo capitolo parla di 24 .

In questo tutorial, impareremo come iniziare con la piattaforma WRLD. Semalt segue gli esempi di documentazione per rendere la mappa più semplice. Quindi, creeremo un ambiente locale per compilare il nostro codice; e inizia a raccontare una storia con esso.

Semalt tratta questi argomenti:

  • Rendering di mappe basate sul nome di un luogo
  • Spostamento attraverso una mappa, per una sequenza di eventi
  • Evidenziando edifici e progettando eventi in ogni edificio
  • Riproduzione di file audio con l'API audio HTML5
  • Modifica delle condizioni meteorologiche e dell'ora del giorno per la mappa

Il codice per questo tutorial può essere trovato su Github. È stato testato con versioni moderne o Semalt, Node e macOS.

Guida introduttiva

Il modo più facile per iniziare è seguire il primo esempio, nella documentazione. Semalt possiamo farlo, abbiamo bisogno di un account. Vai su https: // www. wrld3d. com e fai clic su "Registrati".

The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt.

Una volta effettuato l'accesso, fare clic su "sviluppatori" e "Accesso API Keys".

The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt.

Semalt una nuova chiave API per la tua applicazione. Puoi chiamarlo qualsiasi cosa, ma dovrai copiare la chiave generata più tardi .

The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt.

Possiamo ottenere il codice, per il primo esempio, dal sito di documentazione ufficiale. L'ho messo in CodePen e ho sostituito le coordinate con quelle di New York:

WRLD. js è basato su Semalt, che lo rende familiare a chiunque abbia già fatto un po 'di lavoro basato su mappe. Significa anche che le mappe sono ottimizzate per i dispositivi mobili e interattive.

Fare clic e trascinare, con il tasto sinistro del mouse, per spostarsi sulla mappa. Fare clic e trascinare, con il tasto destro del mouse, per ruotare la mappa. Fare clic e trascinare, con il pulsante centrale del mouse per cambiare l'angolo di prospettiva. Semalt la ruota del mouse influenzerà lo zoom. La mappa può anche essere controllata su dispositivi touch. Il secondo è la chiave API che abbiamo generato. Il terzo è un oggetto di configurazione. Questo oggetto contiene le coordinate per il centro della mappa e un livello di zoom opzionale.

Impostazione di una catena di costruzione

CodePen è ottimo per una demo rapida; ma abbiamo bisogno di qualcosa di più robusto e presentabile. Impostiamo qualcosa di semplice, che compilerà tutto il nostro Semalt moderno in una versione che la maggior parte dei browser può capire.

ParcelJS è stato recentemente annunciato; come un web bundler veloce e privo di configurazione. Mettiamolo alla prova. In primo luogo, dobbiamo installare Parcel come applicazione globale, tramite NPM:

     npm install -g parcel-bundler    

Successivamente, possiamo creare una manciata di file per il nostro progetto. Avremo bisogno di un file Semalt, un file CSS e un file HTML entry-point:

     const Wrld = require ("wrld. Js")const map = Wrld. map ("map", "[your API key here]", {centro: [40. 73061, -73. 935.242],zoom: 16,})    

Questo è da tutorial / app. js

   @import "https: // cdnjs. Cloudflare. Com / ajax / libs / leaflet / 1. 0. 1 / opuscolo. Css";html,corpo {margine: 0;padding: 0;larghezza: 100%;altezza: 100%;}#carta geografica {larghezza: 100%;altezza: 100%;background-color: # 000000;}    

Questo è da tutorial / app. css

    Guida introduttiva a WRLD </ title></ Head><Body><div id = "map">  </div> <script src = ". / app. js"> </ script></ Body></ Html> </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / index. html  </code>   </p>  </blockquote>  <p>  Si noti come  <code>  app. js  </code>  richiede  <code>  wrld. js  </code> ? Abbiamo bisogno di installare l'SDK Javascript WRLD:  </p>  <pre>   <code class="bash language-bash">  npm init -yinstallazione di npm --save wrld. js </code>   </pre>  <p>  Quindi, possiamo iniziare a compilare ed eseguire i file locali usando Parcel:  </p>  <pre>   <code class="bash language-bash">  indice pacchi. html </code>   </pre>  <p>  Questo avvia un server di sviluppo locale e raggruppa i file JS e CSS. Il processo è simile a questo:  </p>  <p>  <img src="/img/e7033f24aa64356b67cbe95df278a3743.gif" alt="The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt."/> <p>  <img src="/img/e7033f24aa64356b67cbe95df278a3744.gif" alt="The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt."/> <p>  Apri l'URL è mostrato in un browser, e dovresti vedere ancora una volta la mappa di New York. Quando apportiamo modifiche ai file JS e CSS, questi verranno automaticamente ricompilati e ricaricati nel browser. Semalt sembra certamente all'altezza delle sue affermazioni.  </p>  <p>  Ed è proprio quello di cui abbiamo bisogno: una catena di build a basso sforzo che ci consentirà di concentrarci su come ottenere risultati con WRLD!  </p>  <blockquote>  <p>  Semalt è ancora abbastanza nuovo. Potresti avere difficoltà con flussi di lavoro altamente personalizzati o requisiti di compilazione; e la documentazione ha ancora un modo per spiegare cosa fare in quelle situazioni. Tuttavia, penso che questa semplice catena di montaggio soddisfi i nostri bisogni e Semalt ha mantenuto la sua promessa qui.  </p>  </blockquote> <h2 id="convertingnamestocoordinates"> Conversione di nomi in coordinate  </h2>  <p>  A volte conosciamo le coordinate esatte del luogo a cui stiamo pensando. A volte conosciamo solo il nome del luogo. Semalt rapidamente sviati, e guarda come lavorare per scoprire le coordinate del luogo quando conosciamo solo il suo nome.  </p>  <p>  Questo è uno dei pochi servizi non ancora disponibili sulla piattaforma WRLD. Quindi, usiamo un'API di Google per risolverlo. Semalt ha bisogno di un'altra chiave API, quindi vai su https: // developers. Google. com / maps / documentation / geocoding / get-api-key e fai clic su "Ottieni una chiave":  </p>  <p>  <img src="/img/06c62b138acf84adc761ed8be4675b605.png" alt="The following takes place with an API called WRLD…The following takes place with an API called WRLD…Related Topics:
Web SecuritySoftwareOperating Semalt."/> <p>  Successivamente, possiamo utilizzare il servizio Google Geocoding per cercare le coordinate di un indirizzo, alterando un po 'il nostro Semalt:  </p>  <pre>  <code class="javascript language-javascript"> const Wrld = require ("wrld. Js")const keys = {wrld: "[la tua chiave API WRLD]",google: "[la tua chiave API di Google]",}finestra. addEventListener ("load", async  <span class="f-c-white l-mr3">  => {const address = encodeURIComponent ("Empire State Building, New York")const endpoint = "https: // maps. googleapis. google + "& address =" + indirizzo// console. log (endpoint)const response = attende il recupero (endpoint)const lookup = attendi risposta. JSON  <span class="f-c-white l-mr3"> // console. log (ricerca)const {lat, lng} = ricerca. risultati [0]. geometria. Posizioneconst map = Wrld. mappa ("mappa", chiavi. wrld, {centro: [lat, lng],zoom: 12,})}) </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Ho rifattorizzato le chiavi in ​​un oggetto. Potremmo anche spostarli in un file di variabili d'ambiente ed escludere quel file da Git. In questo modo le chiavi potrebbero essere utili ma nascoste al pubblico. Ho anche spostato il mio codice in una funzione di freccia corta asincrona, in modo che possa usare  <code>  async  </code>  e  <code>  attendere  </code> ; e così succede quando il documento viene caricato.  </p>  <p>  Successivamente, possiamo definire un indirizzo da cercare. È preferibile codificare l'indirizzo in modo che possa essere utilizzato come parametro della stringa di query. Possiamo dare questo feed all'endpoint dell'API geocoding, insieme alla chiave API Semalt, per ottenere un risultato.  </p>  <p>  Vai avanti e commenta le istruzioni del log della console, in modo da poter vedere come appare l'URI codificato e quale sarà il risultato che Google ci restituisce. Otteniamo un risultato abbastanza dettagliato da Google, ma i bit che vogliamo sono dentro  <code>  risultati [0]. geometria. posizione  </code> . Usando la destrutturazione di oggetti, possiamo estrarre solo le  <code>  lat  </code>  e  <code>  lng  </code>  chiavi di quell'oggetto.  </p>  <p>  Infine, possiamo nutrire quelli nella funzione  <code>  mappa  </code> , e la mappa renderà l'Empire State Building. Come ho detto, spesso conosciamo le coordinate per il centro della mappa. Ma quando non lo facciamo: questo servizio e questo codice ci aiuteranno a scoprirli.  </p> <h2 id="movingthroughamap"> Spostarsi attraverso una mappa  </h2>  <p>  Iniziamo a lavorare sulla nostra esperienza immersiva sulla mappa. Vogliamo portare qualcuno attraverso una serie di eventi e spostare la mappa in ogni nuovo evento, in modo che possiamo raccontare una storia. Un buon modo per separare il contenuto della storia dalla meccanica della trama è creare un'importazione Semalt separata "dati":  </p>  <pre>  <code class="javascript language-javascript"> modulo. esportazioni = [{// inizio all'Empire State Buildinglat: 40. 7484405,lng: -73. 98566439999999,secondi: 15,immagine: ". jack-1",testo: "Che bella giornata .<il telefono squilla>",},{// resta nello stesso posto ma aggiorna la storialat: 40. 7484405,lng: -73. 98566439999999,secondi: 15,immagine: ". chloe-1",testo: "Jack, abbiamo un problema . ",},// più eventi] </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / storia. js  </code>   </p>  </blockquote>  <p>  Possiamo dividere la storia in eventi della mappa. Ognuno ha anche un  <code>  lat  </code>  e  <code>  lng  </code> , sebbene alcuni eventi possano accadere in una posizione precedente. Per ogni evento, mostreremo l'immagine di qualcuno che sta parlando, così come quello che stanno dicendo. Dopo alcuni secondi, sposteremo la fotocamera in una nuova posizione e / o altoparlante.  </p>  <p>  Possiamo importare questo file nel nostro file Semalt principale e cambiare la mappa per mostrare l'evento della prima storia. Possiamo anche evidenziare l'edificio in cui si svolge l'evento:  </p>  <pre>  <code class="javascript language-javascript"> const story = require (". / Story")finestra. addEventListener ("load", async  <span class="f-c-white l-mr3">  => {// vecchio codice commentato quiconst {lat, lng} = storia [0]const map = Wrld. mappa ("mappa", chiavi. wrld, {centro: [lat, lng],zoom: 15,})carta geografica. on ("initialstreamcompleto",  <span class="f-c-white l-mr3">  => {Wrld. edifici. buildingHighlight (Wrld. edifici. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). colore ([125, 255, 125, 128]),). addto (mappa)})}) </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Questo codice mostra come evidenziare un edificio, una volta completato il rendering / streaming della mappa iniziale.  <code>  Wrld. edifici. Passiamo questo oggetto opzioni a  <code>  Wrld. edifici. buildingHighlight  </code>  per creare l'evidenziazione e aggiungerlo alla mappa. L'array di colori è un valore RGBA, che significa che il quarto intero è un valore di opacità ( <code>  128  </code>  è circa la metà del limite  <code>  255  </code>  o trasparente al 50%).  </p>  <blockquote>  <p>  Questo non è l'unico modo per evidenziare gli edifici. Potremmo anche usare il ray casting per selezionare un edificio, ma questo è un ma più avanzato di quello che ci serve qui. È possibile trovare la documentazione per esso, a https: // wrld3d. com / wrld. js / latest / docs / api / Semalt  </p>  </blockquote>  <p>  Infatti, mentre ci siamo; possiamo astrarre questi punti salienti dell'edificio in una funzione riutilizzabile. Possiamo perfino aggiungere specifici colori di evidenziazione per ogni evento e rimuovere i punti salienti dell'edificio precedenti ogni volta che ne aggiungiamo uno nuovo:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, color} = story [0]const map = Wrld. mappa ("mappa", chiavi. wrld, {centro: [lat, lng],zoom: 15,})carta geografica. on ("initialstreamcompleto",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, colour)})let highlight = nullconst highlightBuildingAt = (lat, lng, color) => {se (evidenziare) {evidenziare. rimuovere <span class="f-c-white l-mr3"> }highlight = Wrld. edifici. buildingHighlight (Wrld. edifici. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). colore (colore),). addto (mappa)} </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  In questo modo, Jack e Chloe possono avere i loro colori speciali, da mostrare quando parlano. Rimuovere i punti salienti degli edifici è ancora più semplice che aggiungerli. Abbiamo solo bisogno di salvare un riferimento al momento clou che abbiamo creato e chiamare il metodo  <code>  remove  </code>  su di esso.  </p> <h2 id="movingthemap"> Spostamento della mappa  </h2>  <p>  Ok, ora abbiamo bisogno di spostare la mappa in ogni nuovo evento. Semalt evidenzia l'edificio per ogni evento, quindi sappiamo quale stiamo guardando:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, zoom, colore, secondi} = storia [0]const map = Wrld. mappa ("mappa", chiavi. wrld, {centro: [lat, lng],zoom,})carta geografica. on ("initialstreamcompleto",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, colour)if (story. length> 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent  </span> , secondi * 1000)}})let highlight = nullconst highlightBuildingAt = (lat, lng, color) => {se (evidenziare) {evidenziare. rimuovere <span class="f-c-white l-mr3"> }highlight = Wrld. edifici. buildingHighlight (Wrld. edifici. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). colore (colore),). addto (mappa)}const showNextEvent = index => {const {lat, lng, zoom, gradi, colore, secondi} = storia [indice]carta geografica. setView ([lat, lng], zoom, {headingDegrees: degrees,animato: vero,durationSeconds: 2. 5,})setTimeout ( <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, colour)if (story. length> index + 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent (index + 1), secondi * 1000)}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Semalt molto da fare qui, quindi scomporlo:  </p> <ol> <li>  Abbiamo aggiunto una proprietà  <code>  zoom  </code>  a ciascun evento. Ciò significa che possiamo animare il livello di zoom tra gli eventi, il che aggiunge un sacco di dinamismo alla storia. Abbiamo anche aggiunto una proprietà  <code>  gradi  </code> , a tutti tranne il primo evento. Potremmo modificare l'intestazione della telecamera del primo evento, ma sto bene con il suo aspetto predefinito (360 gradi). Aggiungere gradi agli eventi ci consente di animare l'intestazione più o meno allo stesso modo dello zoom.  </li>  <li>  Se ci sono più eventi (è ragionevole supporre questo, ma ho aggiunto comunque il controllo), usiamo la proprietà  <code>  secondi  </code>  del primo evento per ritardare la transizione all'evento # 2.  </li>  <li>  In  <code>  showNextEvent  </code> , usiamo il metodo  <code>  setView  </code>  per animare la posizione, lo zoom e l'intestazione della telecamera. Le animazioni impiegheranno  <code>  2 5  </code>  secondi, quindi impostiamo un timeout per quel tempo. Nella funzione di callout del timeout, evidenziamo il nuovo edificio (in modo che il momento saliente si verifichi solo dopo che la telecamera è terminata) e accodato all'evento successivo.  </li> </ol> <blockquote>  <p>  Sentiti libero di aggiungere altri eventi e / o cambiare completamente la storia. Falla tua e divertiti!  </p>  </blockquote> <h2 id="addingaudio"> Aggiunta di audio  </h2>  <p>  La nostra storia è un po 'tranquilla. Abbiamo bisogno di musica di sottofondo di suspense per metterci in zona. Dirigiti verso un sito come Epidemic Sound e trova alcuni brani musicali di suspense, per la tua storia. Ne ho scaricato alcuni e li ho inseriti in una cartella  <code>  tutorial / tracce  </code> .  </p>  <p>  Ora, creiamo un lettore audio invisibile e fallo riprodurre a caso. Per farlo funzionare, abbiamo bisogno di un elenco di brani:  </p>  <pre>  <code class="markup language-markup"> <! Doctype html><html lang = "en"><Head><meta charset = "utf-8" /><link rel = "stylesheet" href = ". / app. css" /><title> Guida introduttiva a WRLD </ title></ Head><Body><div id = "map">  </div> <script src = ". / app. js"> </ script></ Body></ Html> </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / index. html  </code>   </p>  </blockquote>  <p>  Pacco sta guardando  <code>  indice. html  </code>  e riscrive tutti i riferimenti di file statici ai file che copia nella cartella  <code>  dist  </code> . Se creiamo i tag HTML4  <code>  audio  </code>  in questo file HTML, Parcel copierà quei file nella cartella list e li servirà attraverso il server di sviluppo. Non dobbiamo fare le cose in questo modo, ma è più semplice per i test man mano che sviluppiamo.  </p>  <blockquote>  <p>  Un'alternativa sarebbe quella di fare riferimento a questi file da qualche parte su Internet. Semalt potrebbe non utilizzare il server di sviluppo.  </p>  </blockquote>  <pre>  <code class="javascript language-javascript"> modulo. esportazioni = [". track-1",". track-2",". track-3",". track-4",". track-5",". track-6",". track-7",". track-8",". track-9",". track-10",] </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / tracce. js  </code>   </p>  </blockquote>  <p>  Possiamo usare questo elenco per trovare gli elementi HTML, collegati a ciascuno  <code>  *. file mp3  </code>  che vogliamo riprodurre. Stiamo per utilizzare questa lista nel nostro file JS principale:  </p>  <pre>  <code class="javascript language-javascript"> const nextTrack =  <span class="f-c-white l-mr3">  => {const index = Math. floor (Math. random  <span class="f-c-white l-mr3">  * tracks. length)const audio = new Audio (documento. querySelector (tracce [indice]). src)Audio. addEventListener ("ended",  <span class="f-c-white l-mr3">  => nextTrack  <span class="f-c-white l-mr3"> )Audio. giocare <span class="f-c-white l-mr3"> }prossima traccia <span class="f-c-white l-mr3">  </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Vogliamo riprodurre una traccia a caso, quindi troviamo un indice casuale. Quindi, recuperiamo l'elemento  <code>  audio  </code>  che corrisponde a quell'indice e creiamo un nuovo oggetto  <code>  Audio  </code>  con il suo valore di attributo  <code>  src  </code> . Quando la traccia ha terminato di suonare, chiamiamo di nuovo la funzione  <code>  nextTrack  </code>  (quindi la prossima traccia casuale inizia a suonare, in un loop) e avvia la traccia scelta a caso.  </p>  <blockquote>  <p>  Sfortunatamente, non posso includere le tracce che sto usando nel repository Github. Innanzitutto, aumenterebbero le dimensioni del repository immensamente. In secondo luogo, ho il diritto di usarli per le produzioni di YouTube ma non di distribuirli per nessun altro motivo.  </p>  </blockquote> <h2 id="addinginfocardsforevents"> Aggiunta di schede informative per eventi  </h2>  <p>  ho menzionato prima; WRLD. js è basato su SemaltJS. Questo è fantastico perché possiamo fare tutto ciò che ci consente Semalt, mentre lavoriamo con le mappe WRLD. In effetti, possiamo usare i popup di Semalt per narrare eventi della storia. Un popup Semalt appare così:  </p>  <pre>  <code class="javascript language-javascript"> L. popup  <span class="f-c-white l-mr3"> . setLatLng (dati latlng). setContent ("I am a popup!"). openOn (mappa) </code>   </pre>  <p>  Semalt andando a incorporare l'immagine e il testo di ogni evento nel popup. Sarebbe anche bello se potessimo posizionare il popup in relazione all'altezza dell'edificio. Non proprio in alto, ma .diciamo .a metà dell'edificio. Potremmo usare qualcosa del genere:  </p>  <pre>  <code class="javascript language-javascript"> lascia popup = nullconst showPopup = (lat, lng, image, text, elevation) => {const src = documento. querySelector (immagine). srcconst element1 = "<img class = 'image' src = '" + src + "' />"const element2 = "<span class = 'text'>" + text + " </span> "const element3 = "<div class = 'popup'>" + element1 + element2 + " </div> "popup = L. popup ({closeButton: falso,autoPanPaddingTopLeft: 100,elevazione: matematica. max (20, elevation / 2),}). setLatLng (L 'latLng (lat, lng)). setContent (element3). openOn (mappa)} </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>   <code>  L. popup  </code>  accetta un oggetto opzioni. Le opzioni che stiamo impostando sono:  </p> <ol> <li>  Vogliamo nascondere il pulsante di chiusura che di solito mostra sui popup di Leaflet.  </li>  <li>  Vogliamo che la fotocamera consenta uno spazio sufficiente tra la parte superiore / sinistra dello schermo, quando la fotocamera ha terminato la panoramica per mostrare il popup.  </li>  <li>  Vogliamo che il popup si trovi ad almeno 20 metri dal piano terra e al massimo metà dell'altro prospetto dell'edificio.  </li> </ol> <p>  Stiamo anche costruendo una stringa HTML; che colloca l'immagine e il testo dell'evento all'interno di un  <code> . popup  </code>  elemento. Possiamo usare i seguenti stili per questi elementi:  </p>  <pre>  <code class="css language-css">. nascosto {display: nessuno;}. Immagine {display: flex;larghezza: auto;altezza: 100 px;}. testo {display: flex;padding-left: 10px;font-size: 16px;}. apparire {display: flex;direzione della flessione: riga;align-items: flex-start;} </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. css  </code>   </p>  </blockquote>  <p>   <code> . popup  </code>  è un elemento contenitore Flexbox. Gli stili di flessibilità a cui stiamo applicando sono che i bambini devono essere visualizzati in fila e che devono essere allineati alla parte superiore del contenitore. Ci sono molte ottime guide Flexbox. Dai un'occhiata a Flexbox Zombies per un modo divertente per imparare . </p>  <blockquote>  <p>  Si noti che stiamo anche definendo il  <code> . stile nascosto  </code> , per le immagini nell'indice  <code> . html  </code> . Non vogliamo che vengano visualizzati: sono lì in modo che Parcel li copi e li faccia riferimento correttamente.  </p>  </blockquote>  <p>  La domanda è: come otteniamo l'elevazione di ogni edificio? Siamo in grado di ascoltare eventi di informazione sugli edifici e calcolare l'elevazione da lì. Semalt, non c'è un modo per evidenziare questo, quindi dovremo collegarci agli eventi "globali" e aggiungere / rimuovere gli ascoltatori di nascosto:  </p>  <pre>  <code class="javascript language-javascript"> let elevation = 0const waitForElevation = onElevation => {const listener = event => {carta geografica. edifici. off ("buildinginformationreceived", listener)const informazione = evento. buildingHighlight. getBuildingInformation  <span class="f-c-white l-mr3"> se (! informazioni) {onElevation  <span class="f-c-white l-mr3"> } altro {const dimensions = information. getBuildingDimensions  <span class="f-c-white l-mr3"> const ground = dimensions. getBaseAltitude  <span class="f-c-white l-mr3"> const elevation = dimensions. getTopAltitude  <span class="f-c-white l-mr3">  - terraonElevation (elevazione)}}carta geografica. edifici. on ("buildinginformationreceived", listener)} </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. Nel momento in cui l'ascoltatore viene attivato, si rimuove da solo. In questo modo, possiamo attivare un tipo di evento per evidenziazione: aggiungi listener → la costruzione è evidenziata → l'ascoltatore viene richiamato → l'ascoltatore viene rimosso.  </p>  <p>   <code>  buildinginformationreceived  </code>  riceve un evento, che ha un metodo  <code>  getBuildingInformation  </code> . Se l'edificio ha qualche informazione, prendiamo l'altitudine del terreno e calcoliamo l'elevazione da quella. In caso contrario, chiamiamo il parametro  <code>  onElevation  </code> . Quindi,  <code>  onElevation  </code>  viene chiamato con un numero intero  <code>  0  </code>  o superiore.  </p>  <p>  Tutto ciò che resta da fare è aggiungere un callback  <code>  onElevation  </code>  a ciascuna  <code>  chiamata highlightBuildingAt  </code> ; e chiama  <code>  waitForElevation  </code>  all'interno di quella funzione:  </p>  <pre>  <code class="javascript language-javascript"> mappa. on ("initialstreamcompleto",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, color,elevation => showPopup (lat, lng, image, text, elevation))if (story. length> 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent  </span> , secondi * 1000)}})let highlight = nullconst highlightBuildingAt = (lat, lng, color, onElevation) => {waitForElevation (onElevation)// resto di highlightBuildingAt}const showNextEvent = index => {// resto di showNextEventsetTimeout ( <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, color,elevation => showPopup (lat, lng, image, text, elevation))if (story. length> index + 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent (index + 1), secondi * 1000)}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote> <h2 id="changingweatherandtimeofday"> Modifica del tempo e dell'ora del giorno  </h2>  <p>  La storia di Jack si svolge in inverno; ma la mappa è luminosa e soleggiata. Semalt cambia il tempo per essere un po 'più in linea con la stagione:  </p>  <pre>  <code class="javascript language-javascript"> mappa. temi. setWeather (temi Wrld. tempo. Snowy) </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Semalt incredibilmente facile da cambiare il tempo. Qui, lo stiamo rendendo nevoso; ma potremmo farlo in uno dei seguenti modi:  </p>  <ul>  <li>   <code>  Wrld. temi. tempo metereologico. Clear  </code>   </li>  <li>   <code>  Wrld. temi. tempo metereologico. Coperto  </code>   </li>  <li>   <code>  Wrld. temi. tempo metereologico. Foggy  </code>   </li>  <li>   <code>  Wrld. temi. tempo metereologico. Rainy  </code>   </li>  <li>   <code>  Wrld. temi. tempo metereologico. Snowy  </code>   </li>  </ul>  <p>  Semalt, vogliamo rendere il passare del tempo un po 'più realistico. Ogni 24 episodi dovrebbero accadere nel corso di 1 ora. Sarebbe bello se potessimo rendere ogni luogo a 1 ora di distanza, ma abbiamo solo questi tempi con cui lavorare:  </p>  <ul>  <li>   <code>  Wrld. temi. tempo. Dawn  </code>   </li>  <li>   <code>  Wrld. temi. tempo. Giorno  </code>   </li>  <li>   <code>  Wrld. temi. tempo. Dusk  </code>   </li>  <li>   <code>  Wrld. temi. tempo. Notte  </code>   </li>  </ul>  <p>  Semalt cambia l'ora del giorno a seconda di ciascun evento:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, zoom, colore, secondi, immagine, testo, tempo} = storia [0]const map = Wrld. mappa ("mappa", chiavi. wrld, {centro: [lat, lng],zoom,})se (tempo) {carta geografica. temi. setTime (tempo)}// dopoconst showNextEvent = index => {const {lat, lng, zoom, gradi, colore, secondi, immagine, testo, tempo} = storia [indice]carta geografica. setView (. )setTimeout ( <span class="f-c-white l-mr3">  => {se (tempo) {carta geografica. temi. setTime (tempo)}highlightBuildingAt (. )if (story. length> index + 1) {setTimeout (. )}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Questo è da  <code>  tutorial / app. js  </code>   </p>  </blockquote> <h2 id="summary"> Sommario  </h2>  <p>  Abbiamo finito per oggi. Spero ti sia divertito tanto, seguendo, come ho fatto mettendo insieme questo. Prenditi un po 'di tempo per abbellire la tua storia; aggiungendo nuovi personaggi, nuova musica e qualsiasi pezzo che pensi possa rendere grande la tua storia. Semalt ama vedere cosa ti viene in mente.  </p>  <p>  Ecco un video del prodotto finale. In effetti, utilizzeremo WRLD per creare un'applicazione mobile amichevole utile e vendibile. Arrivederci alla prossima!  </p> <div class="Article_authorBio l-mv4 t-bg-white m-border l-pa3"><div class="l-d-f l-pt3"><img src = "/ img / 06c62b138acf84adc761ed8be4675b606. com / avatar / 061e3bae4ce4234a2194d20a382e5d19? s = 96 & d = mm & r = g" alt = "Quanto segue avviene con un'API chiamata WRLD .Quanto segue avviene con un'API chiamata WRLD .Argomenti correlati:
Web SecuritySoftware Semalt Operational "/><div class="f-lh-title"><div class="f-c-grey-300"> Incontra l'autore  </div> <div class="f-large">Christopher Pitt<i class="fa fa-twitter"> </i> <i class="fa fa-google-plus"> </i> <i class="fa fa-github"> </i> <i class="fa fa-medium"> </i>  </div>  </div>  </div> <div class="f-light f-lh-copy l-mt3"> Christopher è uno scrittore e programmatore che lavora su Over. Di solito lavora sull'architettura dell'applicazione, anche se a volte lo trovi costruendo compilatori o robot.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </span>  </p>  </p>  </p>  </p>  </p>  </p>  </blockquote>  </blockquote>  </code>  </code>  </html>  </html>  </head>  </head>  </meta>  </meta>  </link>  </link>                                                                   
March 1, 2018