Skip To Content

フィールド演算プロセッサ

フィールド演算プロセッサは、値を計算するときに使用します。 このプロセッサは、式を評価して必要な値を生成します。 式には、文字列リテラル、数値定数、および処理中のジオイベント内の指定されたフィールドから取得したイベント データを含めることができます。 計算された値を既存のフィールドに書き込み、現在そのフィールドに格納されているデータを上書きするか、計算された値をプロセッサが作成した新しいフィールドに書き込むことができます。

フィールド演算プロセッサの使用例を次に示します。

  • フィールド演算プロセッサを使用し、日付/時間値に時間を加算/減算して、タイムスタンプをローカル タイム ゾーンに合わせることができます。 この処理は、エポック ミリ秒 (または長整数) で表されるイベント レコードのタイムスタンプから、エポック値 (ミリ秒単位の長整数) を加算/減算することで実行できます。 変更されたエポック タイムスタンプ値を、新しい日付タイプ フィールドに設定できます。
  • プロセッサは、距離、速度、時間、温度、高さ、重量などのさまざまな単位を変換できます。
  • このプロセッサは、現場の作業員がリアルタイムでデータを幾何補正するのに使用できます。 replace()toLowerCase()toUpperCase()concat() などの文字列関数を使用して、フィールドから取得したデータが一定の条件または仕様をリアルタイムで満たしていることを確認できます。 たとえば、concat() を使用して、収集されたデータからスペースを削除できます。 同様に、toLowerCase() を使用して、収集されたすべてのデータで小文字の使用を強制できます。 これらの文字列関数の出力を、フィーチャ サービス レイヤーにリアルタイムで書き込むことができます。
  • プロセッサを使用して、ArcGIS Survey123 フィーチャ レイヤーのコメント フィールド (文字列) からキーワードまたはフレーズを再帰的に検索できます。 文字列関数 contains() を使用することで、ユーザーが投稿したコメントから、くぼみ、岩屑、洪水、亀裂、閉塞などの道路状態を確認できます。 このようなタイプのコンテンツが存在する場合、フィールド演算はブール値 true を返します。 その後、実際のイベント レコードをフィルター処理およびリアルタイム処理し、対応する必要のある公共事業やその他の機関に即座に通知することができます。

使用上の注意

フィールド演算プロセッサを使用する際には、以下の点に注意してください。

  • フィールド演算プロセッサは汎用的なプロセッサです。 「Distance * 0.3048」などの相対的に一定の式を使用して、与えられたフィート単位の距離と等価な距離を、メートル単位で計算できます。 このプロセッサは、replaceAll(Description, 'foo', 'bar') などのさまざまな Java 文字列関数もサポートしています。この関数を使用して、各イベント レコードの説明フィールド内の部分文字列 foo のインスタンスを、すべて部分文字列 bar に置き換えることができます。 このプロセッサは、複数の数学関数もサポートしています。 たとえば、max(Time1, Time2) を使用して 2 つのフィールドの値のうちでどちらが大きいかを特定したり、random() を使用して乱数を生成したりすることができます。
  • [ターゲット フィールド] パラメーターを使用して、既存のフィールドまたは新しいフィールドに出力の計算を格納するようにプロセッサを構成できます。 新しいフィールドを追加してイベント レコードのスキーマを変更するには、GeoEvent Server で新しいジオイベント定義を作成する必要があります。 新しいジオイベント定義は GeoEvent Server で管理され、プロセッサまたはプロセッサが使用されているジオイベント サービスに対して変更が行われた場合に削除されます。
  • 既存のフィールドを指定して計算値を書き込む場合、ジオイベント定義を最初に指定する必要はありません。 [定義] メニューでジオイベント定義を選択しても、[フィールド] メニューで選択可能なフィールドのリストが絞り込まれるだけです。

フィールド演算プロセッサでサポートされている演算子と関数を次に示します。

フィールド演算プロセッサでサポートされている演算子と関数

操作演算子

加算

+
Odom1 + Odom2

この式では、「Odom1」フィールドの数値と「Odom2」フィールドの数値が加算され、単純な和が求められます。 文字列の連結にも対応しています (「'Hello' + 'World'」など)。

減算

-
VALUEA - VALUEB

この式では、「VALUEA」というタグが設定されたフィールドの数値から「VALUEB」というタグが設定されたフィールドの数値が減算され、単純な差が求められます。

加算とは異なり、文字列の連結に対応していないので、2 つの文字列の差を求めることはできません。

Multiplication

*
Altitude * 0.3048

この式では、「Altitude」というフィールドの数値と定数「0.3048」が乗算され、単純な積が求められます (この場合は、フィート単位の値がメートル単位でそれに相当する値に変換される)。

Division

/
Distance / 1.609344

この式では、「Distance」というフィールドの数値が定数「1.609344」で除算され、単純な商が求められます (この場合は、キロメートル単位の値がマイル単位に相当する値に変換される)。

剰余

%
VALUEA % VALUEB

この式では、「VALUEA」というタグが設定されたフィールドの数値が、「VALUEB」というタグが設定されたフィールドの数値で除算され、その剰余が倍精度値で返されます。

論理積

&&
Flag1 && Flag2

この式では、「Flag1」というフィールドのブール値と「Flag2」というフィールドのブール値に対して論理積演算が実行され、ブール結果が求められます。 入力フィールドのデータ型を Boolean にする必要があります。 式に含まれる文字列リテラル (例: TRUE) と定数値 (例: 1) は、計算の一環としてそれに相当するブール値に変換されません。

論理和

||
Flag1 || Flag2

この式では、「Flag1」というフィールドのブール値と「Flag2」というフィールドのブール値に対して論理和演算が実行され、ブール結果が求められます。

論理否定

!
!(Flag1)

この式では、「Flag1」というフィールドのブール値に対して論理否定演算が実行され、ブール結果が求められます。 ネストされた式に対応しています (例: !(Flag1 && Flag2))。

より大きい

>
Altitude > 12500

この式では、「Altitude」というフィールドの値が指定された定数より大きいかどうかを求める論理演算が実行されます (結果はブール値になる)。

以上

>=
Altitude >= 12500

この式では、「Altitude」というフィールドの値が指定された定数以上かどうかを求める論理演算が実行されます (結果はブール値になる)。

より小さい

<
Altitude < 1500

この式では、「Altitude」というフィールドの値が指定された定数より小さいかどうかを求める論理演算が実行されます (結果はブール値になる)。

以下

<=
Altitude <= 1500

この式では、「Altitude」というフィールドの値が指定された定数以下かどうかを求める論理演算が実行されます (結果はブール値になる)。

等価

==
VALUEA == VALUEB

この式では、「VALUEA」というタグが設定されたフィールドの値と「VALUEB」というタグが設定されたフィールドの値が等しいかどうかを求める論理演算が実行されます (結果はブール値になる)。

不等価

!=
VALUEA != VALUEB

この式では、「VALUEA」というタグが設定されたフィールドの値と「VALUEB」というタグが設定されたフィールドの値が等しくないかどうかを求める論理演算が実行されます (結果はブール値になる)。

注意:

一般に算術演算関数または演算子として認識される文字を属性フィールドの名前に使用してはなりません。 このプロセッサで使用されている式パーサーは、フィールド名を式の残りの部分から分離するように特別に設計されている構文でフィールド名自体が囲まれていない限り、式 subtract accuracy from gpsgps-accuracy (属性フィールド名にダッシュが含まれている) を区別することができません。 属性フィールド名で使用可能なメタ文字を使用する必要がある場合の要件については、「フィールド名の分離」をご参照ください。

注意:

フィールド演算プロセッサは、型が混在する場合、値の自動変換を試みます。 たとえば、「10.0 + 5」という式は、2 つの浮動小数点値の和を計算するように自動変換されます。 「codeValue + 'SomeString'」(codeValue は数値) のように、数値と文字列が混在している場合、不明の値が生成されます。 下で説明する valueOf(object) などの文字列関数を使用して、明示的に codeValue を文字列に変換するのが正しい方法です。

注意:

フィールド演算プロセッサの等価演算子と不等価演算子は、浮動小数点値に直接適用することができません。 2 つの小数値が等しいかどうかを正確に比較するには、まずこれらの値の位取りを行い、これらの値を長整数に四捨五入してから、長整数値を比較します。

  • MyFloat1 == MyFloat2」のように比較しないでください。
  • 代わりに、「round(MyFloat1*1000) == round(MyFloat2*1000)」のように比較します。

フィールド演算プロセッサには、java.lang.Math にある関数を正確に反映した関数が用意されています。 関数の技術仕様と完全なリストについては、Java 開発者向け資料をご参照ください。 使用頻度の高い関数を次にまとめてあります。

フィールド演算プロセッサの定数

関数説明

E()

オイラー数 (e) を指定された倍精度値乗して求められた値が返されます。

PI()

pi (直径に対する円周の割合) の倍精度表現が返されます。

フィールド演算プロセッサの変換関数

関数説明

toBoolean(値)

指定した値がブール値として返されます。 渡された値は、文字列に変換されて小文字にキャストされ、両端の空白スペースが削除されるように切詰められてから評価されます。 文字列値が true、y、yes、on、または 1 のいずれかに一致する場合、ブール値 true が返されます。文字列値が false、n、no、off、0、または -1 のいずれかに一致する場合、ブール値 false が返されます。 それ以外のすべての文字列値の場合、null 値が返されます。 文字列が null または空の場合、null 値が返されます。

toDate(値)

指定した値が long integer のエポック ミリ秒として返されます。 date、long、または string のいずれかの値を指定できます。 date 値と long 値は、long integer のエポック ミリ秒として変更されないまま返されます。 string 値は、日付形式 ‘yyyy-MM-dd'T'HH:mm:ss'、'EEE MMM dd HH:mm:ss zzz yyyy'、'MM/dd/yy hh:mm:ss aa'、'MM/dd/yy HH:mm:ss'、および 'MM/dd/yy HH:mm' に対して評価されます。 文字列がこれらのいずれかの形式に一致すると、日付に変換されて、long integer のエポック ミリ秒として返されます。 それ以外のすべての値の場合、NULL が返されます。

toShort(値)

指定した値が、-32,768 ~ 32,767 の範囲内の 16 ビット符号付き short integer 値として返されます。 値をこの範囲内の数値に変換できない場合、この関数は NULL を返します。

toInteger(値)

指定した値が、−2,147,483,648 ~ 2,147,483,647 の範囲内の 32 ビット符号付き integer 値として返されます。 値をこの範囲内の数値に変換できない場合、この関数は NULL を返します。

toLong(値)

指定した値が、−9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 の範囲内の 64 ビット符号付き long integer 値として返されます。 値をこの範囲内の数値に変換できない場合、この関数は NULL を返します。

toFloat(値)

指定した値が、32 ビット符号付き float 値として返されます。 値を数値に変換できない場合、この関数は NULL を返します。

toDouble(値)

指定した値が、64 ビット符号付き double 値として返されます。 値を数値に変換できない場合、この関数は NULL を返します。

フィールド演算プロセッサの時間関数

関数説明

currentTime()

long integer のエポック ミリ秒として、現在の時刻が返されます。

receivedTime()

入力コネクタがイベントを作成したときのタイムスタンプが返されます。

currentOffsetUTC()

ローカル サーバーの現在の日時と UTC の差が返されます。

フィールド演算プロセッサのジオメトリ関数

関数説明

toPoint(X, Y, 空間参照)

引数 (X - 倍精度値、Y - 倍精度値、空間参照 WKID - 整数) を取り、指定された水平空間参照の x,y 座標から成るポイント ジオメトリを返します。 空間参照は Well-known ID (数値) でなければなりません。 可能な場合、入力引数の値が正しいタイプに変換されます (エラーの際には、値は NULL になります)。 入力引数のいずれかが NULL であるか正しいタイプに変換できない場合、この関数は NULL を返します。

toPoint3D(X, Y, Z, 空間参照)

引数 (X - 倍精度値、Y - 倍精度値、Z - 倍精度値、空間参照 WKID - 整数) を取り、指定された水平空間参照の x,y,z 座標から成る 3D ポイント ジオメトリを返します。 空間参照は Well-known ID (数値) でなければなりません。 可能な場合、入力引数の値が正しいタイプに変換されます (エラーの際には、値は NULL になります)。 Z 引数には NULL を指定できます。NULL の場合、指定された水平空間参照の x,y 座標から成る 2D ポイント ジオメトリが返されます。 Z 以外の引数のいずれかが NULL であるか正しいタイプに変換できない場合、この関数は NULL を返します。

フィールド演算プロセッサに共通の関数

関数説明

abs(値)

引数の絶対値が返されます。

ceil(倍精度値)

指定された倍精度値以上の最小の整数値 (次に大きい整数値) が返されます。

floor(倍精度値)

指定された倍精度値以下の最大の整数値 (次に小さい整数値) が返されます。

hypot(倍精度値 x, 倍精度値 y)

中間オーバーフローと中間アンダーフローなしで sqrt((x*x) + (y*y)) が返されます。

max(値 a, 値 b)

指定された 2 つの引数値のうちの大きい方の値が返されます。

min(値 a, 値 b)

指定された 2 つの引数値のうちの小さい方の値が返されます。

random()

0.0 以上で 1.0 より小さい倍精度値が返されます。

round(値)

引数値に最も近い長整数値が返されます (倍精度値が渡される)。

注意:

フィールド演算プロセッサは、可能な場合は数値型の変換に対応します。 たとえば、関数に異なる型の数値を指定すると (例: max(3.14159,25))、比較を実行できるように、これらの値が比較可能な型 (Int、Float、または Double) に変換されます。 また、このプロセッサでは、イベントの属性フィールドに値が書き込まれた時点で算出された値の型が変換されます (たとえば、イベントのフィールドのデータ型が Double の場合は、6 + 713.0 と書き込まれる)。

フィールド演算プロセッサの指数

関数説明

sqrt(倍精度値)

指定された倍精度値の平方根が返されます。

cbrt(値)

指定された倍精度値の立方根が返されます。

exp(倍精度値)

オイラー数 (e) を指定された倍精度値乗して求められた値が返されます。

pow(倍精度値, 倍精度値)

最初の引数を 2 番目の引数乗して求められた値が返されます。

フィールド演算プロセッサの対数

関数説明

log(倍精度値)

倍精度値の自然対数 (底を e とする) が返されます。

log10(倍精度値)

倍精度値の 10 を底とする対数が返されます。

フィールド演算プロセッサの文字列関数

関数説明

参考までに、以下の構文例では、次の入力データ例を使用しています。

以下の構文例の参考として使用されている、フィールド演算プロセッサの入力データ

length(string)

戻り値: 整数

例: 'TrackID length: ' + length(TrackID)

文字列の長さを返します。

結果: "TrackID length: 7"

isEmpty(string)

戻り値: ブール

例: isEmpty(EmptyStr)

ソースの長さが 0 の場合、TRUE を返します。

結果: true

isNull(string)

戻り値: ブール

例: isNull(NullValue)

ソースの値が NULL の場合、TRUE を返します。

結果: true

equals(string, string)

戻り値: ブール

例: equals(TrackID, EmptyStr)

所定の文字列の属性値が等価である場合に TRUE を返します。 文字列が等価でない場合は FALSE を返します。文字列以外の値が入力されている場合は null を返します。

結果: false

equalsIgnoreCase(string, string)

戻り値: ブール

例: equalsIgnoreCase(TrackID, toString(TrackNum))

ソース文字列と別の文字列を、大文字小文字の違いを無視して比較します。 大文字小文字の違いを無視して、所定の文字列の属性値が等価である場合に TRUE を返します。 文字列が等価でない場合は FALSE を返します。文字列以外の値が入力されている場合は null を返します。

結果: false

説明: 「AA-1234」と「1234」は等価ではありません

compareTo(string, string)

戻り値: 整数

例: compareTo('ABCXD', 'ABCZD')

2 つの文字列を、辞書順で比較します。 2 つの文字列が等価である場合、値 0 を返します。最初の文字列が 2 番目の文字列よりも辞書順で小さい場合、負の値を返します。最初の文字列が 2 番目の文字列よりも辞書順で大きい場合、0 よりも大きい値を返します。

結果: -2

説明: int('X') - int('Z') は -2 を返します (X は Z よりもアルファベット順で 2 つ前にあたるため)。

compareToIgnoreCase(string, string)

戻り値: 整数

例: compareToIgnoreCase('abcde', 'ABCDE')

大文字小文字の違いを無視して、2 つの文字列を辞書順で比較します。

結果: 0

startsWith(string, value)

戻り値: ブール

例: startsWith('Programming', 'Program')

文字列の先頭が指定された接頭辞である場合に TRUE を返します。そうでない場合は、FALSE を返します。 2 番目の引数 value は、文字列に暗黙的にキャストできる文字列または整数値です。

結果: true

endsWith(string, value)

戻り値: ブール

例: endsWith(TrackID, TrackNum)

文字列の末尾が指定された接尾辞である場合に TRUE を返します。そうでない場合は、FALSE を返します。 2 番目の引数 value は、文字列に暗黙的にキャストできる文字列または整数値です。

結果: true

説明: 「AA-1234」の末尾は「1234」です

indexOf(string, string, startIndex)

戻り値: 整数

例: indexOf('ABCDABCBCA','BC',3)

指定したインデックスから検索して、指定した部分文字列が見つかった、検索文字列内の最初のインデックスを返します。 文字列の先頭からインデックス検索する場合は、startIndex に 0 を指定します。

結果: 5

説明: 位置 3 の文字から始めて、部分文字列「BC」が最初に現れたのは位置 5 です。

lastIndexOf(string, string, startIndex)

戻り値: 整数

例: lastIndexOf(TrackID,'-',length(TrackID))

指定したインデックスから逆方向に検索して、指定した部分文字列が見つかった、検索文字列内の最後のインデックスを返します。 文字列の末尾からインデックス検索する場合は、startIndex に length(source) を指定します。

結果: 2

説明: 文字列の末尾から逆方向に検索して、部分文字列「-」は位置 2 で見つかりました。

substring(string, intIndexBegin, intIndexEnd)

戻り値: 文字列

例: substring('ABCDABCXYZABCDABC',7,10)

ソース文字列から抽出された部分文字列を新しい文字列として返します。 部分文字列には、指定されたインデックス intIndexBegin からインデックス (intIndexEnd -1) までの文字が含まれます。 3 番目のパラメーターは、ネストされた関数 length(source) または文字列の末尾を意味する -1 で表すことができます。

結果: "XYZ"

説明: 文字インデックス 7 (「X」) から始まり、位置 7、8、9 の 3 文字が返されます。

concat(string, string)

戻り値: 文字列

例: concat('Hello', 'World')

指定された文字列 str を、ソース文字列の末尾に連結します。

結果: "HelloWorld"

matches(string, regex)

戻り値: ブール

例: matches(TrackID, '[A-Z]+[-][0-9]+')

指定した正規表現パターンが指定した文字列と一致する場合に TRUE を返します。そうでない場合は、FALSE を返します。 正規表現パターン regex は 2 番目の文字列として指定します。

結果: true

説明: TrackID の全体がパターン「文字数が 1 以上、次の文字がダッシュ、その次に数字が 1 桁以上」に一致しています。

contains(string, substring)

戻り値: ブール

例: contains(TrackID,'-')

ソース文字列に指定した部分文字列が含まれている場合に TRUE を返します。そうでない場合は、FALSE を返します。

結果: true

説明: TrackID の文字列内のどこかにリテラル「-」が含まれています。

replaceFirst(string, regex, replacement)

戻り値: 文字列

例: replaceFirst(TrackID,'[0-9]+','nnnnn')

指定した正規表現パターンに一致する最初の部分文字列を、指定した置換文字列に置き換え、結果を新しい文字列として返します。

結果: "AA-nnnnn"

説明: パターン「数字が 1 桁以上」に一致する最初の部分文字列が文字列リテラル「nnnnn」に置き換えられました。

replaceAll(string, regex, replacement)

戻り値: 文字列

例: replaceAll('ABABCABABABD','AB','X')

指定された正規表現と一致するソース文字列内の各部分文字列を、指定された代替文字列に置き換えます。 結果の文字列を新しい文字列として返します。

結果: "XXCXXXD"

説明: 正規表現パターン「AB」は、すべて文字列リテラル「X」に置き換えられました。

replace(source, target, replacement)

戻り値: 文字列

例: replace('2017-12-31','-','/')

文字列リテラルとして指定された部分文字列をすべて、指定された (文字列リテラルとしても指定されている) 置換用の部分文字列で置き換えます。 結果の文字列を新しい文字列として返します。

結果: " 2017/12/31"

toLowerCase(string)

戻り値: 文字列

例: TrackID + ' to lower: ' + toLowerCase(TrackID)

デフォルト ロケールの規則を使用して、ソース文字列内のすべての文字を小文字に変換します。 小文字に変換された文字列を新しい文字列として返します。

結果: "AA-1234 to lower: aa-1234"

toUpperCase(string)

戻り値: 文字列

例: TrackID + ' to upper: ' + toUpperCase(TrackID)

デフォルト ロケールの規則を使用して、ソース文字列内のすべての文字を大文字に変換します。 大文字に変換された文字列を返します。

結果: "AA-1234 to upper: AA-1234"

説明: この例では、TrackID のアルファベット部分はすでに大文字でした。

trim(string)

戻り値: 文字列

例: trim (string) 関数の構文例

先頭と末尾の空白スペースを削除して、ソース文字列のコピーを返します。

結果: "GeoEvent Server"

toString(fieldName)

戻り値: 文字列

例: toString(Geometry)

例: toString(Epoch)

指定したイベント属性フィールドの値の文字列表現を返します。 これらの関数により、日付およびジオメトリ属性の文字列表現を部分文字列などの形で他の関数内にネストできるようになるため、リアルタイム解析で高次データ タイプから情報を抽出できます。

結果: "{""x"":32.125,""y"":-117.125,""spatialReference"":{""wkid"":4326}}"

結果: "Fri Nov 03 17:07:56 PDT 2017"

valueOf(fieldName)

戻り値: 文字列

例: valueOf(Geometry)

例: valueOf(Epoch)

指定したイベント属性フィールドの値の文字列表現を返します。 toString() および valueOf() 関数は、同じ実装をラップしています。

フィールド演算プロセッサの三角関数

関数説明

acos(倍精度値)

値の逆余弦が返されます (返される角度は 0.0 と pi の間にある)。

asin(倍精度値)

値の逆正弦が返されます (返される角度は -pi/2 と pi/2 の間にある)。

atan(倍精度値)

値の逆正接が返されます (返される角度は -pi/2 と pi/2 の間にある)。

atan2(倍精度値 y, 倍精度値 x)

直交座標 (x, y) から極座標 (r, シータ) への変換によって取得された角度シータが返されます。

cos(倍精度値)

角度の余弦が返されます。

cosh(倍精度値)

倍精度値の双曲線余弦が返されます。

sin(倍精度値)

角度の正弦が返されます。

sinh(倍精度値)

倍精度値の双曲線正弦が返されます。

tan(倍精度値)

角度の正接が返されます。

tanh(倍精度値)

倍精度値の双曲線正接が返されます。

toDegrees(倍精度値)

ラジアン単位で計測された角度が度単位の近似角度に変換されます。

toRadians(倍精度値)

度単位で計測された角度がラジアン単位の近似角度に変換されます。

パラメーター

フィールド演算プロセッサのパラメーターを次に示します。

パラメーター説明

Name

GeoEvent Manager で参照用として使用されるプロセッサの記述名。

プロセッサ

選択されたプロセッサを示します。

プロセッサが各受信イベント レコードに対して評価する条件式。 条件式には、算術式または字句表現を使用できます。 このパラメーターには、以下を入力できます。

  • 文字列 - 文字列リテラルを識別するには、単一引用符を使用します。
    • ‘Hello’
    • ‘World’
  • 整数 - 数値を識別するには、整数を使用します。
    • 123.456
    • 100
  • フィールド - フィールドとそれに対応する値を識別するには、受信ジオイベント定義のフィールド名を使用します。 フィールドをフィールド演算で呼び出す場合は、そのデータ タイプを検討してください。
    • Speed
    • Altitude
  • タグ - フィールドを識別するには、GeoEvent Server タグを使用します。 タグ付きフィールドをフィールド演算で呼び出す場合は、そのデータ タイプを検討してください。
    • TRACK_ID
    • GEOMETRY
  • 演算子 - 演算子を使用して、論理的評価を実行します。
    • +
    • >=
  • 関数 - 関数を使用して、値の返却、識別、または変更を行います。 文字列用に予約されている関数もあれば、整数用に予約されている関数もあります。 プロセッサを使用する際は、関数が呼び出すフィールドのデータ タイプを検討してください。
    • currentTime()
    • replace()

サポート対象で、プロセッサで条件式の一部として使用できる演算子と関数の完全なリストについては、上記の「サポートされている演算子と関数」をご参照ください。

注意:

シンプル条件式の例としては、Altitude + 100 があります。 この式では、Altitude というフィールドの値を評価して 100 を加算します。 イベント レコードの Altitude フィールドに値 12500 が格納されている場合、条件式により新しい値 12600 (12500 + 100 = 12600) になります。 この値は、文字列または整数タイプのフィールドに格納できます。

同様の条件式が ‘Altitude’ + 100 として指定されている場合、文字列リテラル Altitude を取得して 100 を追加します。 条件式の出力を格納する新しいフィールドが文字列の場合、文字列の連結がサポートされているため、出力は Altitude100 になります。 ただし、式の出力を格納する新しいフィールドが整数データ タイプの場合、式は論理的に無効となり、値は出力されません。

条件式で length(Altitude) などの文字列関数が使用される場合、Altitude フィールドの文字列の合計文字数がカウントされます。 [Altitude] が整数データ タイプ (12500 など) で表現されている場合、上記の条件式は論理的に無効となり、値は出力されません。 その理由は、length() が括弧内に整数ではなく文字列値が設定されることを想定した文字列式であるためです。 ただし、[Altitude] が文字列として表現されている場合、文字列 12500 に含まれる文字数は 5 であるため、上記の条件式は値 5 を返します。

ターゲット フィールド

プロセッサによって計算された値のターゲット フィールドを指定します。 ターゲット フィールドに条件式の結果が書き込まれます。 デフォルトは [既存のフィールド] です。

  • [既存のフィールド] - 既存のフィールドをターゲット フィールドにします。 プロセッサによって計算された値は、イベント レコードの既存のフィールドに格納されます。
  • [新しいフィールド] - 新しいフィールドをターゲット フィールドにします。 プロセッサによって計算された値は、新しいフィールドに格納されます。 新しいフィールドを追加してイベント レコードのスキーマを変更するには、新しいジオイベント定義が必要です。

新しいフィールド名

(条件)

プロセッサによって計算された値が書き込まれる新しいフィールドの名前。

このパラメーターは、[ターゲット フィールド][新しいフィールド] に設定されている場合に表示され、[既存のフィールド] に設定されている場合は非表示になります。

新しいフィールド タイプ

(条件)

プロセッサによって作成される新しいフィールドのデータ タイプを指定します。 デフォルトは [Boolean] です。 使用可能なデータ タイプは次のとおりです。

  • ブール型
  • Date
  • Double
  • Float
  • Geometry
  • Integer
  • Long
  • Short
  • String

このパラメーターは、[ターゲット フィールド][新しいフィールド] に設定されている場合に表示され、[既存のフィールド] に設定されている場合は非表示になります。

新しいフィールド タグ

(条件)

新しいフィールドに適用される既存のフィールド タグの名前。

注意:

新しいフィールドにタグを付けるには、タグがすでに存在している必要があります。 プロセッサはタグを動的に作成しません。 タグの管理と作成の詳細については、「タグの管理」をご参照ください。

このパラメーターは、[ターゲット フィールド][新しいフィールド] に設定されている場合に表示され、[既存のフィールド] に設定されている場合は非表示になります。

新しいジオイベント定義名

(条件)

新しいジオイベント定義に与えられる名前。 新しいジオイベント定義は、受信イベント レコードのスキーマと計算値の格納に使用される新しいフィールドの組み合わせです。

このパラメーターは、[ターゲット フィールド][新しいフィールド] に設定されている場合に表示され、[既存のフィールド] に設定されている場合は非表示になります。

既存のフィールド名

プロセッサによって計算された値が書き込まれる既存のフィールドの名前。

注意:

受信イベント レコードのジオイベント定義を識別するには、[定義] メニューを使用します。 ジオイベント定義を選択すると、選択可能なフィールドの範囲が絞り込まれます。 [フィールド] メニューを使用して、プロセッサによって計算された値が書き込まれる既存のフィールドの特定の名前を識別します。

検討事項および制限事項

フィールド演算プロセッサを使用する際には、以下の点に注意してください。

  • 式は、数学的に記述するか、単語 (数値ではなく文字列) を使用して記述することができます。
  • 文字列リテラルを操作する場合、「'Cat' + ' ' + 'Dog'」のように常に一重引用符で囲みます。
  • このプロセッサは、タイプを変換できない場合または式を評価できない場合、NULL 値を出力します。
  • 式内のオペランドは、ジオイベント定義内のリテラル フィールド名またはフィールドに適用されたタグにすることができます。 たとえば、「Odom1 + Odom2」という式を使用すると、Odom1 フィールドと Odom2 フィールドの値が加算され、単純な和が求められます。 Odom1 フィールドに MILEAGEA というタグが付けられており、Odom2 フィールドに MILEAGEB というタグが付けられている場合は、式「MILEAGEA + MILEAGEB」を使用できます。
  • 式内の異なるタイプのデータを処理する場合、適切な変換が行われます。 たとえば、「325 + 0.125」は等価な「325.0 + 0.125」に変換されます。 指定された出力フィールドに Long Integer 値が必要な場合、計算された Double 値は切詰められます。
  • 式を作成する際に、オーバーフローに注意してください。 たとえば、式「60 * 60 * 80 * 10000」内の各項は Short Integer ですが、この計算結果は通常の Integer の 32 ビットの範囲を超えます。 各項を「60.0 * 60.0 * 80.0 * 10000.0」のように Double 値で表すと、この問題を防ぐことができます。
  • 計算された値を新しいフィールドに書き込むと、イベント レコードのスキーマが変更されるため、GeoEvent Server は新しいジオイベント定義を作成する必要があります。 このプロセッサを使用して新しいフィールドを作成する場合、フィールド名とデータ タイプを指定する必要があります。 ジオイベント定義の名前とオプションのタグを指定することができます。指定した場合、作成されたジオイベント定義内の新しいフィールドに適用されます。
  • ジオイベント サービスに処理またはフィルター処理が含まれている場合、計算のオーバーヘッドにより、イベント レコードの合計スループットが低下します。 フィールド演算プロセッサまたはその他の任意のプロセッサを実装したジオイベント サービスを設計する際は、このことを考慮してください。 ジオイベント サービスまたは GeoEvent Server サイト全体のパフォーマンスを向上させるには、事前にリアルタイム データの前処理またはフィルター処理の実行を検討してください。
  • フィールド演算プロセッサで条件式を作成する際は、フィールドまたはタグ付きフィールドのデータ タイプを検討してください。 条件式がフィールドのデータ タイプのために論理的に無効となり、値が返されない場合があります。 また、条件式が論理的に有効でも、関連するデータ タイプのために予期しない結果が生じる場合もあります。 たとえば、文字列として表現された 2 つの数値の数学的な合計を計算し、double データ タイプで新しいフィールドに格納する処理は無効です。 ただし、値を受け取る新しいフィールドが文字列の場合は、同じ式が有効です。ただし、出力される値は期待と異なる可能性があります。 各数値は数学的に加算されるのではなく、連結されます。