投影 (数据管理)

摘要

将空间数据从一种坐标系投影到另一种坐标系。

使用情况

  • 如果输入要素类或数据集具有“未知”或未指定的坐标系,请使用输入坐标系参数指定一个坐标系。 此参数用于指定数据的坐标系,而无需修改输入数据。 可以使用定义投影工具永久性地为该数据集指定一个坐标系。

  • 此工具的输入不能是 Coverage、VPF 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 基准面。
      提示:

      变换是双向的。 例如,如果将数据从 WGS84 转换为 NAD 1927,则可以选择 NAD_1927_to_WGS_1984_3 变换,该工具将正确应用此变换。

    • 有关变换及其使用区域的列表,请参阅知识库文章:操作方法:在基准面之间投影时选择正确的地理(基准面)变换

  • 当对以下列出的复杂数据类型进行投影时,必须对生成的数据执行特定操作:

    • 包含网络数据集的要素数据集:必须重新构建网络数据集。
    • 包含拓扑的要素数据集:应再次验证拓扑

  • 如果输入参与关系类(就像要素关联的注记一样),则关系类将被传送到输出。 例外情况是参加独立表。

  • 根据输入要素的坐标和输出坐标系的视界(有效范围),对其进行投影时,多点、线和面将被裁剪或分割为多个部分。 完全位于视野外的要素将被写入到输出中(形状为空)。 可使用修复几何工具将其删除。

  • 建议在执行分析之前将工程的所有输入投影到同一坐标系。 当所有输入都在同一坐标系中时,您需要避免动态投影数据可能导致的性能和功能性问题。

  • 在极少数情况下,对要素几何进行投影可能会导致要素以无效的方式进行变换。 使用检查几何工具来检测无效几何,并使用修复几何工具来修复一切几何问题。

  • 无法独立投影参与几何网络的要素类 - 整个要素数据集包含必须进行投影的网络。

  • 多种地理处理工具支持输出坐标系环境设置,并且在多个工作流中,可以使用此环境设置来代替投影工具。 例如,联合工具支持输出坐标系环境设置,这意味着可以将所有位于不同坐标系的要素类联合在一起,并将输出写入不同的坐标系的要素类中。

    了解有关地理处理环境的详细信息

  • 该工具支持图层上的选择和定义查询。 如果定义选择或查询,则将仅投影图层中的所选要素。

  • 当将要素数据集中的要素类用作输入时,无法将输出写入同一要素数据集。 这是因为要素数据集中的要素类均必须具有相同的坐标系。 在这种情况下,会将输出要素类写入包含要素数据集的地理数据库。

  • 如果选中保留形状参数,则工具将创建相应要素,这些要素可精确表示其投影位置。 在进行投影时,该工具将向要素添加额外的折点。 这些额外的折点将保留要素的投影形状。 当线或面具有较少的折点时,此参数将非常有用。 如果未选中此参数,则将对现有折点进行投影,并且可能无法在新投影中精确定位输出要素。

    最大偏移偏差参数用于确定要添加的折点数量。 该参数值用于定义投影要素可以偏离其确切投影位置的最大距离。 如果该值较小,则工具将添加更多折点。 请使用适合您需要的值。 例如,如果输出用于常规小比例制图显示,则可能需要选择较大偏差。 如果输出用于大比例、小区域分析,则偏差可能越小越好。

  • 要执行垂直变换,请选中垂直参数。 默认情况下,垂直参数处于非活动状态,并且仅在输入坐标系和输出坐标系都具有垂直坐标系 (VCS) 且输入要素类坐标具有 z 值时才变为活动状态。 此外,必须在系统上安装附加数据(坐标系数据)安装程序。

    选择输出坐标系后,您将能够选择地理坐标系或投影坐标系以及 VCS。 如果输入和输出 VCS 不同,则可使用相应的垂直变换,也可选择地理(基准面)变换。 如果需要应用与变换定义方向相反的变换,请选择名称前带有波形符 (~) 的条目。

  • 可以通过投影包含宗地结构的要素数据集来投影宗地结构。 无法单独投影由宗地结构控制的单个要素类。 将更新线性单位、面积单位和点坐标,以匹配目标空间参考的单位和坐标。

参数

标注说明数据类型
输入数据集或要素类

要投影的要素类、要素图层、要素数据集、场景图层、场景图层包或 OGC Geopackage。

Feature Layer; Feature Dataset; Scene Layer; Building Scene Layer; File
输出数据集或要素类

将要写入结果的输出数据集。

Feature Class; Feature Dataset; File
输出坐标系

输入数据待投影到的目标坐标系。

Coordinate System
地理(坐标)变换
(可选)

此方法可用于在两个地理坐标系或基准面之间对数据进行转换。如果输入和输出坐标系具有不同的基准面,则可能需要此可选参数。

提示:

该工具自动选择默认变换。 您可从下拉列表中选择其他变换。 变换是双向的。 例如,如果将数据从 WGS84 转换为 NAD 1927,则可以选择 NAD_1927_to_WGS_1984_3 变换,该工具将正确应用此变换。

参数会提供一个包含有效变换方法的下拉列表。 有关如何选择一个或多个适当变换的其他信息,请参阅使用提示。

String
输入坐标系
(可选)

输入要素类或数据集的坐标系。 当输入具有未知或未指定的坐标系时,此参数将变为活动参数。 这样,无需修改输入数据就可以指定数据的坐标系(当输入数据为只读格式时,可能无法修改)。

Coordinate System
保留形状
(可选)

指定是否向输出线或面添加折点,以便其投影形状更加准确。

  • 未选中 - 不会向输出线或面添加额外折点。 这是默认设置。
  • 选中 - 根据需要向输出线或面添加额外折点,以便其投影形状更加准确。

Boolean
最大偏移偏差
(可选)

当选中保留形状参数时,投影线或面可从其准确投影位置偏移的距离。 默认为输出数据集空间参考 x,y 容差的 100 倍。

Linear Unit
垂直
(可选)

指定是否将应用垂直变换。

此参数仅在输入坐标系和输出坐标系都具有垂直坐标系且输入要素类坐标具有 Z 值时才会处于活动状态。 此外,许多垂直变换需要附加数据文件,而这些文件必须通过 ArcGIS Coordinate Systems Data 安装包进行安装。

当选中垂直时,地理变换参数可以包括椭圆体变换和垂直基准面之间的变换。 例如,~NAD_1983_To_NAVD88_CONUS_GEOID12B_Height + NAD_1983_To_WGS_1984_1 可将在 NAD 1983 基准面(具有 NAVD 1988 高度)上定义的几何折点变换为 WGS84 椭圆体(具有表示椭圆体高度的 Z 值)上的折点。 波形符 (~) 表示变换的反转方向。

此参数与保留形状参数不兼容。

  • 未选中 - 将不会应用垂直变换。 几何坐标的 Z 值将被忽略,并且 z 值将不会进行修改。 这是默认设置。
  • 选中 - 将应用地理变换参数中指定的变换。 将变换几何坐标的 x、y 和 z 值。

Boolean

arcpy.management.Project(in_dataset, out_dataset, out_coor_system, {transform_method}, {in_coor_system}, {preserve_shape}, {max_deviation}, {vertical})
名称说明数据类型
in_dataset

要投影的要素类、要素图层、要素数据集、场景图层、场景图层包或 OGC Geopackage。

Feature Layer; Feature Dataset; Scene Layer; Building Scene Layer; File
out_dataset

将要写入结果的输出数据集。

Feature Class; Feature Dataset; File
out_coor_system

有效值可以是 SpatialReference 对象、扩展名为 .prj 的文件或坐标系的字符串表达形式。

Coordinate System
transform_method
[transform_method,...]
(可选)

此方法可用于在两个地理坐标系或基准面之间对数据进行转换。如果输入和输出坐标系具有不同的基准面,则可能需要此可选参数。

要获取有效变换列表,请使用 arcpy.ListTransformations 方法。 最合适的变换通常是返回列表中的第一个。 该列表按数据与变换使用区域的重叠数量进行排序。 如果两个或多个变换与数据的重叠数量相同,则变换精度值将用作辅助排序参数。

提示:

变换是双向的。 例如,如果将数据从 WGS84 转换为 NAD 1927,则可以选择 NAD_1927_to_WGS_1984_3 变换,该工具将正确应用此变换。 如果未提供变换,则将使用默认变换。 该默认变换适用于常规制图应用程序,但是可能并不适用于对位置精度要求高的应用程序。

String
in_coor_system
(可选)

输入要素类或数据集的坐标系。 当输入具有未知或未指定的坐标系时,可在不修改输入数据的情况下指定数据的坐标系(不适用于输入为只读格式的情况)。

Coordinate System
preserve_shape
(可选)

指定是否向输出线或面添加折点,以便其投影形状更加准确。

  • NO_PRESERVE_SHAPE不会向输出线或面添加额外折点。 这是默认设置。
  • PRESERVE_SHAPE根据需要向输出线或面添加额外折点,以便其投影形状更加准确。
Boolean
max_deviation
(可选)

preserve_shape 参数设置为 PRESERVE_SHAPE 时,投影线或面可从其准确投影位置偏移的距离。 默认为输出数据集空间参考 x,y 容差的 100 倍。

Linear Unit
vertical
(可选)

指定是否将应用垂直变换。

此参数仅在输入坐标系和输出坐标系都具有垂直坐标系且输入要素类坐标具有 Z 值时才会处于启用状态。 此外,许多垂直变换需要附加数据文件,而这些文件必须通过 ArcGIS Coordinate Systems Data 安装包进行安装。

此参数与 preserve_shape 参数不兼容。

  • NO_VERTICAL将不会应用垂直变换。 几何坐标的 Z 值将被忽略,并且 z 值将不会进行修改。 这是默认设置。
  • VERTICAL将应用 transform_method 参数中所指定的变换。 将变换几何坐标的 x、y 和 z 值。
Boolean

代码示例

Project 示例 1(Python 窗口)

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

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)
Project 示例 2(独立脚本)

以下独立脚本演示了如何在独立脚本中使用 Project 函数。

# 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])