皆さん、こんにちは。
Linear Referencing Service の applyEdits REST API 関数を使って addCalibrationPoints を実行しようとすると、以下のエラーが発生します:
{'error': {'code': 500, 'message': '操作を完了できません。', 'details': []}}
- これは ArcGIS Pro の Python スクリプトツールから実行しています。
- Enterprise バージョンは 11.3 です。
- ArcGIS Pro バージョンは 3.3 ですが、Python から applyEdits を呼び出しているので関係ないと思います。
Pro の Location Referencing Add Calibration Point ツールを使って手動でキャリブレーションポイントを追加することはできます。同じサービス、同じバージョンです。
applyEdits のペイロードは以下の通りです:
https://MyServer/server/rest/services/MyService/MapServer/exts/LRServer/applyEdits
?f=json
&token=MyToken
&gdbVersion=MY.NAME@MY.ORG.AR_250212b
&sessionId={51777728-f672-4805-9831-b1800715f796}
&edits=
[
{"id": 1, "addCalibrationPoints":
[
{
"networkLayerId": 3,
"routeId": "LOC103431P",
"fromDate": 1522972800000,
"geometry": { "x": 441393.9140999997, "y": 3626705.8938999996}, "measure": 0.26968174 }
]
}
]
CalibrationPoints サービスのレイヤーIDは 1、Network サービスのレイヤーIDは 3 です。
入力ジオメトリの spatialReference が CalibrationPoints の spatialReference と一致しているため、geometry に spatialReference は不要だと思いますが、試しに付けても結果は同じでした。
recalibrateRouteDownstream や retire も必須ではないと思いますが、こちらも試しましたが結果は変わりませんでした。
Event フィールドの更新(applyEdits/updates)やルートの廃止(applyEdits/retireRoute)は正常に実行できているので、設定自体は正しいと思います。基本的なワークフローは以下の通りです:
- sessionId と versionGuid を取得
- startReading
- startEditing
- ルートのロックを取得
- applyEdits(レスポンスは「操作を完了できません」)
- ロックを解除
- stopEditing
- stopReading
このワークフローは、2021 Developer Summit のキャリブレーションポイント追加に関するプレゼンテーションに非常に近いものです:
https://www.youtube.com/watch?app=desktop&v=VQzW-EZCEKc
ご助力いただけると幸いです!