摘要
将空间数据从一种坐标系投影到另一种坐标系。
用法
如果输入的要素类或数据集具有“未知”或未指定的坐标系,可以使用输入坐标系参数指定输入数据集的坐标系。这样,无需修改输入数据就可以指定数据的坐标系(当输入数据为只读格式时,可能无法修改)。也可以使用定义投影工具永久性地为该数据集指定一个坐标系。
所有类型的要素类(地理数据库要素类、coverage 要素类、SDC 要素类和 shapefile)、地理数据库中的要素数据集和 ArcGIS 应用程序(ArcMap、ArcScene 和 ArcGlobe)中的要素图层均为有效输入。
此工具的输入不能是 Coverage、VPF Coverage、栅格数据集和栅格目录。使用投影栅格工具可以对栅格数据集进行投影。
要对 Coverage 进行投影,请使用 Coverage 工具箱中的投影工具。
该工具的地理变换参数是可选参数。当不需要地理变换或基准面变换时,参数中不会出现下拉列表,并且参数为空。当需要变换时,将会基于输入基准面和输出基准面生成一个下拉列表,并会选择一个默认变换。
- 例如,从 GCS_North_American_1983 投影到 NAD_1983_UTM_Zone_12N 时不需要地理变换,因为输入坐标系和输出坐标系都具有 NAD_1983 基准面。但是,从 GCS_North_American_1983 投影到 WGS_1984_UTM_Zone_12N 时则需要地理变换,因为输入坐标系使用的是 NAD_1983 基准面,而输出坐标系使用的是 WGS_1984 基准面。
- 有关变换及其使用区域的列表,请参阅下列知识库文章:21327(Esri 知识库文章 #21327)。
不支持 in_memory 工作空间作为编写输出数据集的位置。
当对以下列出的复杂数据类型进行投影时,需要对生成的数据执行特定操作:
- 包含网络数据集的要素数据集:必须重新构建网络数据集。
- 包含拓扑的要素数据集:应重新验证拓扑。
如果输入参与关系类(就像要素关联的注记一样),则关系类将被传送到输出。此规则的例外情况与参加独立表相关。
根据输入要素的坐标和输出坐标系的视界(有效范围),对其进行投影时,多点、线和面将被裁剪或分割为多个部分。完全位于视野外的要素将被写入到输出中(形状为空)。可使用修复几何工具将其删除。
无法独立投影参与几何网络的要素类 - 整个要素数据集包含需要投影的网络。
多种地理处理工具支持输出坐标系环境设置,并且在多个工作流中可以使用此环境设置来代替投影工具的环境设置。例如,联合工具支持输出坐标系环境设置,这意味着可以将所有位于不同坐标系的要素类联合在一起,并将联合的输出写入完全不同的坐标系的要素类中。
该工具将忽略在层上选择和定义查询 - 将对数据集中层所引用的所有要素进行投影。如果您仅想投影选定要素,可考虑使用复制要素工具创建一个临时数据集,该数据集仅包含选定要素,然后将该中间数据集用作投影工具的输入。
当将要素数据集内的要素类用作输入时,无法将输出写入同一要素数据集。这是因为要素数据集内的要素类均必须具有相同的坐标系。在这种情况下,会将输出要素类写入包含要素数据集的地理数据库。
选中保留形状参数后将创建输出要素,该要素可更加准确地表示其真实投影位置。线或面边界为数字化长直线且折点很少时,保留形状非常有用。如果并未选中保留形状,那么将投影输入线或面边界的现有折点,这可能会导致要素在新投影中的位置不准确。选中保留形状(Python 中的preserve_shape = "PRESERVE_SHAPE")时,会在投影前将额外的折点添加到要素中。这些额外的折点将保留要素的投影形状。最大偏移偏差参数控制要添加的额外折点数;该值为工具所计算的投影要素可从其准确投影位置偏移的最大距离。值越小,添加的折点越多。根据需要选择值。例如,您的投影输出是针对常规小比例制图显示,则可选择较大偏差。反之,如果您的投影输出用于大比例、小区域分析,则可能需要较小偏差。
要执行垂直变换,请选中对话框中的可选垂直参数。默认情况下,垂直参数处于禁用状态,并且仅在输入坐标系和输出坐标系都具有垂直坐标且输入要素类坐标具有 Z 值时才会处于启用状态。此外,系统需要安装附加数据(坐标系数据)安装程序。
选择输出坐标系后,您将能够选择地理坐标系(或投影坐标系)和垂直坐标系 (VCS)。如果输入和输出垂直坐标系不同,将使用查看表 hvtdefaults.json 查找相应的垂直变换,也可以选择地理(基准面)变换。如果需要应用与变换定义方向相反的变换,请选择名称前带有波形符 (~) 的条目。
语法
Project_management (in_dataset, out_dataset, out_coor_system, {transform_method}, {in_coor_system}, {preserve_shape}, {max_deviation}, {vertical})
参数 | 说明 | 数据类型 |
in_dataset | 要投影的要素类、要素图层或要素数据集。 | Feature Layer; Feature Dataset |
out_dataset | 将要写入结果的输出数据集。 | Feature Class; Feature Dataset |
out_coor_system | 有效值是空间参考对象、扩展名为 .prj 的文件或坐标系的字符串表达形式。 | Coordinate System |
transform_method (可选) | 此方法可用于在两个地理坐标系或基准面之间对数据进行转换。如果输入和输出坐标系具有不同的基准面,则可能需要此可选参数。 | String |
in_coor_system (可选) | 输入要素类或数据集的坐标系。当输入具有未知或未指定的坐标系时,可在不修改输入数据的情况下指定数据的坐标系(不适用于输入为只读格式的情况)。 | Coordinate System |
preserve_shape (可选) | 向输出线或面添加折点,以便其投影形状更加准确。
| Boolean |
max_deviation (可选) | 确定 preserve_shape = "PRESERVE_SHAPE" 时投影线或面可从其准确投影位置偏移的距离。默认为输出数据集空间参考 XY 容差的 100 倍。 | Linear unit |
vertical (可选) | 此选项仅在输入坐标系和输出坐标系都具有垂直坐标系且输入要素类坐标具有 Z 值时才会被应用。此外,许多垂直变换需要附加数据文件,而这些文件必须通过 ArcGIS Coordinate Systems Data 安装包安装到计算机上。 此选项与“保留形状”参数不兼容。
| Boolean |
代码示例
投影示例 1(Python 窗口)
以下 Python 窗口脚本演示了如何在即时模式下使用“投影”函数。
import arcpy
# input data is in NAD 1983 UTM Zone 11N coordinate system
input_features = r"C:/data/Redlands.shp"
# output data
output_feature_class = r"C:/data/Redlands_Project.shp"
# create a spatial reference object for the output coordinate system
out_coordinate_system = arcpy.SpatialReference('NAD 1983 StatePlane California V FIPS 0405 (US Feet)')
# run the tool
arcpy.Project_management(input_features, output_feature_class, out_coordinate_system)
投影示例 2(独立脚本)
以下独立脚本演示了如何在独立脚本中使用“投影”。
# Name: Project_Example2.py
# Description: Project all feature classes in a geodatabase
# Requirements: os module
# Import system modules
import arcpy
import os
# Set environment settings
arcpy.env.workspace = "C:/data/Redlands.gdb"
arcpy.env.overwriteOutput = True
# Set local variables
outWorkspace = "C:/data/Redlands_utm11.gdb"
try:
# Use ListFeatureClasses to generate a list of inputs
for infc in arcpy.ListFeatureClasses():
# Determine if the input has a defined coordinate system, can't project it if it does not
dsc = arcpy.Describe(infc)
if dsc.spatialReference.Name == "Unknown":
print ('skipped this fc due to undefined coordinate system: ' + infc)
else:
# Determine the new output feature class path and name
outfc = os.path.join(outWorkspace, infc)
# Set output coordinate system
outCS = arcpy.SpatialReference('NAD 1983 UTM Zone 11N')
# run project tool
arcpy.Project_management(infc, outfc, outCS)
# check messages
print(arcpy.GetMessages())
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
except Exception as ex:
print(ex.args[0])
环境
许可信息
- ArcGIS Desktop Basic: 是
- ArcGIS Desktop Standard: 是
- ArcGIS Desktop Advanced: 是