变换要素 (编辑)

摘要

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

使用情况

    警告:

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

    注:

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

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

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

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

  • 所有输入要素均通过仿射、相似及投影三种方法之一进行变换;每种方法都需要一定的最少变换链接数。 有关详细信息,请参阅转换要素,其中包含变换公式。

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

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

    均方根误差 (RMSE) 也称为均方根偏差 (RMSD),在残差的基础上计算得出,可表示变换完成的质量。 在处理消息中写出 RMSE 值。 它还是可在脚本或模型工作流中使用的派生输出参数。

    转换要素中的“变换链接和 RMS 误差”部分提供了有关残差和 RMSE 计算的详细信息。 可接受的 RMSE 值由您根据所掌握的输入要素及控制点的定位精度相关知识确定。 如果 RMSE 值过高,您需要查看残差,并放弃或替换残差过高的链接。

参数

标注说明数据类型
输入要素

其坐标要进行变换的输入要素。 可以为点、线、面或注记。

Feature Layer
输入链接要素

链接要进行变换的已知控制点的输入链接要素。

Feature Layer
方法
(可选)

指定用于转换输入要素坐标的变换方法。

  • 仿射变换仿射变换至少需要三个变换链接。 这是默认设置。
  • 投影变换射影变换至少需要四个变换链接。
  • 相似变换相似变换至少需要两个变换链接。
String
输出链接表
(可选)

包含输入链接及其残差的输出表。

Table

派生输出

标注说明数据类型
RMSE

报告均方根误差 (RMSE) 值。

Double
更新后的输入要素

更新后的输入要素。

Feature Layer

arcpy.edit.TransformFeatures(in_features, in_link_features, {method}, {out_link_table})
名称说明数据类型
in_features

其坐标要进行变换的输入要素。 可以为点、线、面或注记。

Feature Layer
in_link_features

链接要进行变换的已知控制点的输入链接要素。

Feature Layer
method
(可选)

指定用于转换输入要素坐标的变换方法。

  • AFFINE仿射变换至少需要三个变换链接。 这是默认设置。
  • PROJECTIVE射影变换至少需要四个变换链接。
  • SIMILARITY相似变换至少需要两个变换链接。
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 geoprocessing environments
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.CopyFeatures_management(features, in_data + "_links")

    return result.getOutput(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")
    
    try:
        arcpy.edit.TransformFeatures(r"C:\data\Tutorial.gdb\Parcels_copy", tf_link_features)
        print(arcpy.GetMessages())
        
    except arcpy.ExecuteError as aex:
        print(arcpy.GetMessages(2))

    except Exception as ex:
        print(ex.args[0])

许可信息

  • Basic: 否
  • Standard: 否
  • Advanced: 是

相关主题