arcpy.mp 脚本环境提供了多种方法使得您无需打开工程即可自动进行更改。您可针对各个图层或表逐一更新数据源,也可一次更新同一工作空间中的所有图层或表。
以下成员用于更改数据源工作流:
- Table 类。
- Table 类。
使用 updateConnectionProperties 函数
.sde) 文件的路径。下面提供了上述内容的一个示例。
.sde 文件的路径。
.gdb 文件的路径。
False。
False,则将数据源设置到该位置,而不考虑其现有位置。这对尚未创建数据时需要更新数据源的情况十分有用。在上述情况下,数据在关联的地图中将显示为已损坏。
以下是一些示例:
- 完整文件路径:
以下脚本将更改工程中所有图层和表的文件地理数据库数据源的完整路径。在本示例中,对文件夹进行了重命名,并将所有矢量数据移动到了这一新位置。
import arcpy aprx = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite.aprx') aprx.updateConnectionProperties(r'C:\Projects\YosemiteNP\Data\Yosemite.gdb', r'C:\Projects\YosemiteNP\Vector_Data\Yosemite.gdb') aprx.save() del aprx - 部分路径:
以下示例与上述示例非常相似,但该示例将使用部分路径字符串替换数据源。请确保使用部分字符串时,不会在路径中多次发生。您可能不会获得期望的结果。
import arcpy aprx = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite.aprx') aprx.updateConnectionProperties('Data','Vector_Data') aprx.save() del aprx - 个人地理数据库到文件地理数据库:
以下示例使用地图中所有图层和表的部分路径将个人地理数据库连接替换为文件地理数据库连接。
import arcpy aprx = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite.aprx') m = aprx.ListMaps("Yose*")[0] m.updateConnectionProperties(r'Background.mdb', 'Background_fGDB.gdb') aprx.save() del aprx - .sde) 文件:
.sde) 文件的路径。
import arcpy aprx = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite.aprx') aprx.updateConnectionProperties(r'C:\Projects\YosemiteNP\Vector_Data\Yosemite.gdb', r'C:\Projects\YosemiteNP\DBConnections\Server.sde') aprx.save() del aprx - 使用其他图层的连接属性:
以下示例参考地图中的图层,并使用连接属性更新尚未更新新数据源的图层文件中相同图层的连接属性。
import arcpy aprx = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite.aprx') m = aprx.listMaps('Yose*')[0] lyr = m.listLayers('Ranger Stations')[0] lyrFile = arcpy.mp.LayerFile(r'C:\Projects\YosemiteNP\LYRXs\Yosemite\OperationalLayers.lyrx') for l in lyrFile.listLayers(): if l.name == 'Ranger Stations': l.updateConnectionProperties(l.connectionProperties, lyr.connectionProperties) lyrFile.save() del aprx, lyrFile - 使用部分字典:
PointsOfInterest。
import arcpy aprx = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite.aprx') m = aprx.listMaps('Yose*')[0] m.updateConnectionProperties({'dataset': 'PtsInterest'}, {'dataset': 'PointsOfInterest'}) aprx.save() del aprx