パイプの長さと断面形状を確認し、パイプのラベルを生成するかどうか、またどのように生成するかを判定するため、以下のラベル式を作成しました。ArcGIS Proでは問題なく動作します。また、式をArcGIS Onlineに貼り付けると、コードの検証に成功し、想定どおりテスト文字列が返されます(式内のどちらのラベル関数でも同様です)。
しかし、マップ上にラベルが表示されません。似たような(もっと単純な)関数も使っていますが、そちらは問題なく動作しています。
function ChooseLabelFormat(ML,PL,Sec){
//パイプ形状に応じてラベル関数を呼び出す
return When(
PL >= ML && Sec == 'Circular', GetMainLabel ($feature.NominalDiameter,$feature.Material),
PL >= ML && Sec != 'Circular', GetMainLabelNC ($feature.Material,$feature.BoxHeight,$feature.BoxWidth),
"")
};
function GetMainLabel(Dia,Mat){
//-999およびUnkの値を除外して、直径や材質を返す
return When(
Dia !=-999 && Mat != "Unk", Dia + "'' " + Mat,
Dia !=-999 && Mat == "Unk", Dia + "''",
Dia ==-999 && Mat != "Unk", Mat,
"")
};
function GetMainLabelNC(Mat,BH,BW){
//-999およびUnkの値を除外して、高さ×幅や材質を返す
return When(
BH !=-999 && Mat != "Unk", BH + "'' x " + BW + "'' " + Mat,
BH !=-999 && Mat == "Unk", BH + "'' x " + BW + "'' ",
BH ==-999 && Mat != "Unk", Mat,
"")
};
//ラベル付け用の変数を設定し、関数を呼び出す
var Section = DomainName($feature, 'CrossSectionShape');
//ラベルを付ける最小フィーチャ長をMinLabel値として設定:
var MinLabel = 50;
var PipeLen = $feature.SHAPE__Length; //var PipeLen = Length(Geometry($feature), 'feet')
return ChooseLabelFormat(MinLabel,PipeLen,Section);<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>