描述
根据要用于空间数据变换的已知控制点之间的输入链接坐标来计算残差和均方根误差 (RMSE)。
使用方法
与转换要素工具相比,优先使用此工具来确定控制点是否适合预期变换,尤其是在转换大量要素之前。
输入链接要素是代表相应控制点之间的变换链接的线。
-
变换操作可在直角或平面坐标系中执行。最好选择投影坐标系 (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.CalculateTransformationErrors(in_link_features, {out_link_table}, {method})
参数 | 说明 | 数据类型 |
in_link_features | 空间变换的已知控制点的输入链接要素。 | Feature Layer |
out_link_table (可选) | 包含输入链接要素 ID 及其残差的输出表。输入链接残差将写入包含以下字段的指定输出表格:
| Table |
method (可选) | 用于转换输入要素坐标的变换方法。
| String |
派生输出
名称 | 说明 | 数据类型 |
out_rmse | 报告均方根误差 (RMSE) 值。 | 双精度型 |
代码示例
以下 Python 窗口脚本演示了如何在即时模式下使用 CalculateTransformationErrors 函数。
import arcpy
arcpy.env.workspace = "C:/data/Countries.gdb"
arcpy.CalculateTransformationErrors_edit("control_Links", "output_Table", "AFFINE")
下面的独立脚本演示了如何在脚本环境中应用 CalculateTransformationErrors 函数。
import arcpy
import os
# all input data are in country.gdb and output will also go to this gdb
arcpy.env.workspace = os.path.join(os.getcwd(), "country.gdb")
try:
in_links_feats = "link_features"
out_link_table = "output_table"
# transformation method
method = "SIMILARITY"
result = arcpy.CalculateTransformationErrors_edit(in_links_feats, out_link_table, method)
# get the transformation error
error = float(result.getOutput(1))
# if error is less than 12.234 then run Transform Features
if error < 20.0:
# make a copy of the input features
arcpy.CopyFeatures_management(in_links_feats, "in_links_copy")
arcpy.TransformFeatures_edit("in_links_copy", in_links_feats, method, "out_link_table")
else:
print("Transformation error {} is too high".format(error))
except arcpy.ExecuteError as aex:
print(arcpy.GetMessages(2))
except Exception as ex:
print(ex.args[0])
许可信息
- Basic: 否
- Standard: 否
- Advanced: 是