Skip To Content

Używanie wyrażeń dotyczących buforów w narzędziach GeoAnalytics Tools

W skrzynce narzędziowej GeoAnalytics Tools dostępne są następujące narzędzia pozwalające na używanie wyrażeń:

Narzędzia GeoAnalytics Tools, w których używane są wyrażenia, mają inne zastosowania, a ponadto obowiązują w ich przypadku inne ograniczenia dotyczące możliwości stosowania wyrażeń. W wersji 10.6 produktu ArcGIS wszystkie wyrażenia używane do analiz geoprzestrzennych obsługują język Arcade.

Dowiedz się więcej o funkcjach języka Arcade

Rekonstruuj ścieżki i Utwórz bufory

W narzędziach Rekonstruuj ścieżki i Utwórz bufory używane są wyrażenia dotyczące bufora.

Wielkości buforów podaje się zwykle przy użyciu wartości stałych lub wartości pól. Jednakże wprowadzenie wartości nie jest jedynym sposobem, w jaki można podać wielkość bufora w narzędziach GeoAnalytics Tools. W niektórych przypadkach wielkość bufora należy ustawić, wykonując obliczenie matematyczne. Obliczenia są stosowane do każdego analizowanego obiektu. Obliczenia są wykonywane wtedy, gdy analiza jest przeprowadzana na serwerze ArcGIS GeoAnalytics Server.

Przykłady wyrażeń dotyczących bufora znajdują się w poniższych sekcjach.

Przykłady operatorów i funkcji matematycznych

Za pomocą wyrażeń dotyczących buforów można matematycznie przetwarzać liczby. W poniższej tabeli przedstawiono przykłady dostępnych operacji.

Dowiedz się więcej na temat działań matematycznych i funkcji dostępnych w języku Arcade.

OperatorObjaśnieniePrzykładWynik

a + b

a plus b

fieldname zawiera wartość 1,5.

$feature["nazwa_pola"] + 2,5

4.0

a - b

a minus b.

fieldname zawiera wartość 3,3.

$feature["fieldname"] - 2.2

1,1

a * b

a mnożone przez b.

fieldname zawiera wartość 2,0.

$feature["nazwa_pola"] * 2,2

4,4

a / b

a dzielone przez b.

fieldname zawiera wartość 4,0.

$feature["nazwa_pola"] / 1,25

3,2

abs(a)

Zwraca wartość bezwzględną (dodatnią) argumentu a.

fieldname zawiera wartość -1,5.

abs($feature["nazwa_pola"])

1,5

log(a)

Zwraca logarytm naturalny (o podstawie e) argumentu a.

fieldname zawiera wartość 1.

log($feature["nazwa_pola"])

0

sin(a)

Zwraca wartość funkcji trygonometrycznej sinus dla argumentu a. Przyjmuje się, że argument wejściowy jest kątem wyrażonym w radianach.

fieldname zawiera wartość 1,5707.

sin($feature["nazwa_pola"])

1

cos(a)

Zwraca wartość funkcji trygonometrycznej cosinus dla argumentu a. Przyjmuje się, że argument wejściowy jest kątem wyrażonym w radianach.

fieldname zawiera wartość 0.

cos($feature["nazwa_pola"])

1

tan(a)

Zwraca wartość funkcji tangens dla argumentu a. Przyjmuje się, że argument wejściowy jest kątem wyrażonym w radianach.

fieldname zawiera wartość 0.

tan($feature["nazwa_pola"])

0

sqrt(a)

Zwraca pierwiastek kwadratowy z argumentu a.

fieldname zawiera wartość 9.

sqrt($feature["nazwa_pola"])

3

min(a, b)

Zwraca najmniejszą wartość spośród argumentów a i b.

fieldname zawiera wartości 1,5 i wartość -3.

min($feature["nazwa_pola"], -3)

-3

max(a, b)

Zwraca największą wartość spośród argumentów a i b.

fieldname1 zawiera wartość 1,5, a pole fieldname2 zawiera wartość -3.

max($feature["nazwa_pola1"], $feature["nazwa_pola2"])

1,5

constrain(<value>,<low>,<high>)

Zwraca wartość wejściową, jeśli mieści się ona w podanych granicach. Jeśli wartość wejściowa jest mniejsza niż wartość minimalna, zwracana jest wartość minimalna. Jeśli wartość wejściowa jest większa od wartości maksymalnej, zwracana jest wartość maksymalna.

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

constrain($feature['Store dist'], 6, odległość)

Zwraca wartość 0, jeśli wartość distance jest mniejsza niż 0, wartość 10, jeśli wartość distance jest większa niż 10 oraz wartość distance, gdy nie zachodzi żaden z poprzednich przypadków.

Zwraca wartość 6, jeśli wartość Store dist jest mniejsza niż 6, wartość distance, jeśli wartość Store dist jest większa niż distance oraz wartość Store dist, gdy nie zachodzi żaden z poprzednich przypadków.

Przykład mnożenia w wyrażeniu dotyczącym bufora

$feature["Distance"] * 2

Przykłady funkcji odległości

Funkcje as distance typują wartości liczbowe na odległości liniowe, których można następnie używać w wyrażeniu matematycznym. Narzędzia Rekonstruuj ścieżki i Utwórz bufory umożliwiają korzystanie z funkcji as distance. Jeśli wartość liczbowa jest używana bez funkcji as distance, przyjmuje się, że jednostkami są metry.

FunkcjaObjaśnieniePrzykładWynik

as_meters(<wartość>)

Stosuje obliczenie przy założeniu, że wartości wejściowe są wyrażone w metrach.

as_meters($feature["nazwa_pola"])

as_meters(150)

Wyniki są buforowane dla odległości wynoszącej 150 metrów.

as_kilometers(<wartość>)

Stosuje obliczenie przy założeniu, że wartości wejściowe są wyrażone w kilometrach.

as_kilometers($feature["nazwa_pola"])

as_kilometers(150)

Wyniki są buforowane dla odległości wynoszącej 150 kilometrów.

as_feet(<wartość>)

Stosuje obliczenie przy założeniu, że wartości wejściowe są wyrażone w stopach.

as_feet($feature["nazwa_pola"])

as_feet(150)

Wyniki są buforowane dla odległości wynoszącej 150 stóp.

as_yards(<wartość>)

Stosuje obliczenie przy założeniu, że wartości wejściowe są wyrażone w jardach.

as_yards($feature["nazwa_pola"])

as_yards(150)

Wyniki są buforowane dla odległości wynoszącej 150 jardów.

as_nautical_miles(<wartość>)

Stosuje obliczenie przy założeniu, że wartości wejściowe są wyrażone w milach morskich.

as_nautical_miles($feature["nazwa_pola"])

as_nautical_miles(150)

Wyniki są buforowane dla odległości wynoszącej 150 mil morskich.

as_miles(<wartość>)

Stosuje obliczenie przy założeniu, że wartości wejściowe są wyrażone w milach.

as_miles($feature["nazwa_pola"])

as_miles(150)

Wyniki są buforowane dla odległości wynoszącej 150 mil.

Dla każdego obiektu pomnóż wartość pola Distance, przyjmując, że odległość jest wyrażona w kilometrach i dodaj 10 metrów w wyrażeniu dotyczącym bufora.

as_kilometers($feature["Distance"]) * 3 + as_meters(10)

Operatory warunkowe

W instrukcjach warunkowych można używać następujących operatorów:

OperatorObjaśnieniePrzykładWyniki

a > b

a < b

a jest większe niż b

a jest mniejsze niż b

10 > 2

False

a >= b

a <= b

a jest większe lub równe b

a jest mniejsze lub równe b

abs(-10) >= 10

Prawda

a != b

a nie jest równe b

abs(-3) != -3

Prawda

a == b

a jest równe b

abs(-5) == 5

Prawda

<warunek1> || <warunek2>

Spełniony jest warunek1 lub warunek2.

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

Prawda

<warunek1> && <warunek2>

Spełniony jest zarówno warunek1 jak i warunek2.

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

False

Przykład wyrażenia dotyczącego bufora, w którym zastosowano zaawansowane funkcje i warunki

iff(field1 > field2, iff(field2 = 0, field3, field4), 0)

Przykład mnożenia w warunku połączenia

iff(field1 > field2, iff(field2 = 0, field3, field4), 0) > $join["Distance"] * 2

Przykłady operatorów logicznych

Podczas tworzenia buforów oprócz operatorów warunkowych można używać bardziej zaawansowanych operatorów logicznych, jak pokazano w poniższej tabeli.

Dowiedz się więcej o funkcjach logicznych dostępnych w języku Arcade.

FunkcjaObjaśnieniePrzykładWynik

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

Zwraca jedną wartość, jeśli warunek przyjmuje wartość true i inną wartość, jeśli warunek przyjmuje wartość false.

Wartości <true value> i <false value> mogą być następujące:

  • Pole liczbowe. Jeśli w nazwie pola występuje spacja, należy użyć nawiasów kwadratowych.
  • Liczba.
  • Funkcja.

iif($feature["field1"] > $feature["field2"], $feature["field1"], 0)

iif($feature["field1"] > $feature["field2"], iif($feature["field2"] = 0, $feature["field3"], $feature["field4"]), 0)

Zwraca wartość field1, jeśli wartość field1 jest większa niż wartość field2 i 0 w przeciwnym razie.

Zwraca wynik działania drugiej funkcji iif, jeśli wartość field1 jest większa niż wartość field2 i 0 w przeciwnym razie.

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

Wylicza kolejne wartości serii wyrażeń do chwili, aż jedno z nich będzie miało wartość true.

  • expression — wyrażenie.
  • result — wynik wyrażenia. Może być liczbą lub polem.
  • default — wartość opcjonalna, jeśli żadne z wyrażeń nie będzie miało odpowiedniej wartości.

when(($feature["field1"] + 10) > 1, 1,($feature["field2"] + 10) > 2 , 2, $feature["field3"])

Jeśli wartość field1 + 10 jest większa niż 1, zwraca wartość 1. W przeciwnym razie sprawdzane jest, czy wartość field2 + 10 jest większa niż 2. Jeśli tak, zwraca wartość 2. Jeśli nie, zwraca wartość field3.

decode(<conditional val> , <case1> , <result1>, <case2>, <result2>, ... <caseN>, <resultN>, <defaultValue> )

Wylicza wartość wyrażenia, a następnie porównuje ją z kolejnymi parametrami. W przypadku zgodności zwracana jest wartość następnego parametru. Przy braku zgodności istnieje opcja ustawienia ostatniego parametru jako wartości zwracanej domyślnie.

  • conditional val — wartość warunkowa. Może być polem lub wyrażeniem.
  • case — wartość, która ma zostać porównana z wartością conditional val.
  • result — wynik, jeśli odpowiedni przypadek jest zgodny z wartością conditional val.
  • defaultValue — opcjonalna wartość używana, gdy żadna inna wartość nie jest równa true.

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

Sprawdza równość wartości warunkowej (conditional val) field1 + 3 i pierwszego przypadku (case1) równego field1. Jeśli wynikiem jest true, zwraca wartość 1. Jeśli wynikiem jest false, sprawdza równość wartości field1 + 3 i wartości field2. Jeśli wynikiem jest true, zwraca wartość 2. W przeciwnym razie zwraca wartość 0.

Przykłady z danymi o ścieżkach

Narzędzie Rekonstruuj ścieżki może używać równań z danymi o ścieżkach w języku Arcade, jak pokazano w poniższej tabeli:

FunkcjaObjaśnieniePrzykładWynik

TrackStartTime()

Wylicza czas rozpoczęcia ścieżki w milisekundach od czasu epoki.

Używa ścieżki rozpoczynającej się 2 stycznia 2017 roku.

TrackStartTime()

1483315200000

TrackDuration()

Wylicza czas trwania ścieżki w milisekundach od początku do bieżącego etapu czasowego.

Używa ścieżki rozpoczynającej się 2 stycznia 2017 roku, a bieżący czas to 4 stycznia 2017 roku.

TrackDuration()

172800000

TrackCurrentTime()

Wylicza bieżący czas w ścieżce.

Używa obiektu, który się wydarzył 3 stycznia 2017 roku o godzinie 9:00.

TrackCurrentTime()

1483434000000

TrackIndex

Zwraca indeks czasu wyliczanego obiektu.

Wylicza tę wartość dla pierwszego obiektu w ścieżce.

TrackIndex

0

TrackFieldWindow(<nazwa_pola>, <indeks_początkowy>, <indeks_końcowy>)

Zwraca tablicę wartości w określonym polu dla określonego indeksu czasu. Funkcja window pozwala przechodzić do przodu i do tyłu w czasie. Wyrażenie jest wyliczane dla każdego obiektu na ścieżce.

  • Bieżący obiekt jest z indeksem 0.
  • Wartości dodatnie reprezentują obiekty, które nastąpią w przyszłości, po bieżącej wartości. Na przykład pozycja 1 jest następną wartością w tablicy.
  • Liczby ujemne reprezentują obiekty, które wystąpiły w przeszłości, przed poprzednim obiektem. Na przykład -1 jest poprzednią wartością w tablicy.

MyField zawiera uporządkowane sekwencyjnie wartości [10, 20, 30, 40, 50]. Wyrażenie jest wyliczane dla każdego obiektu na ścieżce. Wyniki są zwracane włącznie z obiektem początkowym i z wyłączeniem obiektu końcowego.

Przykład 1: TrackFieldWindow("MojePole,-1,2)

Przykład 2: TrackFieldWindow("MojePole,-2,0)[0]

Przykład 3: TrackFieldWindow("MojePole,0,3)[2]

Przykład 1: Przy wyliczaniu dla każdego obiektu tabela przedstawia następujące wyniki:

Wyliczony obiekt

Wynik

10

[10,20]

20

[10, 20, 30]

30

[20,30,40]

40

[30,40,50]

50

[40, 50]

Przykład 2: Przy wyliczaniu z indeksem 2 (wartość wynosi 30) zwraca 10.

Przykład 3: Przy wyliczaniu z indeksem 2 (wartość wynosi 30) zwraca: 50.

TrackGeometryWindow(<indeks_początkowy>, <indeks_końcowy>)

Zwraca tablicę wartości reprezentującą geometrię dla podanego indeksu czasu. Funkcja window pozwala przechodzić do przodu i do tyłu w czasie. Wyrażenie jest wyliczane dla każdego obiektu na ścieżce.

  • Bieżący obiekt jest z indeksem 0.
  • Wartości dodatnie reprezentują obiekty, które nastąpią w przyszłości, po bieżącej wartości. Na przykład pozycja 1 jest następną wartością w tablicy.
  • Liczby ujemne reprezentują obiekty, które wystąpiły w przeszłości, przed poprzednim obiektem. Na przykład -1 jest poprzednią wartością w tablicy.

MyField zawiera uporządkowane sekwencyjnie wartości [10, 20, 30, 40, 50]. Geometria obiektów jest następująca: [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]. Wyrażenie jest wyliczane dla każdego obiektu na ścieżce. Wyniki są zwracane włącznie z obiektem początkowym i z wyłączeniem obiektu końcowego.

Przykład 1: TrackGeometryWindow(-1,2)

Przykład 2: TrackGeometryWindow(0,1)[0] na zestawie danych polilinii

Przykład 3: TrackGeometryWindow(0,1)[0] na zestawie danych poligonowych

Przykład 4: Znajdź wartość X poprzedniego punktu TrackGeometryWindow(-1,0)[0]["x"]

Przykład 1: Przy wyliczaniu dla każdego obiektu tabela przedstawia następujące wyniki:

Wyliczony obiekt

Wynik

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}]

Przykład 2: Polilinie są zwracane w następującym formacie: [{"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]]]}]

Przykład 3: Poligony są zwracane w następującym formacie: [{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}]

Przykład 4: Przy wyliczaniu z indeksem 2 (wartość wynosi 30): 2

TrackWindow(<wartość1>, <wartość2>)

Zwraca tablicę wartości reprezentującą geometrię i wszystkie atrybuty dla podanego indeksu czasu. Funkcja window pozwala przechodzić do przodu i do tyłu w czasie.

  • Bieżący obiekt jest z indeksem 0.
  • Wartości dodatnie reprezentują obiekty, które nastąpią w przyszłości, po bieżącej wartości. Na przykład pozycja 1 jest następną wartością w tablicy.
  • Liczby ujemne reprezentują obiekty, które wystąpiły w przeszłości, przed poprzednim obiektem. Na przykład -1 jest poprzednią wartością w tablicy.

MyField zawiera uporządkowane sekwencyjnie wartości [10, 20, 30, 40, 50], oprócz pól objectID, globalID oraz instant_datetime. Geometria obiektów jest następująca: [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]. Wyrażenie jest wyliczane dla każdego obiektu na ścieżce. Wyniki są zwracane włącznie z obiektem początkowym i z wyłączeniem obiektu końcowego.

Przykład 1: TrackWindow(-1,0)[0]

Przykład 2: geometry(TrackWindow(-1,0)[0]["x"]

Przykład 1: Przy wyliczaniu dla każdego obiektu tabela przedstawia następujące wyniki:

Wyliczony obiekt

Wynik

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"}}]

Przykład 2: Przy wyliczaniu z indeksem 2 (wartość wynosi 30): 2

Następujące wyrażenia ścieżek umożliwiają obliczanie odległości, prędkości i przyspieszenia w ścieżkach.

Wszystkie odległości są obliczane w metrach, prędkość w metrach na sekundę, a przyspieszenie – w metrach na sekundę kwadrat. Odległości są mierzone jako wartości geodezyjne.

FunkcjaObjaśnienie

TrackCurrentDistance()

Suma odległości pokonanych między obserwacjami (od pierwszej do aktualnej obserwacji).

TrackDistanceAt(wartość)

Suma odległości pokonanych między obserwacjami (od pierwszej do aktualnej obserwacji) powiększona o daną wartość.

TrackDistanceWindow(wartość1, wartość2)

Odległość między wartością pierwszą (włącznie) i wartością ostatnią (nie jest uwzględniana) w oknie aktualnej obserwacji (0).

TrackCurrentSpeed()

Prędkość między poprzednią obserwacją i aktualną obserwacją.

TrackSpeedAt(wartość1)

Prędkość dla obserwacji względem aktualnej obserwacji. Na przykład wartość 2 oznacza prędkość dla obserwacji występującej dwie obserwacje po obserwacji aktualnej.

TrackSpeedWindow(wartość1, wartość2)

Wartości prędkości między wartością pierwszą (włącznie) i wartością ostatnią (nie jest uwzględniana) w oknie aktualnej obserwacji (0).

TrackCurrentAcceleration()

Przyspieszenie między poprzednią obserwacją i aktualną obserwacją.

TrackAccelerationAt(wartość1)

Przyspieszenie dla obserwacji względem aktualnej obserwacji.

TrackAccelerationWindow(wartość1, wartość2)

Wartości przyspieszenia między wartością pierwszą (włącznie) i wartością ostatnią (nie jest uwzględniana) w oknie aktualnej obserwacji (0).

W przykładowych obliczeniach odległości, prędkości i przyspieszenia będą używane przykłady z następującego obrazu.

Przykładowy obraz ścieżki z sześcioma punktami

FunkcjaPrzykładowy wynik

TrackCurrentDistance()

ID punktuWynik (w metrach)

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 punktuWynik (w metrach)

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 punktuWynik (w metrach)

P1

[0,60]

P2

[0, 60, 140]

P3

[60, 140, 170]

P4

[140, 170, 205]

P5

[170, 205, 230]

P6

[205, 230]

TrackCurrentSpeed()

ID punktuWynik (metry/sekundy)

P1

0

P2

60/60

1

P3

80/60

1,33

P4

30/60

0,5

P5

35/60

0,5833

P6

25/60

0,4167

TrackSpeedAt(2)

ID punktuWynik (metry/sekundy)

P1

80/60

1,33

P2

30/60

0,5

P3

35/60

0,5833

P4

25/60

0,4167

P5

null

P6

null

TrackSpeedWindow(-1, 2)

ID punktuWynik (metry/sekundy)

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 punktuWynik (metry/sekunda²)

P1

0

P2

0,0167

P3

0,0056

P4

-0,0014

P5

0,0014

P6

-0,0028

TrackAccelerationAt(2)

ID punktuWynik (metry/sekunda²)

P1

0,0056

P2

-0,0014

P3

0,0014

P4

-0,0028

P5

null

P6

null

TrackAccelerationWindow(-1, 2)

ID punktuWynik (metry/sekunda²)

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]