フィーチャの座標補正 (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
入力リンク フィーチャ

変換のために既知のコントロール ポイントをリンクする入力リンク フィーチャ。

Feature Layer
方法
(オプション)

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

  • アフィン変換少なくとも 3 つの変換リンクが必要です。 これがデフォルトです。
  • 射影変換少なくとも 4 つの変換リンクが必要です。
  • 相似変換少なくとも 2 つの変換リンクが必要です。
String
出力リンク テーブル
(オプション)

入力リンクとその残差エラーを含む出力テーブル。

Table

派生した出力

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

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

Double
更新された入力フィーチャ

更新された入力フィーチャ。

Feature Layer

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

入力フィーチャ。このフィーチャの座標が変換されます。 調整できる入力フィーチャは、ポイント、ライン、ポリゴン、またはアノテーションです。

Feature Layer
in_link_features

変換のために既知のコントロール ポイントをリンクする入力リンク フィーチャ。

Feature Layer
method
(オプション)

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

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

入力リンクとその残差エラーを含む出力テーブル。

Table

派生した出力

名前説明データ タイプ
out_rmse

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

Double
out_feature_class

更新された入力フィーチャ。

Feature Layer

コードのサンプル

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

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

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

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

import arcpy
import os

# Set environment settings
arcpy.env.overwriteOutput = True

# Function to convert link info in a text file to a line feature class
def CreateLinkFeatures(in_text_file, in_data):

    sr = arcpy.Describe(in_data).spatialReference
    features = []  # a list to hold polyline geometry objects

    f = open(in_text_file, "r")
    
    for line in f.readlines():

        # Take start/end blank spaces off
        # Separate the start and end point coordinates
        points = line.strip().split()   
        
        point1 = arcpy.Point(float(points[1]), float(points[2]))
        point2 = arcpy.Point(float(points[3]), float(points[4]))
        
        features.append(arcpy.Polyline(arcpy.Array([point1, point2]), sr))
        
    f.close()   # close the text file

    # Copy the geometry objects into a feature class named Links
    result = arcpy.management.CopyFeatures(features, in_data + "_links")

    return result[0]
    
if __name__ == "__main__":

    # Make a copy of the data because
    # TransformFeatures tool modifies the input data
    arcpy.management.CopyFeatures(r"C:\data\Tutorial.gdb\Parcels", r"C:\data\Tutorial.gdb\Parcels_copy")

    links_file = r"C:\data\TF_links.txt"
    tf_link_features = CreateLinkFeatures(links_file, r"C:\data\Tutorial.gdb\Parcels")
    
    arcpy.edit.TransformFeatures(r"C:\data\Tutorial.gdb\Parcels_copy", tf_link_features)
    print(arcpy.GetMessages())