变换要素 (编辑)

描述

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

使用方法

    警告:

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

    注:

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

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

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

  • 变换操作可在直角或平面坐标系中执行。最好选择投影坐标系 (PCS)。如果使用带有纬度和经度值的地理坐标系 (GCS),则可能会导致意外变形或计算错误。

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

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

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

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

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

语法

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) 值。

双精度型
out_feature_class

更新后的输入要素。

要素图层

代码示例

TransformFeatures 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 TransformFeatures 函数。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.TransformFeatures_edit("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.CopyFeatures_management(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.TransformFeatures_edit(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: 是

相关主题