[インシデントの検出 (Detect Incidents)] ツールは、Arcade 式を使用して、インシデントの開始条件と終了条件を決定します。 [インシデントの検出 (Detect Incidents)] 条件の結果は、true か false のどちらかになります。 条件を使用して、インシデントにフィーチャを含める必要があるかどうか確認します。 条件は各フィーチャに対してテストされ、インシデントとするフィーチャを決定します。 以下の各セクションに、式の使用例を示します。 解析が ArcGIS GeoAnalytics Server 上で実行され、必ず新しいレイヤーが作成される場合に計算が実行されます。
ArcGIS Enterprise 10.6 以降では、式は Arcade を使用して書式設定されます。 Arcade では、フィールド名は $feature["field name"] または $feature.fieldname として書式設定されます。 フィールド名にスペースが含まれる場合には、最初のオプション $feature["field name"] が必要となります。 下記のすべての例は、このオプションを使用しています。
以下のツールは、GeoAnalytics Server で Arcade 式を使用します。
- [トラッキングの再構築 (Reconstruct Tracks)] - バッファー式。
- [バッファーの作成 (Create Buffers)] - バッファー式。
- [フィーチャの結合 (Join Features)] - 結合式。
- [フィールド演算 (Calculate Field)] - フィールド値を計算します。
レガシー:
ArcGIS GeoAnalytics Server エクステンションは ArcGIS Enterprise で廃止されます。 GeoAnalytics Server の最終リリースは ArcGIS Enterprise 11.3 に含まれています。 これらのツールは ArcGIS Enterprise 11.3 以前のバージョンで使用できます。
数学演算および数学関数の例
式は、数値を数学的に処理することができます。 次の表は、使用可能な演算の例を示しています。
演算子 | 説明 | 例 |
---|---|---|
a + b | a プラス b の合計を返します。 | fieldname には、1.5 の値が含まれています。 $feature["fieldname"] + 2.5 4.0 |
a - b | a マイナス b の差を返します。 | fieldname には、3.3 の値が含まれています。 $feature["fieldname"]- 2.2 1.1 |
a * b | a 掛ける b の積を返します。 | fieldname には、2.0 の値が含まれています。 $feature["fieldname"] * 2.2 4.4 |
a / b | a 割る b の商を返します。 | fieldname には、4.0 の値が含まれています。 $feature["fieldname"] / 1.25 3.2 |
abs( a ) | a. の絶対値 (正の値) を返します。 | fieldname には、-1.5 の値が含まれています。 abs($feature["fieldname"]) 1.5 |
log( a ) | a の自然対数 (底を e とする) を返します。 | fieldname には、1 の値が含まれています。 log($feature["fieldname"]) 0 |
sin( a ) | a の正弦が返されます。 入力の角度の単位はラジアンです。 | fieldname には、1.5707 の値が含まれています。 sin($feature["fieldname"]) 1 |
cos( a ) | a の余弦が返されます。 入力の角度の単位はラジアンです。 | fieldname には、0 の値が含まれています。 cos($feature["fieldname"]) 1 |
tan( a ) | a の正接が返されます。 入力の角度の単位はラジアンです。 | fieldname には、0 の値が含まれています。 tan($feature["fieldname"]) 0 |
sqrt( a ) | a の平方根を返します。 | fieldname には、9 の値が含まれています。 sqrt($feature["fieldname"]) 3 |
min( a, b ) | a と b のうちの小さい方の数値を返します。 | fieldname には、1.5 の値と -3 の値が含まれています。 min($feature["fieldname"], -3) -3 |
max( a, b ) | a と b のうちの大きい方の数値を返します。 | fieldname1 には 1.5 の値が含まれており、fieldname2 には -3 の値が含まれています。 max($feature["fieldname1"], $feature["fieldname2"]) 1.5 |
constrain(<value>,<low>,<high>) | 入力値が制限範囲内にある場合、入力値を返します。 値が下限値よりも小さい場合、下限値を返します。 値が上限値よりも大きい場合、上限値を返します。 | 例 1: constrain( $feature["distance"], 0, 10) distance が 0 よりも小さい場合は 0 を返し、distance が 10 よりも大きい場合は 10 を返し、それ以外の場合は distance を返します。 例 2: constrain($feature['Store dist'], 6, distance) Store dist が 6 よりも小さい場合は 6 を返し、Store dist が distance よりも大きい場合は distance を返し、それ以外の場合は Store dist を返します。 |
テキスト関数の例
[インシデントの検出 (Detect Incidents)] の式は、テキストを処理することができます。 次の表は、使用可能な演算の例を示しています。
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
concatenate(<values>, <separator>) | 値を 1 つに連結して、文字列を返します。
| fieldname には、GeoAnalytics の値が含まれています。 Concatenate ([$features["fieldname"], "is", "great!"], ' ') | GeoAnalytics is great! |
find(<searchText>, <text>, <startPos>) | 文字列内の文字列を検索します。 ワイルドカードはサポートされていません。
| fieldname1 には 14NorthStreet の値が含まれており、fieldname2 には North の値が含まれています。 find($feature["fieldname2"], $feature["fieldname1"]) | 2 |
lower(<value>) | 文字列を小文字にします。
| fieldname には、GEOANALYTICS の値が含まれています。 lower($feature["fieldname"]) | geoanalytics |
find および lower を使用するテキストの例。
find(("north"), lower("146NorthStreet"))
日付関数の例
[インシデントの検出 (Detect Incidents)] の式は、日付を処理することができます。 次の表は、使用可能な演算の例を示しています。 Arcade では、月の値は 0 (1 月) ~ 11 (12 月)、日の値は 1 ~ 31、時の値は 0 (午前 12:00) ~ 23 (午後 11:00)、分と秒の値は 0 ~ 59、ミリ秒の値は 0 ~ 999 となります。Arcade の日付は、GeoAnalytics Server の場所に基づく時間を返します。
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
date(<value>, <month>, <day>, <hour>, <minute>) | 値または値のセットを構文解析して日付文字列に変換します。
| fieldname には、 1476987783555 の値が含まれています。 例 1: Date($features["fieldname"]) 例 2: Date(2017,0,14,0) 例 3: Date() | 例 1: 20 Oct 2016 11:23:03 am 例 2: 14 Jan 2017 12:00:00 am 例 3: 現在の時間を返す |
DateDiff(<date1>, <date2>, <units>) | ある日付から別の日付を減算して、その差を指定の単位で返します。
| 例 1: DateDiff(Date(2017,1,14,0), Date()) 例 2: DateDiff(Date(2017,1,14,0), Date(), "Years") | 結果は、このコマンドをいつ実行するかによって変わります。 例 1: -20532129137 例 2: -0.6546783768647119 |
Year(<dateValue>) | 所定の年を返します。
| 例 1: fieldname は、09 Oct 2017 04:30:43 pm の値を含む日付タイプのフィールドです Year($feature["fieldname"]) 例 2: fieldname は、2012-09-27 の値を含む ISO 8601 文字列として書式設定された文字列フィールドです | 例 1: 2017 例 2: 2012 |
論理関数の例
シンプルな数式に加えて、以下の表に示すさらに高度な関数を使用してバッファー式を適用できます。
関数 | 説明 | 例 | 結果 |
---|---|---|---|
iif(<condition>,<true value>,<false value>) | 条件が true と評価されると 1 つの値を返し、同条件が false と評価されると別の値を返します。 <true value> および <false value> は、次の値にすることができます。
| iif($feature["field1"] > $feature["field2"], $feature["field1"], 0) iif($feature["field1"] > $feature["field2"], iif($feature["field2"] = 0, $feature["field3"], $feature["field4"]), 0) | field1 が field2 よりも大きい場合は field1 を返し、そうでない場合は 0 を返します。 field1 が field2 よりも大きい場合は 2 番目の iif 関数の結果を返し、そうでない場合は 0 を返します。 |
when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>) | 式が true と評価されるまで、一連の式を順次評価します。
| when(($feature["field1"] + 10) > 1, 1,($feature["field2"] + 10) > 2 , 2, $feature["field3"]) | field1 + 10 が 1 よりも大きい場合、1 を返します。 そうでない場合、field2 + 10 が 2 よりも大きいかどうかをチェックします。 大きい場合は 2 を返します。 そうでない場合は field3 を返します。 |
decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> ) | 式を評価し、その値を以降のパラメーターと比較します。 式が一致した場合、次のパラメーター値を返します。 何も一致しない場合、最後のパラメーターがデフォルトの戻り値になるオプションがあります。
| decode($feature["field1"] + 3 , $feature["field1"], 1, $feature["field2"], 2, 0) | 条件付き val の field1 + 3 と case1 の field1 の間の等式を比較します。 true の場合は 1 を返します。 false の場合は、field1 + 3 と field2 の間の等式を比較します。 true の場合は 2 を返し、そうでない場合は 0 を返します。 |
条件付き演算子
条件付きステートメントでは、以下の演算子を使用できます。
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
a > b a < b | a が b よりも大きい a が b よりも小さい | 10 > 2 | False |
a >= b a <= b | a が b 以上である a が b 以下である | abs(-10) >= 10 | True |
a != b | a が b と等しくない | abs(-3) != -3 | True |
a == b | a が b と等しい | abs(-5) == 5 | True |
<condition1> || <condition2> | 条件 1 または条件 2 が満たされる。 | (abs(-5) == 5) || (10 < 2) | True |
<condition1> && <condition2> | 条件 1 および条件 2 が満たされる。 | (abs(-5) == 5) && (10 < 2) | False |
トラッキング対応の例
[インシデントの検出 (Detect Incidents)] や [フィールド演算 (Calculate Field)] などの GeoAnalytics Tools では Arcade でトラッキング対応方程式を使用できます。 [フィールド演算 (Calculate Field)] では、入力レイヤーが時間対応で、式がトラッキング対応であり、トラッキングの識別に 1 つ以上のフィールドが使用されている場合に、トラッキング方程式が使用できます。
ArcGIS Enterprise 10.6 では、次のトラッキング式を使用します。
関数 | 説明 | 例 | 結果 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
$track.field["fieldname"].history(<value1>) | 所定のフィールドの指定された時間インデックスの値の配列を返します。
| MyField は、[10, 20, 30, 40, 50, 60, 70, 80] の値を順番に並べ替えました。 10 はインデックス 0 にあり、80 はインデックス 7 にあります。 式は各インデックスで評価されます。例には、その例で使用されるインデックスが示されています。 n は、シーケンス内のフィールドの数を表し、k は、評価されているインデックスを表します。 例 1: $track.field["MyField"].history(3)) 例 2: $track.field["MyField"].history(-3) 例 3: mean($track.field["MyField"].history(-2)) 例 4: $track.field["MyField"].history(-3)[0] | 例 1 はインデックス k で評価されると、インデックス 3 から k までの値の配列を返します。 インデックス 6 (70) で評価する場合は、インデックス [3, 4, 5, 6] の値の配列が返され、配列が [40, 50, 60, 70] になります。 例 2 は、所定の値から 1 を引いた値をインデックス k から引いた値の配列を返します (k-2)。 これがインデックス 6 (value = 70) で評価される場合、k-2、k-1、および k の値は [50, 60, 70] と返されます。 例 3 は、インデックス k-1 と k の値の平均値を返します。 これをインデックス 4 (value = 50) で評価すると、value 40 (インデックス 3) と value 50 (インデックス 4) の平均値 45 が求められます。 これをインデックス 7 で評価すると、結果は 70 と 80 の平均値 75 になります。 例 4 は、例 2 で作成された配列の最初のアイテム (インデックス 0) 50 を返します。 | ||||||||||||
$track.field["fieldname"].history(<value1>, <value2>) | インデックス 1 (<value1>) からインデックス 2 (<value2>) までの値の配列を返します。 | MyField は、[10, 20, 30, 40, 50, 60, 70, 80] と値が順番に並んでいます。10 はインデックス 0、80 はインデックス 7 です。 この例では、式はインデックス 7 (80) で評価されます。 例 1: $track.field["MyField"].history(-3, -2)) 例 2: $track.field["MyField"].history(-5, -2)) | 例 1: [60] 例 2: [40, 50, 60] | ||||||||||||
$track.time.start | トラッキングの開始時間をエポックからの経過秒数をミリ秒で計算します。 | 2017 年 1 月 2 日に開始するトラッキングを使用します。 $track.time.start | 1483315200000 | ||||||||||||
$track.time.duration | トラッキングの開始から現在の時間ステップまでの期間をミリ秒単位で計算します。 | 2017 年 1 月 2 日に開始するトラッキングを使用し、現在時間は 2017 年 1 月 4 日です。 $track.time.duration | 172800000 | ||||||||||||
$track.time.current | トラッキング内の現在の時間を計算します。 | 2017 年 1 月 3 日の午前 9 時に発生したフィーチャを使用します。 $track.time.current | 1483434000000 | ||||||||||||
$track.index | 計算されているフィーチャの時間インデックスを返します。 | トラッキング内の最初のフィーチャに対してこの値を計算する。 $track.index | 0 | ||||||||||||
$track.T(<value>, "<units>") | <units> が与えられ、数値 <value> を使用して作成された時間をフィーチャの時間に加えた値を返します。
| 2017 年 1 月 2 日の午後 2 時のフィーチャを使用します。 例 1: $track.T(1, "hours") 例 2: $track.T(-2, "days") | 例 1: 1 月 2 日の午後 3 時を返します: 1483369200000 例 2: 12 月 31 日の午後 2 時を返します: 1483192800000 | ||||||||||||
$track.field["fieldname"].window(<value1>, <value2>) | 所定のフィールドの指定された時間インデックスの値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。 式はトラッキングの各フィーチャで評価されます。
ウィンドウ関数は ArcGIS Enterprise 10.6.1 以降で使用できます。 | MyField は、[10, 20, 30, 40, 50] の値を順番に並べ替えました。 式はトラッキングの各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: $track.field["MyField"].window(-1,2) 例 2: $track.field["MyField"].window(-2,0)[0] 例 3: $track.field["MyField"].window(0,3)[2] | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。
例 2: インデックス 2 で評価されると (値は 30)、10 が返されます。 例 3: インデックス 2 で評価されると (値は 30)、50 が返されます。 | ||||||||||||
$track.geometry.window(<value1>, <value2>) | 指定された時間のインデックスのジオメトリを表す値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。 式はトラッキングの各フィーチャで評価されます。
ウィンドウ関数は ArcGIS Enterprise 10.6.1 以降で使用できます。 | MyField は、[10, 20, 30, 40, 50] の値を順番に並べ替えました。 フィーチャのジオメトリは、[{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}] です。式はトラッキング内の各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: $track.geometry.window(-1,2) 例 2: ポリライン データセットの $track.geometry.window(0,1)[0] 例 3: ポリゴン データセットの $track.geometry.window(0,1)[0] 例 4: 前のポイント $track.geometry.window(-1,0)[0]["x"] の X 値となります。 | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。
例 2: ポリラインは次の形式で返されます: [{"paths":[[[-180,-22.88],[-177.6,-23.6]],[[180,-18.099999999999994],[179.7,-18.4],[179.4,-18.7],[178.9,-18.9],[178.5,-19.3],[178.2,-19.7],[178.4,-20],[178.8,-20.2],[178.9,-21.8],[179,-22.2],[179.4,-22.7],[180,-22.88]],[[-178,-17],[-178.8,-17.3],[-179.2,-17.5],[-179.6,-17.8],[-179.9,-18],[-180,-18.099999999999994]]]}] 例 3: ポリゴンは次の形式で返されます: [{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}] 例 4: インデックス 2 (値は 30) で評価: 2 | ||||||||||||
$track.window(<value1>, <value2>) | 指定された時間のインデックスのジオメトリとすべての属性を表す値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。
ウィンドウ関数は ArcGIS Enterprise 10.6.1 以降で使用できます。 | MyField は、[10, 20, 30, 40, 50] の値、および objectID、globalID、instant_datetime フィールドの値を順番に並べ替えました。 フィーチャのジオメトリは [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}] です。 式はトラッキングの各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: $track.window(-1,0)[0] 例 2: geometry($track.window(-1,0)[0]["x"] | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。
例 2: インデックス 2 (値は 30) で評価: 2 |
ArcGIS Enterprise 10.6.1 以降では、次のトラッキング式を使用します。
関数 | 説明 | 例 | 結果 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackStartTime() | トラッキングの開始時間をエポックからの経過秒数をミリ秒で計算します。 | 2017 年 1 月 2 日に開始するトラッキングを使用します。 TrackStartTime() | 1483315200000 | ||||||||||||
TrackDuration() | トラッキングの開始から現在の時間ステップまでの期間をミリ秒単位で計算します。 | 2017 年 1 月 2 日に開始するトラッキングを使用し、現在時間は 2017 年 1 月 4 日です。 TrackDuration() | 172800000 | ||||||||||||
TrackCurrentTime() | トラッキング内の現在の時間を計算します。 | 2017 年 1 月 3 日の午前 9 時に発生したフィーチャを使用します。 TrackCurrentTime() | 1483434000000 | ||||||||||||
TrackIndex | 計算されているフィーチャの時間インデックスを返します。 | トラッキング内の最初のフィーチャに対してこの値を計算する。 TrackIndex | 0 | ||||||||||||
TrackFieldWindow(<fieldName>, <startIndex>, <endIndex>) | 所定のフィールドの指定された時間インデックスの値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。 式はトラッキングの各フィーチャで評価されます。
| MyField は、[10, 20, 30, 40, 50] の値を順番に並べ替えました。 式はトラッキングの各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: TrackFieldWindow("MyField,-1,2) 例 2: TrackFieldWindow("MyField,-2,0)[0] 例 3: TrackFieldWindow("MyField,0,3)[2] | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。
例 2: インデックス 2 で評価されると (値は 30)、10 が返されます。 例 3: インデックス 2 で評価されると (値は 30)、50 が返されます。 | ||||||||||||
TrackGeometryWindow(<startIndex>, <endIndex>) | 指定された時間のインデックスのジオメトリを表す値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。 式はトラッキングの各フィーチャで評価されます。
| MyField は、[10, 20, 30, 40, 50] の値を順番に並べ替えました。 フィーチャのジオメトリは、[{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}] です。式はトラッキング内の各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: TrackGeometryWindow(-1,2) 例 2: ポリライン データセットの TrackGeometryWindow(0,1)[0] 例 3: ポリゴン データセットの TrackGeometryWindow(0,1)[0] 例 4: 前のポイント TrackGeometryWindow(-1,0)[0]["x"] の X 値となります。 | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。
例 2: ポリラインは次の形式で返されます: [{"paths":[[[-180,-22.88],[-177.6,-23.6]],[[180,-18.099999999999994],[179.7,-18.4],[179.4,-18.7],[178.9,-18.9],[178.5,-19.3],[178.2,-19.7],[178.4,-20],[178.8,-20.2],[178.9,-21.8],[179,-22.2],[179.4,-22.7],[180,-22.88]],[[-178,-17],[-178.8,-17.3],[-179.2,-17.5],[-179.6,-17.8],[-179.9,-18],[-180,-18.099999999999994]]]}] 例 3: ポリゴンは次の形式で返されます: [{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}] 例 4: インデックス 2 (値は 30) で評価: 2 | ||||||||||||
TrackWindow(<value1>, <value2>) | 指定された時間のインデックスのジオメトリとすべての属性を表す値の配列を返します。 ウィンドウ関数を使用すると、時間を前後に移動できます。
| MyField は、[10, 20, 30, 40, 50] の値、および objectID、globalID、instant_datetime フィールドの値を順番に並べ替えました。 フィーチャのジオメトリは [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}] です。 式はトラッキングの各フィーチャで評価されます。 開始フィーチャを含め終了フィーチャを除外した結果が返されます。 例 1: TrackWindow(-1,0)[0] 例 2: geometry(TrackWindow(-1,0)[0]["x"] | 例 1: 各フィーチャで評価されると、表には次の結果が表示されます。
例 2: インデックス 2 (値は 30) で評価: 2 |
ArcGIS Enterprise 10.9 以降では、次のトラッキング式を使用して、トラッキングの距離、速度、加速度を計算します。
距離の計算はメートル法、速度はメートル/秒、加速度はメートル/秒二乗ですべて計算されます。 距離は測地距離を使用して計測されます。
関数 | 説明 |
---|---|
TrackCurrentDistance() | 最初の観測から現在の観測までの移動距離の合計。 |
TrackDistanceAt(value) | 最初の観測から現在の観測までの移動距離の合計に特定の値を加算。 |
TrackDistanceWindow(value1, value2) | 最初の観測 (0) についてのウィンドウ内の最初の値 (含まれる) から最後の値 (含まれない) までの距離。 |
TrackCurrentSpeed() | 前の観測から現在の観測までの速度。 |
TrackSpeedAt(value1) | 現在の観測を基準とした観測時の速度。 たとえば、値 2 では、現在から 2 観測後の観測時の速度です。 |
TrackSpeedWindow(value1, value2) | 最初の観測 (0) についてのウィンドウ内の最初の値 (含まれる) から最後の値 (含まれない) までの速度値。 |
TrackCurrentAcceleration() | 前の観測から現在の観測までの加速度。 |
TrackAccelerationAt(value1) | 現在の観測を基準とした観測時の加速度。 |
TrackAccelerationWindow(value1, value2) | 最初の観測 (0) についてのウィンドウ内の最初の値 (含まれる) から最後の値 (含まれない) までの加速度値。 |
距離、速度、加速度の計算例は、次の図の例を使用します。
関数 | 結果例 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TrackCurrentDistance() |
| ||||||||||||||
TrackDistanceAt(2) |
| ||||||||||||||
TrackDistanceWindow(-1, 2) |
| ||||||||||||||
TrackCurrentSpeed() |
| ||||||||||||||
TrackSpeedAt(2) |
| ||||||||||||||
TrackSpeedWindow(-1, 2) |
| ||||||||||||||
TrackCurrentAcceleration() |
| ||||||||||||||
TrackAccelerationAt(2) |
| ||||||||||||||
TrackAccelerationWindow(-1, 2) |
|