Skip To Content

Utiliser des expressions Arcade avec Détecter les incidents

La boîte à outils GeoAnalytics Tools contient de nombreux outils permettant d’appliquer une expression.

Les GeoAnalytics Tools qui utilisent des expressions ont des fonctions diverses, mais sont également limités quant aux expressions qu’ils peuvent appliquer. Dans la version 11.2, toutes les expressions utilisées dans ArcGIS GeoAnalytics Server prennent en charge Arcade.

En savoir plus sur les fonctions Arcade

Expressions dans Détecter les incidents

L’outil Détecter les incidentsutilise des expressions pour spécifier les conditions de début et de fin des incidents. Le résultat d’une condition de l’outil Détecter les incidents doit toujours être true ou false. Utilisez une condition pour vérifier si une entité doit être incluse dans un incident. Les conditions sont testées par rapport à chaque entité pour identifier les entités qui sont des incidents. Les calculs sont effectués lorsque l’analyse est exécutée sur votre instance d’ArcGIS GeoAnalytics Server. Les sections suivantes proposent des exemples d’expressions que vous pouvez utiliser.

Exemples d’opérateur mathématique et de fonction

Les expressions peuvent traiter mathématiquement les chiffres. Le tableau ci-dessous présente des exemples d’opérations disponibles.

En savoir plus sur les opérations et les fonctions mathématiques disponibles dans Arcade

OpérateurExplicationExempleRésultat

a + b

a plus b.

fieldname contient la valeur 1,5.

$feature["nom du champ"] + 2.5

4.0

a - b

a moins b.

fieldname contient la valeur 3,3.

$feature["nom du champ"] - 2.2

1.1

a * b

a multiplié par b.

fieldname contient la valeur 2,0.

$feature["nom du champ"] * 2.2

4.4

a / b

a divisé par b.

fieldname contient la valeur 4,0.

$feature["nom du champ"] / 1.25

3.2

abs( a )

Renvoie la valeur absolue (positive) de a.

fieldname contient la valeur -1,5.

abs($feature["nom du champ"])

1,5

log ( a )

Renvoie le logarithme naturel (base E) de a.

fieldname contient la valeur 1.

journal($feature["nom du champ"])

0

sin ( a )

Renvoie le sinus trigonométrique de a. On suppose que l'entrée est un angle en radians.

fieldname contient la valeur 1,5707.

sin($feature["nom du champ"])

1

cos( a )

Renvoie le cosinus trigonométrique de a. On suppose que l'entrée est un angle en radians.

fieldname contient la valeur 0.

cos($feature["nom du champ"])

1

tan( a )

Renvoie la tangente de a. On suppose que l'entrée est un angle en radians.

fieldname contient la valeur 0.

tan($feature["nom du champ"])

0

sqrt( a )

Renvoie la racine carrée de a.

fieldname contient la valeur 9.

sqrt($feature["nom du champ"])

3

min( a, b )

Renvoie la valeur la plus basse entre a et b.

fieldname contient les valeurs 1,5 et -3.

min($feature["nom du champ"], -3)

-3

max( a, b )

Renvoie la valeur la plus élevée entre a et b.

fieldname1 contient la valeur 1.5 et fieldname2 contient la valeur -3.

max($feature["nom du champ1"], $feature["nom du champ2"])

1,5

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

Renvoie la valeur en entrée si elle est comprise dans les limites de contrainte. Si la valeur en entrée est inférieure à la valeur basse, elle renvoie la valeur basse. Si la valeur en entrée est supérieure à la valeur haute, elle renvoie la valeur haute.

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

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

Renvoie 0 si distance est inférieure à 0,10 si distance est supérieure à 10 et distance dans les autres cas.

Renvoie 6 si Store dist est inférieure à 6, distance si Store dist est supérieure à distance et Store dist dans les autres cas.

Exemple de multiplication pour une condition qui détecte un incident.

$feature["Distance"] * 2 > 50

Exemples de fonctions de texte

Les expressions de l’outil Détecter les incidents peuvent traiter du texte. Le tableau ci-dessous présente des exemples d’opérations disponibles.

En savoir plus sur les fonctions de texte disponibles dans Arcade

OpérateurExplicationExempleRésultat

concatenate( <valeurs>, <séparateur>)

Concatène les valeurs et renvoie une chaîne.

  • values : une matrice de valeurs de chaînes à concaténer.
  • separator (facultatif) : un séparateur à utiliser pour la concaténation si le paramètre values est une matrice, ou une chaîne à concaténer si une valeur unique est fournie pour le premier paramètre. Si elle n’est pas renseignée, elle sera vide.

fieldname contient la valeur GeoAnalytics.

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

GeoAnalytics est super !

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

Trouve une chaîne à l’intérieur d’une chaîne. Les caractères génériques ne sont pas pris en charge.

  • searchText : la sous-chaîne à rechercher.
  • text : le texte à rechercher.
  • startPos (facultatif) : l’index en base zéro de l’emplacement dans la chaîne où s’effectue la recherche.

fieldname1 contient la valeur 14NorthStreet et fieldname2 contient la valeur North.

find($feature["nom du champ2"], $feature["nom du champ1"])

2

lower(<value>)

Convertit une chaîne en minuscule.

  • value : la chaîne à convertir en minuscules.

fieldname contient la valeur GEOANALYTICS.

lower($feature["nom du champ"])

GeoAnalytics

Exemple de texte utilisant find et lower.

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

Exemples de fonctions de date

Vous pouvez utiliser Détecter les incidents à partir d’expressions qui utilisent des dates. Le tableau ci-dessous présente des exemples d’opérations disponibles.

En savoir plus sur les fonctions de date disponibles dans Arcade

Dans Arcade, les valeurs mensuelles vont de 0 (janvier) à 11 (décembre) ; les jours de 1 à 31 ; les heures de 0 (0h00) à 23 (23h00), les minutes et les secondes de 0 à 59 et les millisecondes de 0 à 999. Les dates Arcade renvoient les valeurs de temps là où se trouve votre GeoAnalytics Server.

OpérateurExplicationExempleRésultat

date( <value>, <month>, <day>, <hour>, <minute>)

Analyse une valeur ou un ensemble de valeurs dans une chaîne de date.

  • value (facultatif) : nombre de millisecondes écoulées depuis le 1er janvier 1970 UTC. Peut aussi être un nombre représentant une année. Si une année est spécifiée, le mois et le jour doivent être également renseignés dans les paramètres suivants. Cette valeur peut également être une chaîne de date ou une chaîne ISO 8601 à convertir en date.
  • month (facultatif) : le mois (de 0 à 11), où « 0 » correspond à janvier et « 11 » à décembre.
  • day (facultatif) : le jour du mois (de 1 à 31).
  • hour (facultatif) : l’heure de la journée (de 0 à 23).
  • minute (facultatif) : la minute de l'heure (de 0 à 59).
  • second (facultatif) : la seconde de la minute (de 0 à 59).
  • millisecond (facultatif) : la milliseconde de la seconde (de 0 à 999).

fieldname contient la valeur 1476987783555.

Exemple 1 : Date($features["nom de champ"])

Exemple 2 : Date(2017,0,14,0)

Exemple 3 : Date()

Exemple 1 : 20 Oct 2016 11:23:03

Exemple 2 : 14 Jan 2017 00:00:00

Exemple 3 : renvoie l'heure actuelle

DateDiff(<date1>, <date2>, <unités>)

Opère une soustraction entre deux dates et renvoie la différence dans les unités spécifiées.

  • date1 : la valeur de date à partir de laquelle on soustrait une deuxième date.
  • date2 : la valeur de date à soustraire de la première date indiquée.
  • units (facultatif) : les unités dans lesquelles renvoyer la différence entre les deux dates données. Les unités prises en charge incluent les milliseconds, seconds, minutes, hours, days, months et years. Les millisecondes sont la valeur par défaut.

Exemple 1 : DateDiff(Date(2017,1,14,0), Date())

Example 2 : DateDiff(Date(2017,1,14,0), Date(), "Années")

Le résultat dépend du moment où est exécutée cette commande.

Exemple 1 : -20532129137

Exemple 2 : -0.6546783768647119

Year(<dateValue>)

Renvoie l'année de la date donnée.

  • value : une valeur de date à partir de laquelle on récupère l’année.

Exemple 1 : fieldname est un champ de type Date dont la valeur est 09 Oct 2017 04:30:43 pm.

Year($feature["nom de champ"])

Exemple 2 : fieldname est un champ de type chaîne au format chaîne ISO 8601 dont la valeur est 2012-09-27.

Exemple 1 : 2017

Exemple 2 : 2012

Opérateurs conditionnels

Les instructions conditionnelles peuvent utiliser les opérateurs suivants :

OpérateurExplicationExempleRésultats

a > b

a < b

a est supérieur à b

a est inférieur à b

10 > 2

False

a >= b

a <= b

a est supérieur ou égal à b

a est inférieur ou égal à b

abs(-10) >= 10

True

a != b

a est différent de b

abs(-3) != -3

True

a == b

a est égal à b

abs(-5) == 5

True

<condition1> || <condition2>

La condition 1 ou la condition 2 est satisfaite.

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

True

<condition1> && <condition2>

La condition 1 et la condition 2 sont satisfaites.

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

False

Exemples d’opérateurs logiques

Outre les opérateurs conditionnels, vous pouvez utiliser des opérateurs logiques plus avancés avec l’outil Détecter les incidents.

En savoir plus sur les fonctions logiques disponibles dans Arcade

FonctionExplicationExempleRésultat

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

Renvoie une valeur si une condition est true et une autre valeur si la condition est false.

<true value> et <false value> peuvent être :

  • Un champ numérique. Si le nom du champ renferme un espace, utilisez des crochets.
  • Un nombre.
  • Une fonction.

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

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

Renvoie field1 si field1 est supérieur à field2 et 0 dans les autres cas.

Renvoie le résultat de la deuxième fonction iif si field1 est supérieur à field2 et 0 dans les autres cas.

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

Évalue une série d’expressions jusqu’à ce que l’une soit true.

  • expression : une expression.
  • result : un nombre ou un champ.
  • default : une valeur facultative si les expressions ne font l’objet d’aucune correspondance.

when(($feature["champ1"] + 10) > 1, 1,($feature["champ2"] + 10) > 2 , 2, $feature["champ3"])

Si field1 + 10 est supérieur à 1, renvoie 1. Sinon, vérifie si field2 + 10 est supérieur à 2. Si c’est le cas, elle renvoie 2. Si ce n’est pas le cas, renvoie field3.

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

La fonction decode évalue une expression et compare sa valeur aux paramètres suivants. Si l’expression correspond, elle renvoie la valeur du paramètre suivant. Si aucune correspondance n’est trouvée, le dernier paramètre peut être une valeur de renvoi par défaut.

  • conditional val : un champ ou une expression.
  • case : une valeur à comparer à la conditional val.
  • result : le résultat si le cas correspond à la conditional val.
  • defaultValue : une valeur facultative si aucune autre valeur n'est true.

decode($feature["champ1"] + 3 , $feature["champ1"], 1, $feature["champ2"], 2, 0)

Compare l’égalité entre la valeur conditionnelle conditional val field1 + 3 et cas1 field1. Si la condition est true, renvoie 1. Si la condition est false, compare l’égalité entre field1 + 3 et field2. Si la condition est true, renvoie 2 ; sinon, renvoie 0.

Exemples d’équations gérant les pistes

En outre, certains GeoAnalytics Tools, tels que Detect Incidents (Détecter les incidents) et Calculate Field (Calculer un champ), peuvent utiliser des équations gérant les pistes dans Arcade.

FonctionExplicationExempleRésultat

TrackStartTime()

Calcule l’heure de début d’une piste en millisecondes depuis la dernière époque.

Utilisation d’une piste commençant le 2 janvier 2017

TrackStartTime()

1483315200000

TrackDuration()

Calcule la durée d’une piste en millisecondes depuis le début jusqu’à l‘intervalle de temps actuel.

Utilisation d’une piste commençant le 2 janvier 2017, la date actuelle étant le 4 janvier 2017.

TrackDuration()

172800000

TrackCurrentTime()

Calcule l’heure actuelle dans une piste.

Utilisation d’une entité survenant le 3 janvier 2017 à 9 h 00.

TrackCurrentTime()

1483434000000

TrackIndex

Renvoie l’index de temps de l’entité qui est calculée.

Calcul de cette valeur sur la première entité dans une piste.

TrackIndex

0

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

Renvoie une matrice de valeurs dans le champ donné pour l’index de temps spécifié. La fonction de fenêtre vous permet d’avancer et de reculer dans le temps. L’expression est évaluée à chaque entité de la piste.

  • L’entité actuelle se trouve à l’index 0.
  • Les valeurs positives représentent des entités qui ont lieu dans le futur, après la valeur actuelle. Par exemple, la position 1 est la prochaine valeur dans la matrice.
  • Les nombres négatifs représentent des entités qui ont eu lieu dans le passé, avant l’entité précédente. Par exemple, -1 est la valeur précédente dans la matrice.

MyField a des valeurs ordonnées de manière séquentielle : [10, 20, 30, 40, 50]. L’expression est évaluée à chaque entité de la piste. Les résultats sont renvoyés en intégrant l’entité de départ et en excluant l’entité de fin.

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

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

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

Exemple 1 : si elle est évaluée à chaque entité, la table contient les résultats suivants :

Entité évaluée

Résultat

10

[10,20]

20

[10, 20, 30]

30

[20,30,40]

40

[30,40,50]

50

[40, 50]

Exemple 2 : si elle est évaluée à l’index 2 (valeur 30), elle renvoie 10.

Exemple 3 : lorsque l’expression est évaluée à l’index 2 (valeur de 30), elle renvoie : 50.

TrackGeometryWindow(<startIndex>, <endIndex>)

Renvoie une matrice de valeurs représentant la géométrie de l’index de temps spécifié. La fonction de fenêtre vous permet d’avancer et de reculer dans le temps. L’expression est évaluée à chaque entité de la piste.

  • L’entité actuelle se trouve à l’index 0.
  • Les valeurs positives représentent des entités qui ont lieu dans le futur, après la valeur actuelle. Par exemple, la position 1 est la prochaine valeur dans la matrice.
  • Les nombres négatifs représentent des entités qui ont eu lieu dans le passé, avant l’entité précédente. Par exemple, -1 est la valeur précédente dans la matrice.

MyField a des valeurs ordonnées de manière séquentielle : [10, 20, 30, 40, 50]. La géométrie des entités est [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]. L’expression est évaluée à chaque entité de la piste. Les résultats sont renvoyés en intégrant l’entité de départ et en excluant l’entité de fin.

Exemple 1 : TrackGeometryWindow(-1,2)

Exemple 2 : TrackGeometryWindow(0,1)[0] sur un jeu de données polylignes

Exemple 3 : TrackGeometryWindow(0,1)[0] sur un jeu de données surfaciques

Exemple 4 : recherche de la valeur X du point précédent TrackGeometryWindow(-1,0)[0]["x"]

Exemple 1 : si elle est évaluée à chaque entité, la table contient les résultats suivants :

Entité évaluée

Résultat

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

Exemple 2 : les polylignes sont renvoyées au format suivant : [{"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]]]}]

Exemple 3 : les polygones sont renvoyés au format suivant : [{"rings":[[[-7882559.1197999995,6376090.883500002],[-7893142.474300001,6042715.216800004],[-8544018.775999999,6045361.0554000065],[-8544018.775999999,6376090.883500002],[-7882559.1197999995,6376090.883500002]]]}]

Exemple 4 : l’expression est évaluée à l’index 2 (valeur de 30) : 2

TrackWindow(<value1>, <value2>)

Renvoie une matrice de valeurs représentant la géométrie et tous les attributs de l’index de temps spécifié. La fonction de fenêtre vous permet d’avancer et de reculer dans le temps.

  • L’entité actuelle se trouve à l’index 0.
  • Les valeurs positives représentent des entités qui ont lieu dans le futur, après la valeur actuelle. Par exemple, la position 1 est la prochaine valeur dans la matrice.
  • Les nombres négatifs représentent des entités qui ont eu lieu dans le passé, avant l’entité précédente. Par exemple, -1 est la valeur précédente dans la matrice.

MyField a des valeurs ordonnées de manière séquentielle [10, 20, 30, 40, 50], en plus des champs objectID, globalID et instant_datetime. La géométrie des entités est [{x: 1, y: 1},{x: 2, y: 2} ,{x: null, y: null},{x: 4, y: 4}, {x: 5, y: 5}]. L’expression est évaluée à chaque entité de la piste. Les résultats sont renvoyés en intégrant l’entité de départ et en excluant l’entité de fin.

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

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

Exemple 1 : si elle est évaluée à chaque entité, la table contient les résultats suivants :

Entité évaluée

Résultat

10

20

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

30

[{"geometry": {x: 2, y: 2}},{"attributs": {"MonChamp" : 20, "NomPiste":"PisteExemple1"}}]

40

[{"geometry": {x: null, y: null}},{"attributs": {"MonChamp" : 30, "NomPiste":"PisteExemple1"}}]

50

[{"geometry": {x: 4, y: 4}},{"attributs": {"MonChamp" : 40, "NomPiste":"PisteExemple1"}}]

Exemple 2 : l’expression est évaluée à l’index 2 (valeur de 30) : 2

Utilisez les expressions de piste suivantes pour calculer la distance, la vitesse et l’accélération sur les pistes.

Tous les calculs de distance sont exprimés en mètres, la vitesse est exprimée en mètres par seconde et l’accélération, en mètres par seconde carré. Les distances sont mesurées à l’aide des distances géodésiques.

FonctionExplication

TrackCurrentDistance()

Somme des distances parcourues entre les observations, depuis la première observation jusqu’à l’observation actuelle.

TrackDistanceAt(value)

Somme des distances parcourues entre les observations de la première observation à l’observation le service actuelle, plus la valeur donnée.

TrackDistanceWindow(value1, value2)

Distances entre la première valeur (inclusive) et la dernière valeur (exclusive) dans une fenêtre autour de l’observation actuelle (0).

TrackCurrentSpeed()

Vitesse entre l’observation précédente et l’observation actuelle.

TrackSpeedAt(value1)

Vitesse au niveau de l’observation par rapport à l’observation actuelle. Par exemple, à la valeur 2, il s’agit de la vitesse à l’observation située deux observations après l’observation actuelle.

TrackSpeedWindow(value1, value2)

Valeurs de vitesse entre la première valeur (inclusive) et la dernière valeur (exclusive) dans une fenêtre autour de l’observation actuelle (0).

TrackCurrentAcceleration()

Accélération entre l’observation précédente et l’observation actuelle.

TrackAccelerationAt(value1)

Accélération au niveau de l’observation par rapport à l’observation actuelle.

TrackAccelerationWindow(value1, value2)

Valeurs d’accélération entre la première valeur (inclusive) et la dernière valeur (exclusive) dans une fenêtre autour de l’observation actuelle (0).

Les calculs d’exemple de la distance, de la vitesse et de l’accélération s’appuieront sur l’image suivante :

Image d’exemple de piste avec six points

FonctionExemple de résultat

TrackCurrentDistance()

Identifiant de pointRésultat (mètres)

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)

Identifiant de pointRésultat (mètres)

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)

Identifiant de pointRésultat (mètres)

P1

[0,60]

P2

[0, 60, 140]

P3

[60, 140, 170]

P4

[140, 170, 205]

P5

[170, 205, 230]

P6

[205, 230]

TrackCurrentSpeed()

Identifiant de pointRésultat (mètres/seconde)

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)

Identifiant de pointRésultat (mètres/seconde)

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)

Identifiant de pointRésultat (mètres/seconde)

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

Identifiant de pointRésultat (mètres/seconde²)

P1

0

P2

0,0167

P3

0.0056

P4

-0.0014

P5

0.0014

P6

-0.0028

TrackAccelerationAt(2)

Identifiant de pointRésultat (mètres/seconde²)

P1

0.0056

P2

-0.0014

P3

0.0014

P4

-0.0028

P5

null

P6

null

TrackAccelerationWindow(-1, 2)

Identifiant de pointRésultat (mètres/seconde²)

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]