替换 Web 图层 (服务器)

摘要

用于将门户中某一 web 图层的内容替换为其他 web 图层的内容。

使用情况

  • 目标图层为待替换的 web 图层。 更新图层为用以替换的 web 图层。 目标图层和更新图层可以是以下类型的 web 图层:

    • 从矢量切片包发的布矢量切片图层
    • 切片图层
    • 从以下源之一发布的场景图层:
      • 在 ArcGIS Online 或 ArcGIS Enterprise 门户上托管的场景图层包
      • 文件夹或云数据存储中引用的场景缓存

      无法替换体素场景图层。

  • 要替换 ArcGIS Enterprise 门户上的矢量切片图层,当前使用的版本必须为 10.6 或更高版本。 要替换切片图层,当前使用的版本必须为 10.8 或更高版本。 要替换场景图层,当前使用的版本必须为 10.8.1 或更高版本。

  • 您的 ArcGIS AllSource 活动门户必须为托管目标图层和更新图层的门户。 您必须使用具有目标图层和更新图层的帐户登录 ArcGIS AllSource。

  • 目标图层和更新图层的类型必须相同。 例如,不能将矢量切片图层替换为切片图层。

  • 目标图层和更新图层的场景图层类型必须匹配。 例如,不能将建筑物场景图层替换为 3D 对象场景图层。

  • 要替换 Web 场景图层,目标图层和更新图层必须均从同一源进行发布。 例如,无法将从场景图层包发布的 Web 场景图层替换为从引用的场景缓存中发布的 Web 场景图层。

  • 要替换从引用的场景缓存发布的 Web 场景图层,目标图层和更新图层的场景服务必须存在于同一服务器和服务器文件夹中。

  • 更新目标图层时,图层中的内容也将被替换。 目标图层的项目 ID 和服务 URL 不会更改。

  • 被替换的 web 图层不会被覆盖。 它将以新名称存档于您的门户中。 默认情况下,存档图层名称为 <layer name>_archive_<timestamp>。 可以指定其他名称,但它必须是门户中的唯一 Web 图层名称。

  • 默认情况下,归档图层使用更新图层的项目 ID。 可以为归档图层指定新的项目 ID。

  • 可以使用更新图层的项目信息替换目标图层的项目信息。 如果您替换项目信息,则摘要、描述、标签和缩略图也将被替换。 而制作者名单(属性)和使用条款等其他信息则不会被替换。

参数

标注说明数据类型
目标图层

要替换的 web 图层。 提供图层或目录路径,或提供以下项目 ID 或服务 URL:

  • 从矢量切片包发的布矢量切片图层
  • 切片图层
  • 从以下源之一发布的场景图层:
    • 场景图层包
    • 文件夹或云数据存储中引用的场景缓存

Vector Tile Layer; Internet Tiled Layer; Scene Layer
存档图层名称

用于存档图层的唯一名称。 替换的 web 图层将作为存档图层保留在门户中。

String
更新图层

替换 web 图层。 提供图层或目录路径,或提供以下项目 ID 或服务 URL:

  • 从矢量切片包发的布矢量切片图层
  • 切片图层
  • 从以下源之一发布的场景图层:
    • 场景图层包
    • 文件夹或云数据存储中引用的场景缓存

Vector Tile Layer; Internet Tiled Layer; Scene Layer
替换项目信息
(可选)

指定是否替换目标图层的项目信息(缩略图、摘要、描述和标记)。 无论使用哪种选项,项目的署名(归属)、使用条款和创建信息都不会被替换。

  • 未选中 - 更新图层时,将不会替换目标图层的项目信息。 这是默认设置。
  • 选中 - 目标图层的项目信息将替换为更新图层的项目信息。
Boolean
为归档图层创建新项目
(可选)

指定是否为归档图层创建项目。 此参数适用于 ArcGIS Online 和 ArcGIS Enterprise 10.8 或更高版本中的门户。

  • 未选中 - 将更新图层的项目 ID 用于归档图层。 这是矢量切片图层和切片图层的默认设置。
  • 选中 - 将为归档图层创建项目 ID。 这是场景图层的默认值。
Boolean

派生输出

标注说明数据类型
更新的目标图层

更新的 web 图层的 URL。

String

arcpy.management.ReplaceWebLayer(target_layer, archive_layer_name, update_layer, {replace_item_info}, {create_new_item})
名称说明数据类型
target_layer

要替换的 web 图层。 提供图层或目录路径,或提供以下项目 ID 或服务 URL:

  • 从矢量切片包发的布矢量切片图层
  • 切片图层
  • 从以下源之一发布的场景图层:
    • 场景图层包
    • 文件夹或云数据存储中引用的场景缓存

Vector Tile Layer; Internet Tiled Layer; Scene Layer
archive_layer_name

用于存档图层的唯一名称。 替换的 web 图层将作为存档图层保留在门户中。

String
update_layer

替换 web 图层。 提供图层或目录路径,或提供以下项目 ID 或服务 URL:

  • 从矢量切片包发的布矢量切片图层
  • 切片图层
  • 从以下源之一发布的场景图层:
    • 场景图层包
    • 文件夹或云数据存储中引用的场景缓存

Vector Tile Layer; Internet Tiled Layer; Scene Layer
replace_item_info
(可选)

指定是否替换目标图层的项目信息(缩略图、摘要、描述和标记)。 无论使用哪种选项,项目的署名(归属)、使用条款和创建信息都不会被替换。

  • KEEP—更新图层时,将不会替换目标图层的项目信息。 这是默认设置。
  • REPLACE—目标图层的项目信息将替换为更新图层的项目信息。
Boolean
create_new_item
(可选)

指定是否为归档图层创建项目。 此参数适用于 ArcGIS Online 和 ArcGIS Enterprise 10.8 或更高版本中的门户。

  • TRUE—将为归档图层创建项目 ID。 这是场景图层的默认值。
  • FALSE—将更新图层的项目 ID 用于归档图层。 这是矢量切片图层和切片图层的默认设置。
Boolean

派生输出

名称说明数据类型
updated_target_layer

更新的 web 图层的 URL。

String

代码示例

ReplaceWebLayer 示例 1(独立脚本)

以下脚本将使用输入图层的项目 ID 替换 web 图层。

import arcpy
import time

# Set local variables
targetLayerID = "42994b1a3e63425aa02bcfa1200683ae"
archiveLayerName = "ReplaceWebLayerExample_archive_" + time.strftime("%Y%m%d")
updateLayerID = "9e1d80c874e040fc88ad06b0cfa01381"
replaceItemInfo = "REPLACE"
createNewItem = "TRUE"

# Run Replace Web Layer
arcpy.server.ReplaceWebLayer(targetLayerID, archiveLayerName, updateLayerID, 
                             replaceItemInfo, createNewItem)

print("Successfully replaced web layer.")
ReplaceWebLayer 示例 2(独立脚本)

以下脚本将使用输入图层的服务 URL 替换 ArcGIS Enterprise 中的 web 图层。

import arcpy
import time

# Set local variables
targetLayer = "https://webadaptorhost.domain.com/webadaptorname/rest/services/Hosted/targetServiceName/VectorTileServer"
archiveLayerName = "targetServiceName_archive_" + time.strftime("%Y%m%d")
updateLayer = "https://webadaptorhost.domain.com/webadaptorname/rest/services/Hosted/updateServiceName/VectorTileServer"

# Run Replace Web Layer
arcpy.server.ReplaceWebLayer(targetLayer, archiveLayerName, updateLayer)

print("Successfully replaced web layer.")
ReplaceWebLayer 示例 3(独立脚本)

以下脚本发布并替换矢量切片图层。

该脚本通过调用地图 CreateVectorTilePackage 函数来创建矢量切片包。 接下来,该 SharePackage 函数将矢量切片包上传到 ArcGIS Online 或 ArcGIS Enterprise 并将其发布为矢量切片图层。 最后,该 ReplaceWebLayer 函数使用项目 ID 将门户中现有 Web 图层的内容替换为新 Web 图层的内容。 被替换的矢量切片图层以新名称存档在门户中。 门户信息可从 SignInToPortal 函数中获得。

import arcpy
import os
import json

# Sign in to portal
arcpy.SignInToPortal("https://www.arcgis.com", "MyUserName", "MyPassword")

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]

# Set output file names
outdir = r"C:\Project\Output"
service_name = "VectorTileLayerExample"
package_filename = service_name + ".vtpk"
package_output_filename = os.path.join(outdir, package_filename)

# Create vector tile package
arcpy.management.CreateVectorTilePackage(m, package_output_filename, "ONLINE")

# Upload and publish vector tile package
result = arcpy.management.SharePackage(package_output_filename, publish_web_layer=True)

print("Finish uploading and publishing package")

# Get the item ID or service URL of the vector tile layer
jobresult = result[1]
result = json.loads(jobresult)

# Publish results JSON response example: {"publishStatus":"<status>","publishMessage":"<message>","publishResult":{"type":"Vector Tile Service","serviceurl":"<service_url>","size":1913146,"jobId":"<ID>","serviceItemId":"<ItemID>"}}
itemID = str(result.get('publishResult', {}).get('serviceItemId'))

print("Start Replacing")

# Set local variables for Replace Web Layer workflow
# target_layer/update_layer can be item ID or service URL; example below uses item ID
target_layer = "808ecf02f39441d69f245c0cb261134b"
archive_layer_name = "ReplaceWebLayerExample_archive"
update_layer = itemID
replace_item_info = "REPLACE"
create_new_item = "TRUE"

# Run Replace Web Layer
arcpy.server.ReplaceWebLayer(target_layer, archive_layer_name, update_layer,
                             replace_item_info, create_new_item)

print("Finished Replacing")