摘要
根据已知相应控制点之间的变换链接通过缩放、平移和旋转将输入要素的坐标从一个位置转换到另一个位置。
用法
-
输入要素可以是点、线或面。
-
输入链接要素是代表已知相应控制点之间的变换链接的线。链接的起点在源控制点位置,链接的终点在相应的目标控制点位置。
-
变换可在直角坐标系或平面坐标系中使用。强烈建议使用投影坐标系 (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 值将写出到处理消息中。它还是可在脚本或模型工作流中使用的派生输出参数。
关于空间校正变换中的“了解残差和均方根”部分提供了有关残差和 RMSE 计算的详细信息。您可以根据对输入要素位置精度以及控制点的了解来确定可接受的 RMSE 值。如果 RMSE 值过高,您需要查看残差,并放弃或替换残差过高的链接。
语法
TransformFeatures_edit (in_features, in_link_features, {method}, {out_link_table})
参数 | 说明 | 数据类型 |
in_features | 将要进行坐标转换的输入要素。 | Feature Layer |
in_link_features | 链接变换的已知控制点的输入链接要素。 | Feature Layer |
method (可选) | 用于转换输入要素坐标的变换方法。
| String |
out_link_table (可选) | 包含输入链接及其残差的输出表。 | Table |
代码示例
TransformFeatures 示例 1(Python 窗口)
以下 Python 窗口脚本演示了如何在即时模式下使用 TransformFeatures 函数。
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.TransformFeatures_edit("source_Roads.shp","control_Links.shp",
"AFFINE")
TransformFeatures 示例 2(独立 Python 脚本)
下面的独立脚本演示了如何在脚本环境中应用 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])
环境
许可信息
- ArcGIS Desktop Basic: 否
- ArcGIS Desktop Standard: 否
- ArcGIS Desktop Advanced: 是