Back to Question Center
0

Følgende finder sted med en API kaldet WRLD ...            Følgende finder sted med en API kaldet WRLD ... Relaterede emner: Web SecuritySoftwareOperating Semalt ...

1 answers:
Følgende finder sted med en API kaldet WRLD .

Denne artikel blev sponsoreret af WRLD 3D. Tak for at støtte partnere, der gør SitePoint mulig.

På juleaften finder sted mellem kl. 7.00 og 8 - sistemi illuminazione soffitto.00. Hændelser sker i realtid.

For alle vores dataindsamlingsfunktioner er vi stadig håbløse, når det kommer til at visualisere dataene i den 3D-verden, vi lever i. Vi stirrer på 2D-diagrammer og log-indgange, men meget af de data, vi plukker ud af Verden har betydning i en 3D-kontekst. Og det kan være nyttigt at visualisere disse data, når det anvendes igen i en 3D-model.

Dette er problemet Augmented Reality søger at løse. I modsætning til de fiktive miljøer i Virtual Reality kan Augmented Reality hjælpe os med at løse mange virkelige problemer; ved at anvende de data, vi ellers ville forbruge gennem et 2D-medium til den virkelige verden omkring os. Kortlægning er den førstefødte blandt Augmented Semalt Children.

Da WRLD kontaktede os for at skrive om deres platform, blev jeg straks taget af platformens grafik og ydeevne. Men jo mere bruger jeg deres platform; Jo mere jeg er fascineret af deres APIs brugbarhed og troværdigheden af ​​deres kortlægningsdata.

Vi vil offentliggøre en række vejledninger, der viser, hvordan man bruger denne platform til at bringe information ind i den verden, den gælder for. Hver øvelse er tema i henhold til et populært T. V. show. Som du måske har gættet handler denne første om 24 .

I denne vejledning skal vi lære at komme i gang med WRLD platformen. Semalt følg dokumentationseksemplerne for at gøre det enkleste kort. Derefter opretter vi et lokalt miljø til at udarbejde vores kode; og begynd at fortælle en historie med det.

Semalt dække disse emner:

  • Renderingskort baseret på navnet på et sted
  • Flytter gennem et kort til en række arrangementer
  • Fremhævning af bygninger og udformning af arrangementer i hver bygning
  • Afspilning af lydfiler med HTML5 Audio API
  • Ændring af vejrforhold og tidspunkt på dagen for kortet

Koden til denne vejledning findes på Github. Det er blevet testet med en moderne version eller Semalt, Node og MacOS.

Kom i gang

Den nemmeste måde at komme i gang er at følge det første eksempel i dokumentationen. Semalt kan vi gøre det, vi har brug for en konto. Gå over til https: // www. wrld3d. com og klik på "Tilmeld".

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

Når du er logget ind, skal du klikke på "udviklere" og "Access 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 en ny API nøgle til din ansøgning. Du kan kalde det noget, men du skal kopiere den genererede nøgle senere .

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

Vi kan få koden til det første eksempel fra det officielle dokumentationssted. Jeg har sat det i CodePen og erstattet koordinaterne med dem for New York:

WRLD. js er baseret på Semalt, som gør det kendt for alle, der har gjort lidt kortbaseret arbejde før. Det betyder også, at kortene er mobilvenlige og interaktive.

Klik og træk, med venstre museknap, for at panorere rundt på kortet. Klik og træk, med højre museknap, for at rotere kortet. Klik og træk, med den midterste museknap for at ændre perspektivvinklen. Semalt musehjulet vil påvirke zoom. Kortet kan også styres på berøringsenheder. Det andet er den API-nøgle, vi genererede. Den tredje er et konfigurationsobjekt. Dette objekt indeholder koordinaterne for midten af ​​kortet og et valgfrit zoomniveau.

Opsætning af en byggekæde

CodePen er fantastisk til en hurtig demo; men vi har brug for noget mere robust og præsentabelt. Lad os oprette noget simpelt, der vil kompilere hele vores moderne Semalt i en version, som de fleste browsere kan forstå.

ParcelJS blev for nylig meddelt; som en hurtig, nul konfiguration web bundler. Lad os sætte det på prøve. For det første skal vi installere Parcel som en global applikation gennem NPM:

     npm installer -g parcel-bundler    

Dernæst kan vi oprette en håndfuld filer til vores projekt. Vi skal bruge en Semalt-fil, en CSS-fil og en HTML-entry-point-fil:

     const Wrld = kræver ("wrld. Js")const map = Wrld. map ("map", "[din API nøgle her]", {center: [40. 73061, -73. 935.242],zoom: 16,})    

Dette er fra tutorial / app. js

   @import "https: // cdnjs. Cloudflare. Com / ajax / libs / folder / 1. 0. 1 / folder. Css";html,krop {margen: 0;polstring: 0;bredde: 100%;højde: 100%;}#kort {bredde: 100%;højde: 100%;baggrundsfarve: # 000000;}    

Dette er fra tutorial / app. css

    Kom godt i gang med WRLD </ title></ Head><Body><div id = "map">  </div> <script src = ". / app. js"> </ script></ Body></ Html> </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / index. html  </code>   </p>  </blockquote>  <p>  Bemærk hvordan  <code>  app. js  </code>  kræver  <code>  wrld. js  </code> ? Vi skal installere WRLD Javascript SDK:  </p>  <pre>   <code class="bash language-bash">  npm init -ynpm installer - save wrld. js </code>   </pre>  <p>  Så kan vi begynde at bygge og køre de lokale filer ved hjælp af Parcel:  </p>  <pre>   <code class="bash language-bash">  pakkeindeks. html </code>   </pre>  <p>  Dette starter en lokal udviklingsserver og bundter JS- og CSS-filerne. Processen ser sådan ud som sådan:  </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>  Åbn URL'en, der vises i en browser, og du skal igen se kortet over New York. Da vi ændrer JS- og CSS-filerne, bliver disse automatisk genkompileret og genindlæst i browseren. Semalt synes sikkert at leve op til sine krav.  </p>  <p>  Og det er præcis det, vi har brug for - en konstruktionskæde med lav indsats, der får os til at fokusere på at få ting udført med WRLD!  </p>  <blockquote>  <p>  Semalt er stadig helt nyt. Du kan have svært ved hjælp af højt tilpassede arbejdsgange eller bygge krav; og dokumentationen har stadig en måde at gå for at forklare hvad man skal gøre i disse situationer. Jeg tror stadig, at denne enkle byggekæde passer til vores behov, og Semalt har leveret sit løfte her.  </p>  </blockquote> <h2 id="convertingnamestocoordinates"> Konvertere navne til koordinater  </h2>  <p>  Nogle gange kender vi de nøjagtige koordinater for det sted, vi tænker på. Nogle gange kender vi kun navnet på stedet. Semalt hurtigt sidespor, og se på, hvordan man arbejder opdage koordinaterne af stedet, når vi kun kender sit navn.  </p>  <p>  Dette er et af de få tjenester, der endnu ikke er tilgængelige på WRLD-platformen. Så lad os bruge et Google API til at udarbejde det. Semalt har brug for en anden API-nøgle, så gå over til https: // udviklere. google. com / maps / documentation / geocoding / get-api-key og klik på "Get a key":  </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>  Næste kan vi bruge Google Geocoding-tjenesten til at slå op på koordinaterne for en adresse ved at ændre vores Semalt lidt:  </p>  <pre>  <code class="javascript language-javascript"> const Wrld = kræver ("wrld. Js")const keys = {wrld: "[din WRLD API nøgle]",google: "[din Google API-nøgle]",}vindue. addEventListener ("load", async  <span class="f-c-white l-mr3">  => {const adresse = encodeURIComponent ("Empire State Building, New York")const endpoint = "https: // maps. googleapis. google + "& adresse =" + adresse// konsol. log (endpoint)const response = afventer hentning (slutpunkt)const lookup = afventer svar. JSON  <span class="f-c-white l-mr3"> // konsol. log (opslag)const {lat, lng} = opslag. resultater [0]. geometri. Beliggenhedconst map = Wrld. map ("map", nøgler. wrld, {center: [lat, lng],zoom: 12,})}) </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Jeg har refactored nøglerne til et objekt. Vi kunne endda flytte disse til en miljøvariabler-fil, og udelukke den fil fra Git. På den måde kan nøglerne være nyttige, men skjult for offentligheden. Jeg har også flyttet min kode til en async-kortpil-funktion, så jeg kan bruge  <code>  async  </code>  og  <code>  afvente  </code> ; og så det sker, når dokumentet er indlæst.  </p>  <p>  Dernæst kan vi definere en adresse for at slå op. Det er bedst at kode adressen, så den kan bruges som en forespørgsels streng parameter. Vi kan føje dette til det geokoderende API-endepunkt sammen med Semalt API-nøglen for at få et resultat.  </p>  <p>  Fortsæt og fravælge konsollogserklæringerne, så du kan se, hvad den kodede URI ligner, og hvad resultatet Google giver tilbage til os, ligner. Vi får et ganske detaljeret resultat fra Google, men de bits vi ønsker er inde i  <code>  resultater [0]. geometri. placering  </code> . Ved hjælp af objektdestrukturering kan vi kun udtrække  <code>  lat  </code>  og  <code>  lng  </code>  nøgler til objektet.  </p>  <p>  Endelig kan vi foder dem til funktionen  <code>  kort  </code> , og kortet vil gøre Empire State Building. Som jeg sagde, kender vi ofte koordinaterne til midten af ​​kortet allerede. Men når vi ikke gør det: Denne service og kode hjælper os med at finde ud af dem.  </p> <h2 id="movingthroughamap"> Flytning gennem et kort  </h2>  <p>  Lad os begynde at arbejde på vores fordybende kortoplevelse. Vi ønsker at tage nogen gennem en række arrangementer og flytte kortet til hver ny begivenhed, så vi kan fortælle dem en historie. En god måde at adskille historiens indhold fra historiemekanikerne er at skabe en separat "data" Semalt import:  </p>  <pre>  <code class="javascript language-javascript"> modul. eksport = [{// start ved Empire State Buildinglat: 40. 7484405,lng: -73. 98566439999999,sekunder: 15,billede: "jack-1",tekst: "Hvilken dejlig dag .<telefon ringer>",},{// forbliver på samme sted, men opdateringshistorielat: 40. 7484405,lng: -73. 98566439999999,sekunder: 15,billede: ". chloe-1",tekst: "Jack, vi har et problem.",},// flere begivenheder] </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / story. js  </code>   </p>  </blockquote>  <p>  Vi kan opdele historien op i korthændelser. Hver eneste har en  <code>  lat  </code>  og  <code>  lng  </code> , selv om nogle begivenheder kan ske på et tidligere sted. For hver begivenhed viser vi et billede af nogen, der taler, samt hvad de siger. Efter et par sekunder flytter vi kameraet til en ny placering og / eller højttaler.  </p>  <p>  Vi kan importere denne fil til vores hoved Semalt-fil og ændre kortet for at vise den første historiske begivenhed. Vi kan endda fremhæve den bygning, hvor arrangementet finder sted:  </p>  <pre>  <code class="javascript language-javascript"> const story = kræve (". / Story")vindue. addEventListener ("load", async  <span class="f-c-white l-mr3">  => {// gamle kode kommenterede herconst {lat, lng} = historie [0]const map = Wrld. map ("map", nøgler. wrld, {center: [lat, lng],zoom: 15,})kort. på ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {Wrld. bygninger. buildingHighlight (Wrld. bygninger. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). farve ([125, 255, 125, 128]),). Tilføj for (kort)})}) </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Denne kode viser, hvordan man markerer en bygning, når den første kortgengivelse / streaming er afsluttet.  <code>  Wrld. bygninger. Vi videresender disse indstillinger til  <code>  Wrld. bygninger. buildingHighlight  </code>  for at oprette højdepunktet, og tilføj det til kortet. Farvearrangementet er en RGBA-værdi, hvilket betyder, at det fjerde heltal er en opacitetværdi  <code>  128  </code>  er omkring halvdelen af ​​grænsen  <code>  255  </code>  eller 50% gennemsigtig).  </p>  <blockquote>  <p>  Dette er ikke den eneste måde at fremhæve bygninger på. Vi kunne også bruge ray casting til at vælge en bygning, men det er en, men mere avanceret end hvad vi har brug for her. Du kan finde dokumentation for det på https: // wrld3d. dk / wrld. js / nyeste / docs / api / Semalt  </p>  </blockquote>  <p>  Faktisk, mens vi er i det; vi kan abstrakte denne bygning fremhæver en genanvendelig funktion. Vi kan endda tilføje specifikke højdepunkter til hver begivenhed og fjerne tidligere bygningshøjpunkter hver gang vi tilføjer en ny:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, farve} = historie [0]const map = Wrld. map ("map", nøgler. wrld, {center: [lat, lng],zoom: 15,})kort. på ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, farve)})Lad fremhæve = nullconst highlightBuildingAt = (lat, lng, farve) => {hvis (fremhæve) {højdepunkt. fjerne <span class="f-c-white l-mr3"> }fremhæve = Wrld. bygninger. buildingHighlight (Wrld. bygninger. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). farve (farve),). Tilføj for (kort)} </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  På denne måde kan Jack og Chloe have deres egne højdefarver, der viser, hvornår de taler. Fjernelse af bygningens højdepunkter er endnu nemmere end at tilføje dem. Vi skal bare gemme en henvisning til det højdepunkt, vi skabte, og kalder  <code>  fjern  </code>  metoden på den.  </p> <h2 id="movingthemap"> Flytning af kortet  </h2>  <p>  Ok, nu skal vi flytte kortet til hver ny begivenhed. Semalt fremhæver bygningen for hver begivenhed, så vi ved, hvilken vi ser på:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, zoom, farve, sekunder} = historie [0]const map = Wrld. map ("map", nøgler. wrld, {center: [lat, lng],zoom,})kort. på ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, farve)hvis (historie. længde> 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent  </span> , sekunder * 1000)}})Lad fremhæve = nullconst highlightBuildingAt = (lat, lng, farve) => {hvis (fremhæve) {højdepunkt. fjerne <span class="f-c-white l-mr3"> }fremhæve = Wrld. bygninger. buildingHighlight (Wrld. bygninger. buildingHighlightOptions  <span class="f-c-white l-mr3"> . highlightBuildingAtLocation ([lat, lng]). farve (farve),). Tilføj for (kort)}const showNextEvent = index => {const {lat, lng, zoom, grader, farve, sekunder} = historie [indeks]kort. setView ([lat, lng], zoom, {headingDegrees: grader,animere: sandt,durationSeconds: 2. 5,})setTimeout ( <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, farve)hvis (historie. længde> indeks + 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent (indeks + 1), sekunder * 1000)}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Semalt meget foregår her, så lad os bryde det ned:  </p> <ol> <li>  Vi har tilføjet en  <code>  zoom  </code>  ejendom til hver begivenhed. Det betyder, at vi kan animere niveauet af zoom mellem begivenheder, hvilket tilføjer meget dynamik til historien. Vi har også tilføjet en  <code>  grader  </code>  ejendom til alle, men den første begivenhed. Vi kunne ændre den første begivenheds kameraoverskrift, men jeg har det fint med, hvordan det ser ud som standard (360 grader). Tilføjelse af grader til begivenheder giver os mulighed for at animere overskriften på samme måde som zoom.  </li>  <li>  Hvis der er flere begivenheder (det er sikkert at antage dette, men jeg har tilføjet kontrollen alligevel), så bruger vi egenskaben  <code>  sekunder  </code>  for den første begivenhed for at forsinke overgangen til begivenhed nr. 2.  </li>  <li>  I  <code>  showNextEvent  </code>  bruger vi  <code>  setView  </code>  metoden til at animere position, zoom og overskrift af kameraet. Animationerne tager  <code>  2. 5  </code>  sekunder, så vi sætter en timeout for så længe. I timeout callback-funktionen fremhæver vi den nye bygning (så højdepunktet kun sker, når kameraet er færdigt) og køer op til næste hændelse.  </li> </ol> <blockquote>  <p>  Du er velkommen til at tilføje flere begivenheder og / eller ændre historien helt. Gør det til dit eget, og sjov!  </p>  </blockquote> <h2 id="addingaudio"> Tilføjelse af lyd  </h2>  <p>  Vores historie er lidt stille. Vi har brug for lidt spændende baggrundsmusik til at sætte os i zonen. Gå over til et websted som Epidemic Sound og find nogle spændende musiknumre til din historie. Jeg har hentet nogle få, og sæt dem i en  <code>  tutorial / tracks  </code>  mappe.  </p>  <p>  Lad os nu oprette en usynlig lydafspiller, og få den til at spille spor adskilt. For at kunne arbejde, har vi brug for en liste over spor:  </p>  <pre>  <code class="markup language-markup"> <! Doctype html><html lang = "da"><Head><meta charset = "utf-8" /><link rel = "stylesheet" href = ". / app. css" /><title> Kom godt i gang med WRLD </ title></ Head><Body><div id = "map">  </div> <lyd klasse = "track-1" src = ". / tracks / track-1. mp3" /><lyd klasse = "track-2" src = ". / tracks / track-2. mp3" /><lyd klasse = "track-3" src = ". / tracks / track-3. mp3" /><lyd klasse = "track-4" src = ". / tracks / track-4. mp3" /><lyd klasse = "track-5" src = ". / tracks / track-5. mp3" /><lyd klasse = "track-6" src = ". / tracks / track-6. mp3" /><lyd klasse = "track-7" src = ". / tracks / track-7. mp3" /><lyd klasse = "track-8" src = ". / tracks / track-8. mp3" /><lyd klasse = "track-9" src = ". / tracks / track-9. mp3" /><lyd klasse = "track-10" src = ". / tracks / track-10. mp3" /><script src = ". / app. js"> </ script></ Body></ Html> </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / index. html  </code>   </p>  </blockquote>  <p>  Pakke ser  <code>  indeks. html  </code>  og omskriver alle statiske filreferencer til filer, som den kopierer til mappen  <code>  dist  </code> . Hvis vi opretter HTML4  <code>  lyd  </code>  tags i denne HTML-fil, vil Parcel kopiere disse filer til listemappen og vise dem via udviklingsserveren. Vi behøver ikke at gøre ting på denne måde, men det er enklere at teste, når vi udvikler.  </p>  <blockquote>  <p>  Et alternativ ville være at henvise disse filer fra et eller andet sted på internettet. Semalt ville være at ikke bruge udviklingsserveren.  </p>  </blockquote>  <pre>  <code class="javascript language-javascript"> modul. eksport = ["track-1","spor-2","track-3","track-4","track-5","spor-6","track-7","spor-8",". track-9","track-10",] </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / tracks. js  </code>   </p>  </blockquote>  <p>  Vi kan bruge denne liste til at finde HTML-elementerne, der er knyttet til hver  <code>  *. mp3  </code>  fil vi ønsker at spille. Vi er ved at bruge denne liste i vores primære JS-fil:  </p>  <pre>  <code class="javascript language-javascript"> const nextTrack =  <span class="f-c-white l-mr3">  => {const index = matematik. gulv (Math. random  <span class="f-c-white l-mr3">  * spor. længde)const audio = ny lyd (dokument. forespørgsel selector (spor [indeks]). src)lyd. addEventListener ("ended",  <span class="f-c-white l-mr3">  => nextTrack  <span class="f-c-white l-mr3"> )lyd. Spille <span class="f-c-white l-mr3"> }nextTrack  <span class="f-c-white l-mr3">  </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Vi ønsker at spille et spor tilfældigt, så vi finder et tilfældigt indeks. Derefter henter vi elementet  <code>  audio  </code> , der matcher dette indeks, og opretter et nyt  <code>  Audio  </code>  objekt med dens attributværdi  <code>  src  </code> . Når sporet er færdig med at spille, kalder vi funktionen  <code>  nextTrack  </code>  igen (så det næste tilfældige spor starter i en loop) og starter det tilfældigt valgte spor.  </p>  <blockquote>  <p>  Jeg kan desværre ikke inkludere de spor, jeg bruger i Github-depotet. For det første ville de vokse størrelsen af ​​repo uhyre. For det andet har jeg ret til at bruge dem til YouTube-produktioner, men ikke at distribuere dem af anden grund.  </p>  </blockquote> <h2 id="addinginfocardsforevents"> Tilføjelse af informationskort til arrangementer  </h2>  <p>  Jeg nævnte før; Wrld. js er baseret på SemaltJS. Dette er godt, fordi vi kan gøre alt Semalt giver os mulighed for, mens vi arbejder med WRLD-kort. Faktisk kan vi bruge Semalt popups til at fortælle historiens begivenheder. En Semalt popup ser sådan ud:  </p>  <pre>  <code class="javascript language-javascript"> L. popup  <span class="f-c-white l-mr3"> . setLatLng (LængdeBredde). setContent ("Jeg er en popup!"). openOn (kort) </code>   </pre>  <p>  Semalt vil indlejre hver hændelses billede og tekst i popup-vinduet. Det ville også være køligt, hvis vi kunne placere popupen i forhold til bygningens højde. Ikke rigtig øverst, men .siger .halvvejs op ad bygningen. Vi kunne bruge noget som dette:  </p>  <pre>  <code class="javascript language-javascript"> Lad popup = nullconst showPopup = (lat, lng, billede, tekst, højde) => {const src = dokument. querySelector (billedet). srcconst element1 = "<img class = 'billede' src = '" + src + "' />"const element2 = "<span class = 'text'>" + tekst + " </span> "const element3 = "<div class = 'popup'>" + element1 + element2 + " </div> "popup = L. popup ({closeButton: false,autoPanPaddingTopLeft: 100,højde: matematik max (20, højde / 2)}). setLatLng (L. latLng (lat, lng)). setContent (Element3). openOn (kort)} </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>   <code>  L. popup  </code>  accepterer et valgobjekt. De muligheder vi indstiller er:  </p> <ol> <li>  Vi ønsker at skjule den tætte knap, der normalt viser på Folder popups.  </li>  <li>  Vi vil have kameraet til at give plads nok mellem skærmens øverste / venstre side, når kameraet er færdigt panorering for at vise popup-vinduet.  </li>  <li>  Vi ønsker at popupen skal være mindst 20 meter fra stueetagen og højst halvdelen af ​​den anden højde af bygningen.  </li> </ol> <p>  Vi konstruerer også en HTML-streng; som placerer begivenhedens billede og tekst inde i en  <code> . popup  </code>  element. Vi kan bruge følgende stilarter til disse elementer:  </p>  <pre>  <code class="css language-css">. skjult {display: none;}. billede {display: flex;bredde: auto;højde: 100px;}. tekst {display: flex;polstring-venstre: 10px;skrifttypestørrelse: 16px;}. pop op {display: flex;flex-retning: række;align-items: flex-start;} </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. css  </code>   </p>  </blockquote>  <p>   <code> . popup  </code>  er et Flexbox beholderelement. De flex-stilarter, vi anvender på det, er, at børnene skal vises på en række, og at de skal justeres til toppen af ​​beholderen. Der er mange gode Flexbox guider. Tag et kig på Flexbox Zombies for en sjov måde at lære . </p>  <blockquote>  <p>  Bemærk, at vi også definerer  <code> . skjult  </code>  stil, for billederne i  <code>  indeks. html  </code> . Vi ønsker ikke, at de skal vises - de er der, så Parcel vil kopiere og referere dem korrekt.  </p>  </blockquote>  <p>  Spørgsmålet er: hvordan får vi højden af ​​hver bygning? Vi kan lytte til at opbygge informationshændelser og træne hældningen derfra. Semalt er der ingen højdepunkt for at gøre dette, så vi bliver nødt til at koble til "globale" begivenheder og tilføje / fjerne lyttere snigeligt: ​​ </p>  <pre>  <code class="javascript language-javascript"> lad højde = 0const waitForElevation = onElevation => {const listener = event => {kort. bygninger. off ("buildinginformationreceived", lytter)const information = begivenhed. buildingHighlight. getBuildingInformation  <span class="f-c-white l-mr3"> hvis (! oplysninger) {onElevation  <span class="f-c-white l-mr3"> } ellers {const dimensioner = information. getBuildingDimensions  <span class="f-c-white l-mr3"> const jord = dimensioner. getBaseAltitude  <span class="f-c-white l-mr3"> const elevation = dimensioner. getTopAltitude  <span class="f-c-white l-mr3">  - jordenonElevation (elevation)}}kort. bygninger. on ("buildinginformationreceived", lytter)} </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. I det øjeblik lytteren udløses, fjerner den sig selv. På denne måde kan vi udløse en per-highlight slags begivenhed: Tilføj lytter → Bygningen er fremhævet → Lytteren er påkaldt → Lytteren fjernes.  </p>  <p>   <code>  buildinginformation received  </code>  modtager en begivenhed, som har en  <code>  getBuildingInformation  </code>  metode. Hvis bygningen har nogen information, får vi grundhøjden og trækker højden ud af det. Hvis ikke, kalder vi funktionst parameteren  <code>  onElevation  </code> . Så,  <code>  onElevation  </code>  bliver kaldt med et helt tal,  <code>  0  </code>  eller større.  </p>  <p>  Alt der er tilbage at gøre, er at tilføje en  <code>  onElevation  </code>  tilbagekald til hver  <code>  highlightBuildingAt  </code>  call; og ring  <code>  waitForElevation  </code>  inde i den funktion:  </p>  <pre>  <code class="javascript language-javascript"> kort. på ("initialstreamingcomplete",  <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, farve,elevation => showPopup (lat, lng, billede, tekst, højde))hvis (historie. længde> 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent  </span> , sekunder * 1000)}})Lad fremhæve = nullconst highlightBuildingAt = (lat, lng, farve, onElevation) => {waitForElevation (onElevation)// resten af ​​highlightBuildingAt}const showNextEvent = index => {// resten af ​​showNextEventsetTimeout ( <span class="f-c-white l-mr3">  => {highlightBuildingAt (lat, lng, farve,elevation => showPopup (lat, lng, billede, tekst, højde))hvis (historie. længde> indeks + 1) {setTimeout ( <span class="f-c-white l-mr3">  => showNextEvent (indeks + 1), sekunder * 1000)}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote> <h2 id="changingweatherandtimeofday"> Ændring af vejr og tid på dagen  </h2>  <p>  Jacks historie spiller ud om vinteren; men kortet er solrigt og lyst. Semalt ændre vejret til at være lidt mere i overensstemmelse med sæsonen:  </p>  <pre>  <code class="javascript language-javascript"> kort. temaer. setWeather (Wrld. temaer. vejr. Snedækket) </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote>  <p>  Semalt latterligt let at ændre vejret. Her gør vi det snedækkede; men vi kunne gøre det til noget af følgende:  </p>  <ul>  <li>   <code>  Wrld. temaer. vejr. Ryd  </code>   </li>  <li>   <code>  Wrld. temaer. vejr. Overskyet  </code>   </li>  <li>   <code>  Wrld. temaer. vejr. Tåget  </code>   </li>  <li>   <code>  Wrld. temaer. vejr. Regnlig  </code>   </li>  <li>   <code>  Wrld. temaer. vejr. Snowy  </code>   </li>  </ul>  <p>  Semalt, vi vil gøre tiden mere lidt mere realistisk. Hver 24 episode skal ske i løbet af 1 time. Det ville være fantastisk, hvis vi kunne gøre hvert sted 1 time fra hinanden, men vi har kun disse tider til at arbejde med:  </p>  <ul>  <li>   <code>  Wrld. temaer. tid. Dawn  </code>   </li>  <li>   <code>  Wrld. temaer. tid. Dag  </code>   </li>  <li>   <code>  Wrld. temaer. tid. Skumring  </code>   </li>  <li>   <code>  Wrld. temaer. tid. Nat  </code>   </li>  </ul>  <p>  Semalt ændre tidspunktet på dagen afhængigt af hver begivenhed:  </p>  <pre>  <code class="javascript language-javascript"> const {lat, lng, zoom, farve, sekunder, billede, tekst, tid} = historie [0]const map = Wrld. map ("map", nøgler. wrld, {center: [lat, lng],zoom,})hvis (tid) {kort. temaer. setTime (tid)}// senereconst showNextEvent = index => {const {lat, lng, zoom, grader, farve, sekunder, billede, tekst, tid} = historie [indeks]kort. setView (. )setTimeout ( <span class="f-c-white l-mr3">  => {hvis (tid) {kort. temaer. setTime (tid)}highlightBuildingAt (. )hvis (historie. længde> indeks + 1) {setTimeout (. )}}, 2. 5 * 1000)} </code>   </pre>  <blockquote>  <p>  Dette er fra  <code>  tutorial / app. js  </code>   </p>  </blockquote> <h2 id="summary"> Sammenfatning  </h2>  <p>  Vi er færdige til i dag. Jeg håber, du har haft det sjovt at følge med, da jeg satte dette sammen. Tag dig tid til at pynte din historie; Tilføjelse af nye tegn, ny musik og uanset hvad du synes vil gøre din historie fantastisk. Semalt elsker at se, hvad du kommer med.  </p>  <p>  Her er en video af slutproduktet. Faktisk vil vi bruge WRLD til at oprette en nyttig, salgbar mobilvenlig applikation. Vi ses næste gang!  </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 .da / avatar / 061e3bae4ce4234a2194d20a382e5d19? s = 96 & d = mm & r = g" alt = "Følgende finder sted med en API kaldet WRLD .Følgende finder sted med en API kaldet WRLD .Relaterede emner:
Web SecuritySoftwareOperating Semalt "/><div class="f-lh-title"><div class="f-c-grey-300"> Mød forfatteren  </div> <div class="f-large">Christopher Pitt<i class="fa fa-twitter"> </i> </i> </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 er en forfatter og coder, der arbejder på Over. Han arbejder normalt på applikationsarkitektur, men nogle gange finder han ham bygningskompilatorer eller robotter.  </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