<\/P>
Met Arcade heb je de flexibiliteit om op allerlei manieren met je datumvelden te werken, drempels aan te passen en zelfs je eigen nieuwe, afgeleide data te berekenen. Lees verder om te leren hoe je deze exacte kaart zelf kunt maken om aan de slag te gaan.<\/P>
Laten we eerst de kaart instellen. Open een nieuwe webmap, klik op Toevoegen >> Blader door Living Atlas-lagen >> en zoek "MODIS". Het eerste resultaat zou een "Satellite (MODIS) Thermal Hotspots and Fire Activity" feature layer van Esri moeten zijn. Voeg die laag toe aan je kaart. Klik in het Content-paneel op de filterknop voor de MODIS-laag en stel een filter in voor "Acquisitiedatum in de laatste 1 dag(en)". Pas Filter toe. Dit filtert de hotspots zodat ze binnen de laatste 24 uur vallen. Klik nu bovenaan op Basemap en selecteer de Dark Gray Canvas basemap. Nu is het tijd om Arcade te gebruiken om onze eigen relatieve tijdsymbologie voor de hotspots te bouwen.<\/P>
Voor de MODIS-laag, klik op de Wijzig stijl-knop. Vouw "Kies een attribuut om te tonen" uit, scroll naar beneden in de lijst met velden en klik op "Nieuwe Expressie". Dit opent de Arcade Expression builder. Plak de volgende code in het expressieveld.<\/P>
function<\/SPAN> determineCategory<\/SPAN>(<\/SPAN>value)<\/SPAN>{<\/SPAN>if<\/SPAN> (<\/SPAN>value <=<\/SPAN> 4<\/SPAN> )<\/SPAN>{<\/SPAN>return<\/SPAN> \"1\"<\/SPAN>}<\/SPAN>else<\/SPAN> if<\/SPAN> (<\/SPAN>value ><\/SPAN> 4<\/SPAN> &&<\/SPAN> value <=<\/SPAN> 8<\/SPAN>)<\/SPAN>{<\/SPAN>return<\/SPAN> \"2\"<\/SPAN>}<\/SPAN>else<\/SPAN> if<\/SPAN> (<\/SPAN>value ><\/SPAN> 8<\/Span> && value <= 12){return \"3\"}else if (value > 12 && value <= 16){return \"4\"}else if (value > 16 && value <= 20){ return \"5\" } else { return \"6\" }}var hours = DateDiff(now(),$feature["ACQ_DATE"] , "hours")determineCategory(hours)Je kunt hier desgewenst de drempels voor elke categorie aanpassen . Houd er rekening mee dat het filter dat we op de laag hebben toegepast alleen die hotspots toont die in de laatste 24 uur zijn geregistreerd . Als je toevallig met een andere laag werkt , moet je $feature[ "ACQ_DATE"] vervangen zodat het verwijst naar een datumveld in jouw laag . Klik op Test om te controleren of het werkt . Als het succesvol is , zou je een Resultaatwaarde van 1-6 moeten zien (1 is het meest recent , 6 is het oudste ) . Klik op OK om het script toe te passen .De typen "Unieke symbolen " worden automatisch geselecteerd . Klik op Opties om aan te passen hoe deze worden weergegeven . Pas de symboolvolgorde aan naar 1-6 door de items naar de juiste positie te slepen . Nu alles in de juiste volgorde staat , ga door en wijzig de Labels voor elke categorie zodat ze reflectief zijn voor het tijdsbereik .. Ik gebruikte "In de laatste 4 uur " voor de eerste en een schema van "X tot Y uur geleden " voor de laatste vijf . Oké , nu zijn we klaar om de symbolen te maken . Klik op het eerste symbool om de Symboolwisselaar te openen . Klik op Vorm , open het dropdownmenu , en selecteer "Firefly " . De ramp die ik gebruikte was de lichtgroene tot rode ramp .<\/P>Selecteer de meest intense op de helling (de verste rechts), en stel de grootte in op 36. Herhaal dit proces voor de andere categorieën, werkend van rechts naar links op de helling, en verlaag elke keer de grootte met 6 (bijv. 36, 30, 24, 18, 12 en 6). Zodra al je symbolen zijn ingesteld zoals je wilt, kun je spelen met de Transparantie schuifregelaar in het Stijl-paneel om het uiterlijk af te stemmen dat je nastreeft. Als alles klaar is, zou je Stijl-paneel er ongeveer zo uit moeten zien:<\/P><\/P><\/P>Klik op OK om alles vast te leggen. En, voila!<\/EM> Je zou nu een kaart moeten hebben van MODIS hotspots die verouderen naarmate de tijd vordert op basis van de huidige tijd. Goed gedaan! Vergeet ook niet je kaart op te slaan!<\/P><\/P>
var<\/SPAN> myDateField =<\/SPAN> $feature[<\/SPAN>"ACQ_DATE"<\/SPAN>]<\/SPAN>;<\/SPAN>\n\nfunction<\/SPAN> getTimeDelta<\/SPAN>(<\/SPAN>alertDate)<\/SPAN>{<\/SPAN>\n var<\/SPAN> minutes =<\/SPAN> DateDiff<\/SPAN>(<\/SPAN>now<\/SPAN>(<\/SPAN>)<\/SPAN>,<\/SPAN>alertDate,<\/SPAN> "minutes"<\/SPAN>)<\/SPAN>\n var<\/SPAN> hours =<\/SPAN> DateDiff<\/SPAN>(<\/SPAN>now<\/Span>(),alertDate,\"hours\")\n var=DateDiffnow aangepaste attribuutweergave.<\/P><\/P><\/P><\/P>Arcade geeft je de flexibiliteit om aan te passen hoe dingen aan je publiek worden overgebracht zonder dat je het schema van je data hoeft te wijzigen of constant veldberekeningen hoeft uit te voeren. Temporale representaties zijn slechts één gebruiksvoorbeeld daarvan. Hopelijk geeft dit je een startpunt om te verkennen wat mogelijk is. Bedankt voor het lezen!<\/P><\/BODY><\/HTML>
@DennisJarrard Thanks for posting this. I'm trying this out word for word in order to try/learn for a map that I'm working on. When I paste the code that's in the "Incorporating Relative Time in Symbology" section I'm getting an "Unexpected identifier" error. Would you happen to know why?
@MatthewKing I tested and got the same thing. Turns out the way the code block is collapsed in the blog confuses arcade. If I reincorporate the link breaks, it seems to work. Can you try this?
var myDateField = $feature["ACQ_DATE"]; function getTimeDelta(alertDate){ var minutes = DateDiff(now(),alertDate, "minutes") var hours = DateDiff(now(),alertDate, "hours") var days = DateDiff(now(),alertDate, "days") if (minutes <= 120){ return round(minutes) + " minutes" } if (minutes > 120){ if (hours <= 48){ var tFloor = floor(hours) var deltaMin = datediff(now(),dateadd(alertDate,tFloor,'hours'),'minutes') return round(tFloor) + " hours and " + round(deltaMin) + " minutes" } if (hours > 48){ var dFloor = floor(days) var deltaHour = datediff(now(),dateadd(alertDate,dFloor,'days'),'hours') return round(dFloor) + " days and " + round(deltaHour) + " hours" } } } return getTimeDelta(myDateField)
@DennisJarrard That works, but I'm thinking that's the code for the popups, not the symbology (which I was questioning)? However, based on your formatting of the popups I was able to reverse-engineer out the code for the symbology (coding, and especially formatting, is not my strong suit)
function determineCategory(value){ if (value <= 4 ){ return "1" } else if (value > 4 && value <= 8){ return "2" } else if (value > 8 && value <= 12){ return "3" } else if (value > 12 && value <= 16){ return "4" } else if (value > 16 && value <= 20){ return "5" } else { return "6" } } var hours = DateDiff(now(),$feature["last_edited_date"], "hours") determineCategory(hours)
Thanks!
@MatthewKing great work! You're right, I posted the wrong section. Your code sample looks exactly like it should. I tried fixing the code samples in the blog, but the system seems to want to collapse mult-line code into a single line no matter what I do. This comments section will certainly help to guide other readers until I figure out how to fix it. Thanks for reaching out!
I've used the code above and incorporate my attribute data (DueDate) but when I run the expression I receive an error message saying Unexpected token. What does this mean?
function determineCategory(value){ if (value <= 0 ){ return "1" } else if (value > 0 && value <= 4){ return "2" } else if (value > 4 && value <= 7){ return "2" } else if (value > 7 && value <= 14){ return "3" } else if (value > 14 && value <= 30){ return "4" } } var days = DateDiff(now(),$feature["DueDate"], "days") determineCategory(days)
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.