变换要素 (编辑)

摘要

根据已知相应控制点之间的变换链接通过缩放、平移和旋转将输入要素的坐标从一个位置转换到另一个位置。

使用情况

    警告:

    此工具会修改输入数据。 有关详细信息以及避免数据被意外更改的策略,请参阅修改或更新输入数据的工具

    注:

    所有输入必须处于同一坐标系。

  • 输入要素可以是点、线、面或栅格。

  • 输入链接要素为代表已知相应控制点间变换链接的线。 链接的起点在源控制点位置,链接的终点在相应的目标控制点位置。

  • 变换操作可在直角或平面坐标系中执行。 建议使用投影坐标系 (PCS)。 将地理坐标系 (GCS) 与经纬度值一同使用可导致变形或造成计算错误。

  • 所有输入要素都将通过以下三种变换方式之一进行变换:仿射、相似和射影。 每种方法都至少需要某一数量的变换链接。 有关变换公式在内的详细信息,请参阅变换要素

    • AFFINE - 至少需要 3 个变换链接
    • PROJECTIVE - 至少需要 4 个变换链接
    • SIMILARITY - 至少需要 2 个变换链接
  • 变换的结果取决于输入链接的质量。 链接应起始于已知的源位置,结束于相应的目标位置,也就是所谓的控制点。 控制点建立得越好,变换的结果越准确。 链接的开始和结束位置的坐标将用于派生变换参数,这些参数是源控制点和目标控制点之间的最佳拟合。 即使使用变换参数来变换实际的源控制点,变换后的位置也不会与目标控制点位置完全匹配。 这就是所谓的残差,每个变换链接都会生成残差。 作为一个选项,输入链接的残差可以写出到包含以下字段的表中:

    • Orig_FID- 输入链接要素 ID
    • X_Source- 源的 x 坐标或来自链接的结束位置
    • Y_Source- 链接的源或起始端位置的 y 坐标
    • X_Destination- 链接的目标或结束端位置的 x 坐标
    • Y_Destination- 目标的 y 坐标或到链接的结束位置
    • Residual_Error- 变换位置的残差

    均方根误差 (RMSE) 也称为均方根偏差 (RMSD),在残差的基础上计算得出,用于指示派生变换的常规适宜性。 在处理消息中写出 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())