Skip To Content

사건 감지에 Arcade 식 사용

식을 적용할 수 있는 GeoAnalytics Tools 도구상자에 여러 도구가 있습니다.

식을 사용하는 GeoAnalytics Tools에 다양한 용도가 있으며 식을 적용할 수 있는 제한 사항도 있습니다. 10.9에서는 ArcGIS GeoAnalytics Server에 사용되는 모든 식에 Arcade가 지원됩니다.

Arcade 함수에 대한 자세한 정보

사건 감지의 식

식은 사건 감지 도구에 사용되어 사건의 시작 및 종료 조건을 지정합니다. 사건 감지 조건의 결과는 항상 true 또는 false입니다. 조건을 사용하여 피처가 사건에 포함되는지를 확인합니다. 조건은 각 피처에 대해 테스트되어 피처가 사건에 해당하는지를 판단합니다. 계산은 분석이 ArcGIS GeoAnalytics Server에서 실행되는 경우 수행됩니다. 사용 가능한 식의 예시가 아래 섹션에 포함되어 있습니다.

수학 연산 및 함수 예시

식은 수학적으로 숫자를 처리할 수 있습니다. 다음 테이블은 사용 가능한 연산 샘플을 보여줍니다.

Arcade에서 사용할 수 있는 수학 연산 및 함수에 대한 자세한 정보

연산자설명예시결과

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>)

포함하는 경계 내에 있는 경우 입력 값을 반환합니다. 입력 값이 낮은 값보다 작은 경우 낮은 값을 반환합니다. 입력 값이 높은 값보다 큰 경우 높은 값을 반환합니다.

constrain($feature["distance"], 0, 10)

constrain($feature['Store dist'], 6, distance)

distance가 0보다 작은 경우 0을 반환하며 distance가 10보다 작은 경우 10을 반환하고, 그 외에는 distance입니다.

Store dist가 6보다 작은 경우 6을 반환하며 distanceStore dist보다 작은 경우 distance를 반환하고, 그 외에는 Store dist입니다.

사건 탐지 조건에 대한 곱셈 예시입니다.

$feature["Distance"] * 2 > 50

텍스트 함수 예시

사건 감지 식은 텍스트를 처리할 수 있습니다. 다음 테이블은 사용 가능한 연산 샘플을 보여줍니다.

Arcade에서 사용할 수 있는 텍스트 함수에 대한 자세한 정보

연산자설명예시결과

concatenate( <values>, <separator>)

값을 함께 연결하여 문자열을 반환합니다.

  • values - 연결할 문자열 값의 배열입니다.
  • separator(선택) - values 매개변수가 배열인 경우 연결에 사용될 구분 기호입니다. 또는 단일 값이 첫 번째 매개변수로 제공된 경우 연결할 문자열입니다. 이 매개변수가 제공되지 않으면 빈 값이 출력됩니다.

fieldname 값으로 GeoAnalytics를 포함합니다.

Concatenate([$features["fieldname"], "is", "great!"], ' ')

GeoAnalytics is great!

find(<searchText>, <text>, <startPos>)

문자열 내에서 문자열을 찾습니다. 와일드 카드를 지원하지 않습니다.

  • searchText - 검색할 하위 문자열입니다.
  • text - 검색할 텍스트입니다.
  • startPos(선택) - 검색이 수행될 문자열 내의 위치에 대한 0 기반 색인입니다.

fieldname1 값으로 14NorthStreet를 포함하고 fieldname2에 값으로 North를 포함합니다.

find($feature["fieldname2"], $feature["fieldname1"])

2

lower(<value>)

문자열을 소문자로 전환합니다.

  • value - 소문자로 전환할 문자열입니다.

fieldname 값으로 GEOANALYTICS를 포함합니다.

lower($feature["fieldname"])

GeoAnalytics

findlower가 사용된 텍스트 예시

find(("north"), lower("146NorthStreet")) == 2

날짜 함수 예시

날짜를 사용하는 식을 통해 사건 탐지를 사용할 수 있습니다. 다음 테이블은 사용 가능한 연산 샘플을 보여줍니다.

Arcade에서 사용할 수 있는 날짜 함수에 대한 자세한 정보

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>)

단일 값 또는 일련의 값을 날짜 문자열로 구문 분석합니다.

  • value(선택) - 1970년 1월 1일 UTC로부터 밀리초 수 또는 연도를 나타내는 수입니다. 연도가 지정되면 월 및 일도 후속 매개변수에서 제공되어야 합니다. 이 값은 날짜로 변환되는 ISO 8601 문자열 또는 날짜 문자열일 수도 있습니다.
  • month(선택) - 월(0~11), 여기서 0은 1월이며 11은 12월입니다.
  • day(선택) - 날짜(1~31)입니다.
  • hour(선택) - 시간(0~23)입니다.
  • minute(선택) - 분(0~59)입니다.
  • second(선택) - 초(0~59)입니다.
  • millisecond(선택) - 밀리초(0~999)입니다.

fieldname 값으로 1476987783555를 포함합니다.

예시 1: Date($features["fieldname"])

예시 2: Date(2017,0,14,0)

예시 3: Date()

예시 1: 2016년 10월 20일 11:23:03am

예시 2: 2017년 1월 14일 12:00:00 am

예시 3: 현재 시간이 반환됨

DateDiff(<date1>, <date2>, <units>)

두 날짜를 뺀 차이를 지정된 단위로 반환합니다.

  • date1 - 두 번째 날짜를 뺄 날짜 값입니다.
  • date2 - 첫 번째 지정 날짜에서 뺄 날짜 값입니다.
  • startpos(선택) - 두 지정 날짜의 차이가 반환될 때 사용되는 단위입니다. 지원되는 단위 유형은 milliseconds, seconds, minutes, hours, days, months, years입니다. 기본값은 밀리초입니다.

예시 1: DateDiff(Date(2017,1,14,0), Date())

예시 2: DateDiff(Date(2017,1,14,0), Date(), "Years")

이 명령을 실행한 날짜에 따라 결과가 달라집니다.

예시 1: -20532129137

예시 2: -0.6546783768647119

Year(<dateValue>)

지정 날짜의 연도를 반환합니다.

  • value - 연도를 가져올 날짜 값입니다.

예시 1: fieldname09 Oct 2017 04:30:43 pm 값을 갖는 Date 유형의 필드입니다.

Year($feature["fieldname"])

예시 2: fieldname2012-09-27 값을 갖는 ISO 8601 문자열 형식의 문자열 필드입니다.

예시 1: 2017

예시 2: 2012

조건 연산자

조건문은 다음 연산자를 사용할 수 있습니다.

연산자설명Example결과

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

<조건1> || <조건2>

조건 1 또는 조건 2가 충족됨

(abs(-5) == 5) || (10 < 2)

True

<조건1> && <조건2>

조건 1 및 조건 2가 충족됨

(abs(-5) == 5) && (10 < 2)

False

논리 연산자 예시

조건 연산자 이외에 고급 논리 연산자를 사건 감지에 사용할 수 있습니다.

Arcade에서 사용할 수 있는 논리 함수에 대해 대한 자세한 정보

함수설명예시결과

iif(<condition>,<true value>,<false value>)

조건이 true로 평가되면 그 값을 반환하고 조건이 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)

field1field1보다 큰 경우 field2를 반환하고 그 외에는 0입니다.

iif이(가) field1보다 큰 경우 두 번째 field2 기능의 결과를 반환하고 그 외에는 0입니다.

when(<expression1> , <result1> , <expression2> , <result2> , ... , <expressionN> , <resultN>, <default>)

true로 평가되는 식이 나올 때까지 일련의 식을 차례로 평가합니다.

  • expression - 식입니다.
  • result - 숫자 또는 필드일 수 있습니다.
  • default - 식이 일치하지 않는 경우 옵션 값입니다.

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 함수가 식을 평가하고 값을 이후 매개변수와 비교합니다. 식이 일치하는 경우 다음 매개변수 값을 반환합니다. 아무것도 일치하지 않는 경우 마지막 매개변수가 기본 반환 값이 되는 옵션이 있습니다.

  • conditional val - 필드 또는 식일 수 있습니다.
  • case - conditional val와(과) 비교하는 값입니다.
  • result - 해당 사례가 conditional val와(과) 일치하는 경우의 결과입니다.
  • defaultValue - 다른 값이 true가 아닌 경우 옵션 값입니다.

decode($feature["field1"] + 3 , $feature["field1"], 1, $feature["field2"], 2, 0)

conditional val field1 + 3 및 case1 field1의 동등을 비교합니다. true인 경우 1을 반환합니다. false인 경우 field1 + 3field2의 동등을 비교합니다. true인 경우 2를 반환합니다. 그 외의 경우 0을 반환합니다.

추적 인식 예시

또한 사건 감지 및 계산 필드 등의 일부 GeoAnalytics Tools에서는 추적 인식 Arcade 방정식을 사용할 수 있습니다.

함수설명예시결과

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>)

지정된 시간 색인에 대해 주어진 필드의 값 배열을 반환합니다. 창 함수를 사용하면 시간을 전과 후로 이동할 수 있습니다. 식은 트랙의 각 피처에서 평가됩니다.

  • 현재 피처는 색인 0에 있습니다.
  • 양수 값은 현재 값 이후의 미래에 발생하는 피처를 나타냅니다. 예를 들어, 위치 1은 어레이의 다음 값입니다.
  • 음수 값은 이전 피처 이전의 과거에 발생한 피처를 나타냅니다. 예를 들어, -1은 배열의 이전 값입니다.

MyField 순차적으로 [10, 20, 30, 40, 50]의 값을 정렬했습니다. 식은 트랙의 각 피처에서 평가됩니다. 결과는 시작 피처를 포함하고 종료 피처는 제외하면서 반환됩니다.

예시 1: TrackFieldWindow("MyField,-1,2)

예시 2: TrackFieldWindow("MyField,-2,0)[0]

예시 3: TrackFieldWindow("MyField,0,3)[2]

예시 1: 각 피처에서 평가될 때 테이블에 다음 결과가 표시됩니다.

평가된 피처

결과

10

[10,20]

20

[10, 20, 30]

30

[20,30,40]

40

[30,40,50]

50

[40, 50]

예시 2: 색인 2(값 30)에서 평가되면 10을 반환합니다.

예시 3: 색인 2(값 30)에서 평가되면 50을 반환합니다.

TrackGeometryWindow(<startIndex>, <endIndex>)

지정된 시간 색인에 대해 대표 기하의 값 어레이를 반환합니다. 창 함수를 사용하면 시간을 전과 후로 이동할 수 있습니다. 식은 트랙의 각 피처에서 평가됩니다.

  • 현재 피처는 색인 0에 있습니다.
  • 양수 값은 현재 값 이후의 미래에 발생하는 피처를 나타냅니다. 예를 들어, 위치 1은 어레이의 다음 값입니다.
  • 음수 값은 이전 피처 이전의 과거에 발생한 피처를 나타냅니다. 예를 들어, -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: TrackGeometryWindow(-1,2)

예시 2: 폴리라인 데이터셋의 TrackGeometryWindow(0,1)[0]

예시 3: 폴리곤 데이터셋의 TrackGeometryWindow(0,1)[0]

예시 4: 이전 포인트의 X값 찾기 TrackGeometryWindow(-1,0)[0]["x"]

예시 1: 각 피처에서 평가될 때 테이블에 다음 결과가 표시됩니다.

평가된 피처

결과

10

[{x: 1, y: 1},{x: 2, y: 2}]

20

[{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null}]

30

[{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}]

40

[{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]

50

[{x: 4, y: 4}, {x: 5, y: 5}]

예시 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>)

지정된 시간 색인에 대해 대표 기하 및 모든 속성의 값 행렬을 반환합니다. 창 함수를 사용하면 시간을 전과 후로 이동할 수 있습니다.

  • 현재 피처는 색인 0에 있습니다.
  • 양수 값은 현재 값 이후의 미래에 발생하는 피처를 나타냅니다. 예를 들어, 위치 1은 어레이의 다음 값입니다.
  • 음수 값은 이전 피처 이전의 과거에 발생한 피처를 나타냅니다. 예를 들어, -1은 배열의 이전 값입니다.

MyField objectID, globalIDinstant_datetime 필드 외에도 [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: TrackWindow(-1,0)[0]

예시 2: geometry(TrackWindow(-1,0)[0]["x"]

예시 1: 각 피처에서 평가될 때 테이블에 다음 결과가 표시됩니다.

평가된 피처

결과

10

20

[{"geometry": {x: 1, y: 1}},{"attributes": {"MyField" : 10, "trackName":"ExampleTrack1"}}]

30

[{"geometry": {x: 2, y: 2}},{"attributes": {"MyField" : 20, "trackName":"ExampleTrack1"}}]

40

[{"geometry": {x: null, y: null}},{"attributes": {"MyField" : 30, "trackName":"ExampleTrack1"}}]

50

[{"geometry": {x: 4, y: 4}},{"attributes": {"MyField" : 40, "trackName":"ExampleTrack1"}}]

예시 2: 색인 2(값 30)에서 평가됩니다. 2

다음 추적 식을 사용하여 추적 거리, 속도 및 가속도를 계산합니다.

모든 거리 계산은 미터로, 속도는 초당 미터로, 가속도는 초당 제곱미터로 계산됩니다. 거리는 측지 거리를 사용하여 측정됩니다.

함수설명

TrackCurrentDistance()

첫 번째 관측에서 현재 관측까지 관측 사이에 이동한 거리의 합계입니다.

TrackDistanceAt(value)

첫 번째 관측에서 현재 관측까지의 관측 사이에 이동한 거리와 주어진 값을 더한 합계입니다.

TrackDistanceWindow(value1, value2)

현재 관측(0)에 대한 창에서 첫 번째(포함)에서 마지막 값(제외)까지의 거리입니다.

TrackCurrentSpeed()

이전 관측과 현재 관측 사이의 속도입니다.

TrackSpeedAt(value1)

현재 관측을 기준으로 한 관측 속도입니다. 예를 들어 값 2에서는 현재 관측 이후 두 관측에서의 관측 속도입니다.

TrackSpeedWindow(value1, value2)

현재 관측(0)에 대한 창에서 첫 번째(포함) 및 마지막 값(제외)까지의 속도 값입니다.

TrackCurrentAcceleration()

이전 관측과 현재 관측 사이의 가속도입니다.

TrackAccelerationAt(value1)

현재 관측을 기준으로 한 관측 가속도입니다.

TrackAccelerationWindow(value1, value2)

현재 관측(0)에 대한 창에서 첫 번째(포함)에서 마지막 값(제외)까지의 가속도 값입니다.

거리, 속도 및 가속도에 대한 계산 예시는 다음 이미지의 예시를 사용합니다.

6개 포인트로 예시 이미지 추적

함수결과 예시

TrackCurrentDistance()

포인트 ID결과(미터)

P1

0

P2

60

P3

80+60=140

P4

30+80+60=170

P5

35+30+80+60=205

P6

25+35+30+80+60=230

TrackDistanceAt(2)

포인트 ID결과(미터)

P1

0+80+60=140

P2

30+80+60=170

P3

35+30+80+60=205

P4

25+35+30+80+60=230

P5

null

P6

null

TrackDistanceWindow(-1, 2)

포인트 ID결과(미터)

P1

[0,60]

P2

[0, 60, 140]

P3

[60, 140, 170]

P4

[140, 170, 205]

P5

[170, 205, 230]

P6

[205, 230]

TrackCurrentSpeed()

포인트 ID결과(미터/초)

P1

0

P2

60/60

1

P3

80/60

1.33

P4

30/60

.5

P5

35/60

0.5833

P6

25/60

0.4167

TrackSpeedAt(2)

포인트 ID결과(미터/초)

P1

80/60

1.33

P2

30/60

.5

P3

35/60

0.5833

P4

25/60

0.4167

P5

null

P6

null

TrackSpeedWindow(-1, 2)

포인트 ID결과(미터/초)

P1

[0, 1]

P2

[0, 1, 1.3]

P3

[1, 1.3, 0.5]

P4

[1.3, 0.5, 0.583]

P5

[0.5, 0.583, -0.4167]

P6

[0.583, -0.4167]

TrackCurrentAcceleration()

포인트 ID결과(미터/초²)

P1

0

P2

0.0167

P3

0.0056

P4

-0.0014

P5

0.0014

P6

-0.0028

TrackAccelerationAt(2)

포인트 ID결과(미터/초²)

P1

0.0056

P2

-0.0014

P3

0.0014

P4

-0.0028

P5

null

P6

null

TrackAccelerationWindow(-1, 2)

포인트 ID결과(미터/초²)

P1

[0, 0.0167]

P2

[0, 0.0167, 0.0056]

P3

[0.0167, 0.0056, -0.0014]

P4

[ 0.0056, -0.0014, 0.0014]

P5

[-0.0014, 0.0014, -0.0028]

P6

[0.0014, -0.0028]