Skip To Content

Utilizar expressões de buffer com GeoAnalytics Tools

As seguintes ferramentas na caixa de ferramentas do GeoAnalytics Tools permitem a você aplicar uma expressão:

As GeoAnalytics Tools que utilizam expressões têm diferentes usos, como também, limitações sobre quais expressões podem ser aplicadas. Na versão 10.6, todas as expressões utilizadas no GeoAnalytics suportam Arcade.

Obtenha mais informações sobre Funções Arcade

Reconstruir Caminhos e Criar Buffers

As expressões de buffer são utilizadas pelas ferramentas Reconstruir Caminhos e Criar Buffers.

Os tamanhos de buffer são comumente inseridos utilizando valores de campo ou constantes. Entretanto, a entrada de valores não é a única maneira de especificar um tamanho de buffer utilizando as GeoAnalytics Tools. Em alguns casos, você pode desejar a execução de um cálculo matemático para definir o tamanho do buffer. O cálculo é aplicado a cada feição analizada. Os cálculos são realizados quando a análise é executada no ArcGIS GeoAnalytics Server.

Os exemplos da expressão de buffer estão incluídos nas seções a seguir.

Exemplos de operador matemático e função

As expressões de buffer podem processar números matematicamente. A seguinte tabela exibe uma amostra de operações disponíveis.

Obtenha mais informações sobre operações matemáticas e funções disponíveis no Arcade

OperadorExplanaçãoExemploResultado

a + b

a mais b.

fieldname contém um valor de 1.5.

$feature["fieldname"] + 2.5

4.0

a - b

a menos b.

fieldname contém um valor de 3.3.

$feature["fieldname"]- 2.2

1.1

a * b

a vezes b.

fieldname contém um valor de 2.0.

$feature["fieldname"] * 2.2

4.4

a / b

a dividido por b.

fieldname contém um valor de 4.0.

$feature["fieldname"] / 1.25

3.2

abs( a )

Retorna o valor absoluto (positivo) de a.

fieldname contém um valor de -1.5.

abs($feature["fieldname"])

1.5

log( a )

Retorna o logaritmo natural (base E) de a.

fieldname contém um valor de 1.

log($feature["fieldname"])

0

sin( a )

Retorna o seno trigonométrico de a. A entrada é assumida como sendo um ângulo em radianos.

fieldname contém um valor de 1.5707.

sin($feature["fieldname"])

1

cos( a )

Retorna o co-seno trigonométrico de a. A entrada é assumida como sendo um ângulo em radianos.

fieldname contém um valor de 0.

cos($feature["fieldname"])

1

tan( a )

Retorna a tangente de a. A entrada é assumida como sendo um ângulo em radianos.

fieldname contém um valor de 0.

tan($feature["fieldname"])

0

sqrt( a )

Retorna a raiz quadrada de a.

fieldname contém um valor de 9.

sqrt($feature["fieldname"])

3

min( a, b )

Retorna o número estimado mais baixo entre a e b.

fieldname contém um valor de 1.5 e um valor de -3.

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

-3

max( a, b )

Retorna o número estimado mais alto entre a e b.

fieldname1 contém um valor de 1.5 e fieldname2 contém um valor de -3.

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

1.5

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

Retorna o valor de entrada se ele estiver dentro dos limites determinados. Se o valor de entrada for menor que o valor baixo, retorna o valor baixo. Se o de entrada valor for maior que o valor alto, retorna o valor alto.

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

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

Retorna 0 se distance for menor que 0, 10 se distance for maior que 10, e caso contrário, distance .

Retorna 6 se Store dist for menor que 6, distance se Store dist for maior que distance, e caso contrário, Store dist .

Exemplo de multiplicação para uma expressão de buffer

$feature["Distance"] * 2

Como exemplos de função de distância

As funções as distance convertem valores numéricos para uma distância linear, que pode então ser utilizada em uma expressão matemática. As ferramentas Reconstruir Caminhos e Criar Buffers pode utilizar as funções as distance. Se um valor numérico for utilizado sem uma função as distance, a unidade será assumida para ser metros.

FunçãoExplanaçãoExemploResultado

as_meters( <value> )

Aplica um cálculo assumindo que os valores de entrada estão em metros.

as_meters( $feature["fieldname"] )

as_meters(150)

Os resultados são armazenados em buffers por 150 metros.

as_kilometers( <value> )

Aplica um cálculo assumindo que os valores de entrada estão em quilômetros.

as_kilometers( $feature["fieldname"] )

as_kilometers(150)

Os resultados são armazenados em buffers por 150 quilômetros.

as_feet( <value> )

Aplica um cálculo assumindo que os valores de entrada estão em pés.

as_feet( $feature["fieldname"] )

as_feet(150)

Os resultados são armazenados em buffers por 150 milhas.

as_yards( <value> )

Aplica um cálculo assumindo que os valores de entrada estão em jardas.

as_yards( $feature["fieldname"] )

as_yards(150)

Os resultados são armazenados em buffers por 150 jardas.

as_nautical_miles( <value> )

Aplica um cálculo assumindo que os valores de entrada estão em milhas náuticas.

as_nautical_miles( $feature["fieldname"] )

as_nautical_miles(150)

Os resultados são armazenados em buffers por 150 milhas náuticas.

as_miles( <value> )

Aplica um cálculo assumindo que os valores de entrada estão em milhas.

as_miles( $feature["fieldname"] )

as_miles(150)

Os resultados são armazenados em buffers por 150 milhas.

Para cada feição, multiplique o campo Distance, assumindo que esteja em quilômetros e adicione 10 metros para uma expressão de buffer.

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

Operadores condicionais

As declarações condicionais podem utilizar os seguintes operadores:

OperadorExplanaçãoExemploResultados

a > b

a < b

a é maior que b

a é menor que b

10 > 2

Falso

a >= b

a <= b

a é maior ou igual a b

a é menor ou igual a b

abs(-10) >= 10

Verdadeiro

a != b

a não é igual a b

abs(-3) != -3

Verdadeiro

a == b

a é igual a b

abs(-5) == 5

Verdadeiro

<condition1> || <condition2>

Condição 1 ou condição 2 é atendida.

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

Verdadeiro

<condition1> && <condition2>

Condição 1 e condição 2 são atendidas.

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

Falso

Exemplo de uma expressão de buffer utilizando funções e condições avançadas

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

Exemplo de multiplicação para condição de ligação

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

Exemplos de operador lógico

Além dos operadores de condição, operadores lógicos mais avançados podem ser utilizados para criar buffers como mostrado na tabela a seguir.

Obtenha mais informações sobre funções lógicas disponíveis no Arcade.

FunçãoExplanaçãoExemploResultado

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

Retorna um valor se uma condição avaliar para true e retorna outro valor se esta condição avaliar para false.

<true value> e <false value> podem ser o seguinte:

  • Um campo numérico. Se houver um espaço no nome de campo, utilize colchetes.
  • Um número.
  • Uma função.

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

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

Retorna field1 se field1 for maior que field2, e caso contrário, 0.

Retorna o resultado da segunda função iif se field1 for maior que field2, e caso contrário, 0.

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

Avalia uma série de expressões na ordem, até que uma avalie para true.

  • expression—Uma expressão.
  • result—O resultado da expressão. Pode ser um número ou campo.
  • default—Um valor opcional se nenhuma das expressões for compatível.

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

Se field1 + 10 for maior que 1, retorna 1. Se não, marque se field2 + 10 for maior que 2. Se positivo, retorna 2. Se não, retorna field3.

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

Avalia uma expressão e compara seu valor com parâmetros subsequentes. Se a expressão corresponder, ela retorna o próximo valor de parâmetro. Se nenhuma corresponder, há a opção do último parâmetro para ser um valor de retorno padrão.

  • conditional val—Um valor condicional. Pode ser um campo ou uma expressão.
  • case—Um valor a ser comparado à conditional val.
  • result—O resultado se o caso for correspondente à conditional val.
  • defaultValue—Um valor opcional se nenhum outro valor for true.

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

Compara a igualdade entre o valor condicional field1 + 3 e case1 field1. Se true, retorna 1. Se false, compara a igualdade entre field1 + 3 e field2. Se true, retorna 2; caso contrário, retorna 0.

Exemplos de rastreamento -

Reconstruir Caminhos pode utilizar equações com reconhecimento de caminho no Arcade, como mostra a tabela a seguir:

FunçãoExplanaçãoExemploResultado

TrackStartTime()

Calcula o tempo inicial de um caminho em milissegundos a partir da época.

Utilizando um caminho que inicia em 2 de Janeiro de 2017.

TrackStartTime()

1483315200000

TrackDuration()

Calcula a duração de um caminho em milissegundos a partir do inicício até a etapa de tempo atual.

Utilizando um caminho que inicia em 2 de Janeiro de 2017 e o tempo atual é 4 de Janeiro de 2017.

TrackDuration()

172800000

TrackCurrentTime()

Calcula o tempo atual em um caminho.

Utilizando um recurso que ocorre em 3 de janeiro de 2017 as 09:00 AM.

TrackCurrentTime()

1483434000000

TrackIndex

Retorna o índice de tempo da feição sendo calculada.

Calculando este valor na primeira feição em um caminho.

TrackIndex

0

TrackFieldWindow(<fieldName>, <startIndex>, <endIndex>)

Retorna um vetor de valores no campo fornecido para o índice de tempo especificado. A função da janela permite a você ir para frente e para trás no tempo. A expressão é avaliada em cada feição no caminho.

  • A feição atual está no índice 0.
  • Os valores positivos representam feições que ocorrem no futuro, após o valor atual. Por exemplo, posição 1 é o próximo valor no vetor.
  • Os números negativos representam feições que ocorreram no passado, antes da feição anterior. Por exemplo, -1 é o valor anterior no vetor.

MyField tem valores ordenados consecutivamente do [10, 20, 30, 40, 50]. A expressão é avaliada em cada feição no caminho. Os resultados são retornados inclusive da feição inicial e exclusivo da feição final.

Exemplo 1: TrackFieldWindow("MyField,-1,2)

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

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

Exemplo 1: Quando avaliada em cada feição, a tabela mostra os resultados seguintes.

Feição avaliada

Resultado

10

[10,20]

20

[10, 20, 30]

30

[20,30,40]

40

[30,40,50]

50

[40, 50]

Exemplo 2: Quando avaliado no índice 2 (o valor é 30), retorna: 10.

Exemplo 3: Quando avaliado no índice 2 (o valor é 30), retorna: 50.

TrackGeometryWindow(<startIndex>, <endIndex>)

Retorna um vetor de valores representando a geometria do índice de tempo especificado. A função da janela permite a você ir para frente e para trás no tempo. A expressão é avaliada em cada feição no caminho.

  • A feição atual está no índice 0.
  • Os valores positivos representam feições que ocorrem no futuro, após o valor atual. Por exemplo, posição 1 é o próximo valor no vetor.
  • Os números negativos representam feições que ocorreram no passado, antes da feição anterior. Por exemplo, -1 é o valor anterior no vetor.

MyField tem valores ordenados consecutivamente do [10, 20, 30, 40, 50]. A geometria das feições é [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]. A expressão é avaliada em cada feição no caminho. Os resultados são retornados inclusive da feição inicial e exclusivo da feição final.

Exemplo 1: TrackGeometryWindow(-1,2)

Exemplo 2: TrackGeometryWindow(0,1)[0] em um conjunto de dados de polilinha

Exemplo 3: TrackGeometryWindow(0,1)[0] em um conjunto de dados de polígono

Exemplo 4: Localizar o valor X do ponto anterior TrackGeometryWindow(-1,0)[0]["x"]

Exemplo 1: Quando avaliada em cada feição, a tabela mostra os resultados seguintes.

Feição avaliada

Resultado

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

Exemplo 2: As polilinhas são retornadas no formato seguinte: [{"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]]]}]

Exemplo 3: Os polígonos são retornados no formato seguinte: [{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}]

Exemplo 4: Avaliado no índice 2 (o valor é 30): 2

TrackWindow(<value1>, <value2>)

Retorna um vetor de valores representando geometria e todos os atributos do índice de tempo especificado. A função da janela permite a você ir para frente e para trás no tempo.

  • A feição atual está no índice 0.
  • Os valores positivos representam feições que ocorrem no futuro, após o valor atual. Por exemplo, posição 1 é o próximo valor no vetor.
  • Os números negativos representam feições que ocorreram no passado, antes da feição anterior. Por exemplo, -1 é o valor anterior no vetor.

MyField tem valores ordenados consecutivamente de [10, 20, 30, 40, 50], além dos campos objectID, globalID e instant_datetime. A geometria das feições é [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]. A expressão é avaliada em cada feição no caminho. Os resultados são retornados inclusive da feição inicial e exclusivo da feição final.

Exemplo 1: TrackWindow(-1,0)[0]

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

Exemplo 1: Quando avaliada em cada feição, a tabela mostra os resultados seguintes.

Feição avaliada

Resultado

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

Exemplo 2: Avaliado no índice 2 (o valor é 30): 2

Use as seguintes expressões de pista para calcular distância, velocidade e aceleração nas pistas.

Todos os cálculos de distância são calculados em metros, a velocidade em metros por segundo e a aceleração em metros por segundo ao quadrado. As distâncias são medidas usando distâncias geodésicas.

FunçãoExplanação

TrackCurrentDistance()

A soma das distâncias percorridas entre as observações da primeira até a observação atual.

TrackDistanceAt(value)

A soma das distâncias percorridas entre as observações da primeira até a observação atual mais o valor fornecido.

TrackDistanceWindow(value1, value2)

As distâncias entre o primeiro (inclusive) e o último valor (exclusivo) em uma janela sobre a observação atual (0).

TrackCurrentSpeed()

A velocidade entre a observação anterior e a observação atual.

TrackSpeedAt(value1)

A velocidade na observação em relação à observação atual. Por exemplo, no valor 2, é a velocidade na observação duas observações após a observação atual.

TrackSpeedWindow(value1, value2)

Os valores de velocidade entre o primeiro (inclusivo) e o último valor (exclusivo) em uma janela ao redor da observação atual (0).

TrackCurrentAcceleration()

A aceleração entre a observação anterior e a observação atual.

TrackAccelerationAt(value1)

A aceleração na observação em relação à observação atual.

TrackAccelerationWindow(value1, value2)

Os valores de aceleração entre o primeiro (inclusive) e o último valor (exclusivo) em uma janela em torno da observação atual (0).

Os cálculos de exemplo para distância, velocidade e aceleração usarão exemplos da seguinte imagem:

Rastrear imagem de exemplo com seis pontos

FunçãoResultado de exemplo

TrackCurrentDistance()

ID do PontoResultado (metros)

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 do PontoResultado (metros)

P1

0 + 80 + 60 = 140

P2

30 + 80 + 60 = 170

P3

35 + 30 + 80 + 60 = 205

P4

25 + 35 + 30 + 80 + 60 = 230

P5

nulo

P6

nulo

TrackDistanceWindow(-1, 2)

ID do PontoResultado (metros)

P1

[0,60]

P2

[0, 60, 140]

P3

[60, 140, 170]

P4

[140, 170, 205]

P5

[170, 205, 230]

P6

[205, 230]

TrackCurrentSpeed()

ID do PontoResultado (metros/segundo)

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 do PontoResultado (metros/segundo)

P1

80/60

1.33

P2

30/60

.5

P3

35/60

0.5833

P4

25/60

0.4167

P5

nulo

P6

nulo

TrackSpeedWindow(-1, 2)

ID do PontoResultado (metros/segundo)

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 do PontoResultado (metros/segundo²)

P1

0

P2

0.0167

P3

0.0056

P4

-0.0014

P5

0.0014

P6

-0.0028

TrackAccelerationAt(2)

ID do PontoResultado (metros/segundo²)

P1

0.0056

P2

-0.0014

P3

0.0014

P4

-0.0028

P5

nulo

P6

nulo

TrackAccelerationWindow(-1, 2)

ID do PontoResultado (metros/segundo²)

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]