変換エラーの計算 (Calculate Transformation Errors) (編集)

サマリー

座標変換に使用する既知のコントロール ポイント間の入力リンクの座標に基づいて、残差エラーと RMSE (二乗平均平方根誤差) を計算します。

使用法

  • このツールは、[フィーチャの座標補正 (Transform Features)] ツールの前に使用され、特に多数のフィーチャを変換する前に、コントロール ポイントが対象の変換に対して十分あるかどうかが判定されます。

  • 入力リンク フィーチャは、対応するコントロール ポイント間の変換リンクを表すラインです。

  • 変換は、直交座標系または平面座標系で機能します。 PCS (投影座標系) をお勧めします。 緯度と経度の値を持つ GCS (地理座標系) を使用すると、歪みや計算エラーが発生する可能性があります。

  • エラーは、アフィン変換、相似変換、射影変換という 3 つの変換方式のいずれかに対して計算されます。 各方式には、最低数の変換リンクが必要です。 変換式などの詳細については、「フィーチャの座標補正」をご参照ください。

    • アフィン - 少なくとも 3 つの変換リンクが必要です。
    • 射影 - 少なくとも 4 つの変換リンクが必要です。
    • 相似 - 少なくとも 2 つの変換リンクが必要です。
  • 変換結果は、入力リンクの質によって異なります。 リンクは既知のソース位置から開始し、対応するターゲット位置で終了します。これらの位置は、コントロール ポイントとも呼ばれます。 コントロール ポイントがよりよく確立されているほど、変換結果の精度が高くなります。 リンクの起終点の座標を使用して、変換式で使用されるパラメーターを取得します。これらは、「フィーチャの座標補正」で説明するように、ソースとターゲットのコントロール ポイント間で最適なものです。 変換パラメーターに基づいて実際のソース コントロール ポイントを変換した場合でも、結果の位置はターゲット コントロール ポイントの位置と一致しません。 この不一致は残差エラーと呼ばれ、各変換リンクで発生します。 入力リンクの残差エラーは、指定された出力テーブルに書き込まれます。このテーブルには、次のフィールドが含まれています。

    • Orig_FID- 入力リンク フィーチャの ID
    • X_Source- リンクのソース位置つまり始点の X 座標
    • Y_Source- リンクのソース位置つまり始点の Y 座標
    • X_Destination- リンクのターゲット位置つまり終点の X 座標
    • Y_Destination- リンクのターゲット位置つまり終点の Y 座標
    • Residual_Error- 変換後の位置の残差エラー

    RMSD (二乗平均平方根偏差) とも呼ばれる RMSE は、残差エラーに基づいて計算され、通常、得られた変換結果の適切さの尺度となります。 RMSE 値は、処理メッセージに書き込まれます。 これは、スクリプトまたはモデル ワークフローで使用できる派生出力パラメーターにもなります。

    フィーチャの座標補正」トピックに、残差エラーと RMSE の計算に関する詳細が記載されています。 入力フィーチャとコントロール ポイントの位置精度に関する知識を基に、ユーザーが許容可能な RMSE 値を決める必要があります。 RMSE 値が大きすぎると、残差エラーを確認して、残差エラーの大きいリンクを破棄または置換する必要が生じます。

パラメーター

ラベル説明データ タイプ
入力リンク フィーチャ

座標変換に使用する既知のコントロール ポイント間の変換リンクである入力リンク フィーチャ。

Feature Layer
出力リンク テーブル
(オプション)

入力リンクのフィーチャ ID とその残差エラーを含む出力テーブル。 入力リンクの残差エラーは、指定された出力テーブルに書き込まれます。このテーブルには、次のフィールドが含まれています。

  • Orig_FID- 入力リンク フィーチャの ID
  • X_Source- リンクのソース位置つまり始点の X 座標
  • Y_Source- リンクのソース位置つまり始点の Y 座標
  • X_Destination- リンクのターゲット位置つまり終点の X 座標
  • Y_Destination- リンクのターゲット位置つまり終点の Y 座標
  • Residual_Error- 変換後の位置の残差エラー
Table
方法
(オプション)

入力フィーチャの座標変換に使用する変換方式を指定します。

  • アフィン変換少なくとも 3 つの変換リンクが必要です。 これがデフォルトです。
  • 射影変換少なくとも 4 つの変換リンクが必要です。
  • 相似変換少なくとも 2 つの変換リンクが必要です。
String

派生した出力

ラベル説明データ タイプ
RMSE

RMSE (二乗平均平方根誤差) の値をレポートします。

Double

arcpy.management.CalculateTransformationErrors(in_link_features, {out_link_table}, {method})
名前説明データ タイプ
in_link_features

座標変換に使用する既知のコントロール ポイント間の変換リンクである入力リンク フィーチャ。

Feature Layer
out_link_table
(オプション)

入力リンクのフィーチャ ID とその残差エラーを含む出力テーブル。 入力リンクの残差エラーは、指定された出力テーブルに書き込まれます。このテーブルには、次のフィールドが含まれています。

  • Orig_FID- 入力リンク フィーチャの ID
  • X_Source- リンクのソース位置つまり始点の X 座標
  • Y_Source- リンクのソース位置つまり始点の Y 座標
  • X_Destination- リンクのターゲット位置つまり終点の X 座標
  • Y_Destination- リンクのターゲット位置つまり終点の Y 座標
  • Residual_Error- 変換後の位置の残差エラー
Table
method
(オプション)

入力フィーチャの座標変換に使用する変換方式を指定します。

  • AFFINE少なくとも 3 つの変換リンクが必要です。 これがデフォルトです。
  • PROJECTIVE少なくとも 4 つの変換リンクが必要です。
  • SIMILARITY少なくとも 2 つの変換リンクが必要です。
String

派生した出力

名前説明データ タイプ
out_rmse

RMSE (二乗平均平方根誤差) の値をレポートします。

Double

コードのサンプル

CalculateTransformationErrors の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで CalculateTransformationErrors 関数を使用する方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data/Countries.gdb"
arcpy.edit.CalculateTransformationErrors("control_Links", "output_Table", "AFFINE")
CalculateTransformationErrors の例 2 (スタンドアロン スクリプト)

次のスタンドアロン スクリプトは、CalculateTransformationErrors 関数をスクリプティング環境で適用する方法の例を示しています。

import arcpy
import os

# All input data is in country.gdb and output will also go to this gdb
arcpy.env.workspace = os.path.join(os.getcwd(), "country.gdb")

in_links_feats = "link_features"
out_link_table = "output_table"

# Transformation method
method = "SIMILARITY"

result = arcpy.edit.CalculateTransformationErrors(in_links_feats, out_link_table, method)

# Get the transformation error
error = float(result.getOutput(1))

# If error is less than 12.234, run Transform Features
if error < 20.0:
    # Make a copy of the input features 
    arcpy.management.CopyFeatures(in_links_feats, "in_links_copy")
    arcpy.edit.TransformFeatures("in_links_copy", in_links_feats, method, "out_link_table")
else:
    print("Transformation error {} is too high".format(error))