描述
根据已知相应控制点之间的变换链接,通过缩放、平移及旋转方式将输入要素的坐标从一个位置转换到另一个位置。
使用方法
-
输入要素可以是点、线、面或栅格。
-
输入链接要素为代表已知相应控制点间变换链接的线。链接的起点为源控制点位置,链接的端点为相应目标控制点位置。
-
变换操作可在直角或平面坐标系中执行。最好选择投影坐标系 (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 值过高,您需要查看残差并放弃或替换具有高残差的链接。
警告:
此工具会修改输入数据。有关详细信息以及避免数据被意外更改的策略,请参阅不创建输出数据集的工具。
注:
所有输入必须处于同一坐标系。
语法
TransformFeatures(in_features, in_link_features, {method}, {out_link_table})
参数 | 说明 | 数据类型 |
in_features | 其坐标要进行变换的输入要素。可以为点、线、面或注记。 | Feature Layer |
in_link_features | 链接要进行变换的已知控制点的输入链接要素。 | Feature Layer |
method (可选) | 指定用于转换输入要素坐标的变换方法。
| String |
out_link_table (可选) | 输出表中包含输入链接及其残差。 | Table |
派生输出
名称 | 说明 | 数据类型 |
out_rmse | 报告均方根误差 (RMSE) 值。 | 双精度型 |
out_feature_class | 更新后的输入要素。 | 要素图层 |
代码示例
以下 Python 窗口脚本演示了如何在即时模式下使用 TransformFeatures 函数。
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.TransformFeatures_edit("source_Roads.shp","control_Links.shp",
"AFFINE")
以下独立脚本演示了如何在脚本环境中应用 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: 是