<\/P>
Arcade を使うことで、日付フィールドをさまざまな方法で操作し、閾値をカスタマイズし、新たに派生した日付を計算することも可能です。この正確なマップの作成方法について読み進めてください。<\/P>
まずマップを設定しましょう。新しい webmap を開き、「Add >> Browse Living Atlas Layers >>」 をクリックし、「MODIS」を検索します。一番上の結果は Esri による「Satellite (MODIS) Thermal Hotspots and Fire Activity」フィーチャレイヤーであるはずです。そのレイヤーをマップに追加してください。Content ペインで MODIS レイヤーのフィルターボタンをクリックし、「Acquisition Date in the last 1 day(s)」というフィルターを設定します。フィルター適用。この操作でホットスポットが過去24時間以内のものだけに絞られます。次に上部の Basemap をクリックし、Dark Gray Canvas ベースマップを選択します。さて、Arcade を使ってホットスポット用の独自の相対時間シンボロジーを作成する準備が整いました。<\/P>
MODIS レイヤーで「Change Style」ボタンをクリックします。「Choose an attribute to show」を展開し、フィールドリストの一番下までスクロールして「New Expression」をクリックします。これで Arcade Expression ビルダーが起動します。以下のコードを Expression 本文に貼り付けてください。<\/P>
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["ACQ_DATE"], "hours") determineCategory(hours)
必要ならここで各カテゴリの閾値を変更できます。ただし、このレイヤーに適用したフィルターは過去24時間以内に記録されたホットスポットのみ表示することに注意してください。もし別のレイヤーで作業している場合は、日付フィールドとして参照される $feature["ACQ_DATE"] をあなたのレイヤーの日付フィールド名に置き換える必要があります。「Test」をクリックして動作確認してください。成功すると結果値として1〜6(1が最新、6が最古)が表示されるはずです。「OK」をクリックしてスクリプトを適用します。<\/P>
「Unique symbols」タイプが自動的に選択されます。「Options」をクリックして表示方法を変更できます。エントリをドラッグしてシンボル順序を1〜6に変更してください。すべて正しい順序になったら、それぞれのカテゴリラベルも時間範囲が反映されるよう変更しましょう。一番目には「過去4時間以内」、残り5つには「X〜Y時間前」というスキーマを使用しました。それではシンボル作成準備完了です。一番目のシンボルをクリックして Symbol Changer を開きます。「Shape」をクリックしドロップダウンから「Firefly」を選択します。使用したランプはライトグリーンから赤へのランプでした。<\/P>
ランプ上で最も強烈なもの(右端のもの)を選択し、サイズを36に設定します。このプロセスを他のカテゴリでも繰り返し、ランプの左側に向かって進みながら、サイズを6ずつ減らしていきます(例:36、30、24、18、12、6)。すべてのシンボルが希望通りに設定できたら、スタイルペインの透明度スライダーを使って見た目を調整してください。すべて完了すると、スタイルペインは次のような表示になるはずです:<\/P>
OKをクリックしてすべてを確定します。そして、voila!<\/EM> 現在時刻に基づいて時間経過で変化するMODISホットスポットのマップが完成しました。素晴らしい仕事です!また、マップの保存も忘れないでください!<\/P><\/P>
<SPAN class="keyword token">var<\/SPAN> myDateField <SPAN class="operator token">=<\/SPAN> $feature<SPAN class="punctuation token">[<\/SPAN><SPAN class="string token">"ACQ_DATE"<\/SPAN><SPAN class="punctuation token">]<\/SPAN><SPAN class="punctuation token">;<\/SPAN> <SPAN class="keyword token">function<\/SPAN> <SPAN class="token function">getTimeDelta<\/SPAN><SPAN class="punctuation token">(<\/SPAN>alertDate<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">{<\/SPAN> <SPAN class="keyword token">var<\/SPAN> minutes <SPAN class="operator token">=<\/SPAN> <SPAN class="token function">DateDiff<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="token function">now<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">,<\/SPAN>alertDate<SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"minutes"<\/SPAN><SPAN class="punctuation token">)<\/SPAN> <SPAN class="keyword token">var<\/SPAN> hours <SPAN class="operator token">=<\/SPAN> <SPAN class="token function">DateDiff<\/Span><span class=\"punctuation token\">(<\/<span class=\"token function\">now<\/<span class=\"punctuation token\">(<\/<span class=\"punctuation token\">)<\/<span class=\"punctuation token\">,<\/<span class=\"token function\">alertDate<\/<span class=\"punctuation token\">,<\/<span class=\"string token\">\"hours\"<\/<span class=\"punctuation token\">)<\/ <span class=\"keyword token\">var<\/> days <span class=\"operator token\">=<\/> <span class=\"token function\">DateDiff<\/><span class=\"punctuation token\">(<\/><span class=\"token function\">now<\/><span class=\"punctuation token\">(<\/><span class=\"punctuation token\">)<\/><span class=\"punctuation token\">,<\/><span class=\"token function\">alertDate<\/><span class=\"punctuation token\">,<\/><span class=\"string token\">\"days\"<\/><span class=\"punctuation token\">)< if (minutes <= 120) { return round(minutes) + " 分前" } if (minutes > 120) { if (hours <= 48) { var tFloor = floor(hours) var deltaMin = datediff(now(), dateadd(alertDate, tFloor, 'hours'), 'minutes') return round(tFloor) + " 時間と " + round(deltaMin) + " 分前" } if (hours > 48) { var dFloor = floor(days) var deltaHour = datediff(now(), dateadd(alertDate, dFloor, 'days'), 'hours') return round(dFloor) + " 日と " + round(deltaHour) + " 時間前" } } } return getTimeDelta(myDateField)<span class=\"line-numbers-rows\"><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></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span>
@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)
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.