MapImageSharingDraft

摘要

MapImageSharingDraft 类允许您为地图图像图层创建服务定义草稿文件 (.sddraft),该文件将向 ArcGIS Enterprise 复制所有数据或引用注册数据。

说明

要创建 MapImageSharingDraft 对象,需使用 Map 对象的 getWebLayerSharingDraft 方法并将 service_type 参数设置为 MAP_IMAGE。 随后即可通过设置服务级别属性和元数据属性来配置 MapImageSharingDraft 对象。 可以使用 federatedServerUrl 属性以指定将 web 图层发布到的联合服务器。

您也可以通过修改 .sddraft 文件设置 Web 图层属性。 如果没有为属性指定值,则会设置默认值。 因此,即使要覆盖具有已配置属性的 Web 图层,也必须设置所需的属性值。

注:

如果未设置元数据属性(creditsdescriptionsummarytagsuseLimitations)或其具有空字符串,则 Web 图层项目将从地图或图层中获取元数据,具体取决于共享的内容。 有关 Web 图层如何获取元数据的详细信息,请参阅 Web 图层元数据

配置 MapImageSharingDraft 对象后,可以使用 exportToSDDraft 方法将其保存到服务定义草稿文件 (.sddraft)。 然后,可以使用过渡服务上传服务定义工具将其过渡并共享到 ArcGIS Enterprise。 有关详细信息,请参阅 arcpy.sharing 简介

代码示例可用于以下用途:

属性

属性说明数据类型
cache.cacheOnDemand
(可读写)

指定未缓存的切片是否将按需(即当客户端应用程序请求时)创建。 默认值为 False

Boolean
cache.configuration
(可读写)

生成地图服务器缓存切片方案工具生成的预定义切片方案 .xml 文件的路径和文件名。

String
cache.exportTiles
(可读写)

指定是否允许客户端下载地图切片以供离线使用。 默认值为 False

Boolean
cache.exportTilesCount
(可读写)

单个请求中可下载的最大切片数量。 仅在属性 cache.exportTiles 设置为 True 时支持此属性。 默认值为 100000。

Integer
cache.useExistingCache
(可读写)

指定是否从现有缓存中提取数据。 仅在属性 enableCache 设置为 True 时支持此属性。 默认值为 False

Boolean
checkUniqueIDAssignment
(可读写)

指定是否分析地图以确认地图属性中的允许向共享 web 图层分配唯一数字 ID 选项是否已启用。 有关详细信息,请参阅分配图层 ID

Boolean
copyDataToServer
(可读写)

指定是否将地图中的数据复制到服务器。 值为 True 时,将复制地图中的所有数据,包括在联合服务器中注册的数据。 值为 False 时,将仅复制未在联合服务器中注册的数据。 服务将引用已在联合服务器中注册的数据。 默认值为 False

Boolean
credits
(可读写)

web 图层制作者名单。

String
description
(可读写)

web 图层的描述。

String
enableCache
(可读写)

指定 Web 图层是否动态绘制或从缓存绘制。 默认值为 False

Boolean
enableDynamicWorkspaces
(可读写)

指定是否允许用户更改 Web 图层的外观或绘制行为。 默认值为 True

Boolean
extension.feature.allowTrueCurvesUpdates
(可读写)

指定是否允许 Web 客户端使用增密几何更新要素的真曲线几何。 仅当启用编辑时才支持此属性。 默认值为 True

Boolean
extension.feature.allowUpdateWithoutMValues
(可读写)

指定是否允许几何在不指定 m 值的情况下更新为启用了 m 值的要素。 默认值为 False

Boolean
extension.feature.featureCapabilities
(可读写)

已启用的功能,以逗号分隔。 支持以下功能:

  • Query
  • Create
  • Update
  • Delete
  • Sync
  • Extract
  • Editing

String
extension.feature.isEnabled
(可读写)

指定是否包含关联要素图层。 默认值为 False

Boolean
extension.feature.onlyAllowTrueCurveUpdatesByTrueCurveClients
(可读写)

指定是否只有支持真曲线的客户端(例如 ArcGIS Pro)才可以更新真曲线几何。 仅当启用编辑时才支持此属性。 默认值为 True

Boolean
extension.feature.zDefault.enable
(可读写)

指定是否允许编辑者通过不允许指定 z 值的客户端添加或更新要素。 默认值为 False

Boolean
extension.feature.zDefault.value
(可读写)

插入或更新要素时将使用的默认 z 值。 仅在属性 zDefault.enable 设置为 True 时支持此属性。 默认值为 0。

Double
extension.kml.isEnabled
(可读写)

指定是否启用 KML 功能。 默认值为 False

Boolean
extension.linearReferencing.isEnabled
(可读写)

指定是否启用线性参考功能。 默认值为 False

Boolean
extension.networkAnalysis.isEnabled
(可读写)

指定是否启用网络分析服务。 默认值为 False

Boolean
extension.ogcFeature.isEnabled
(可读写)

指定是否启用 OGC 要素服务。 默认值为 False

Boolean
extension.topographicProduction.isEnabled
(可读写)

指定是否启用地形生产功能。 默认值为 False

Boolean
extension.validation.isEnabled
(可读写)

指定是否启用验证功能。 默认值为 False

Boolean
extension.versionManagement.isEnabled
(可读写)

指定是否启用版本管理功能。 默认值为 False

Boolean
extension.wcs.isEnabled
(可读写)

指定是否启用 WCS 功能。 默认值为 False

Boolean
extension.wfs.isEnabled
(可读写)

指定是否启用 WFS 服务。 默认值为 False

Boolean
extension.wms.isEnabled
(可读写)

指定是否启用 WMS 服务。 默认值为 False

Boolean
federatedServerUrl
(可读写)

ArcGIS Enterprise 门户联合服务器的 URL。

提示:

联合服务器 URL 也可以用于上传服务定义工具中的 in_server 参数。

String
mapOperations
(可读写)

已启用的操作,以逗号分隔。 支持以下操作:

  • Map
  • Data
  • Query

String
maxRecordCount
(可读写)

服务器在查询期间返回的最大记录数。 默认值为 2000。

Integer
offline
(可读写)

指定是否需要门户连接。 如果设置为 False,则您必须登录门户,同时提供 federatedServerUrl属性的 ArcGIS Enterprise 门户联合服务器 URL,从而使用 exportToSDDraft 函数创建服务定义草稿文件 (.sddraft)。 如果设置为 True,则可以在不登录门户、不填充 federatedServerUrl 属性的情况下创建服务定义草稿文件。

Boolean
offlineTarget
(可读写)

将发布服务定义的目标服务器版本。 指定一个版本可确保服务定义包含与服务器兼容的内容。 仅在属性 offline 设置为 True 时支持此属性。

  • ENTERPRISE_10x - 内容将与 ArcGIS Enterprise 10.9.1 或较早版本兼容。 这是默认设置。
  • ENTERPRISE_11 - 内容将与 ArcGIS Enterprise 11.0 或更高版本兼容。
String
overwriteExistingService
(可读写)

指定是否覆盖现有的 Web 图层。

Boolean
pooling.maxInstances
(可读写)

每台计算机的最大实例数 仅在属性 pooling.type 设置为 DEDICATED 时支持此属性。

Integer
pooling.minInstances
(可读写)

每台计算机的最小实例数: 仅在属性 pooling.type 设置为 DEDICATED 时支持此属性。

Integer
pooling.type
(可读写)

将使用的实例池化的类型。

  • SHARED
  • DEDICATED

String
portalFolder
(可读写)

将发布 Web 图层的现有门户文件夹的名称。 默认文件夹是“我的内容”中的根文件夹。

String
serverFolder
(可读写)

服务将发布到的服务器文件夹的名称。 默认文件夹是联合服务器的根文件夹。

String
serverType
(只读)

根据 map 类中的 getWebLayerSharingDraft 函数创建共享草稿时指定的服务器类型。 从 MapImageSharingDraftserverType 中返回的唯一可能的值为 FEDERATED_SERVERFEDERATED_SERVERserverType 值表示支持共享至 ArcGIS Enterprise 门户联合服务器。

String
serviceName
(可读写)

web 图层名称。 用户可以看到该名称并使用该名称来识别服务。 名称只能包含字母数字字符和下划线。 不允许使用空格或特殊字符。 名称不能超过 120 个字符。

String
sharing.groups
(可读写)

以逗号分隔的组名称。

String
sharing.sharingLevel
(可读写)

Web 图层的共享级别。

  • 所有者 - 只有所有者(以及有权查看其他成员所拥有内容的组织成员)才能访问项目。
  • 组织 - 与组织中所有经过身份验证的用户共享您的内容。
  • 所有人 - 与公众分享您的内容。 任何人均可访问并进行查看。

String
summary
(可读写)

Web 图层的摘要。

String
tags
(可读写)

Web 图层的标签。 可以添加多个标签,或用逗号分隔。

String
useLimitations
(可读写)

Web 图层的使用限制。

String
timezone.DaylightSavingTime
(可读写)

指定时区是否考虑夏令时。 默认值为 False

Boolean
timezone.ID
(可读写)

存储日期值的时区。 字符串值必须与 Windows 操作系统识别的官方时区 ID 之一匹配。 有关时区的列表,请参阅 Microsoft 文档中的时区

String
timezone.preferredTimezoneID
(可读写)

显示来自 web 要素图层的查询时要使用的 ArcGIS Pro 时区。 字符串值必须与 Windows 操作系统识别的官方时区 ID 之一匹配。 有关时区的列表,请参阅 Microsoft 文档中的时区

String
timezone.preferredTimezoneIDDaylightSavingTime
(可读写)

指定首选时区是否考虑夏令时。 默认值为 False

Boolean
useCIMSymbols
(可读写)

指定是否将使用 Esri 制图信息模型 (CIM) 符号(也称为 ArcGIS Pro 符号)。 设置为 False 时,将使用所有客户端都能渲染的符号。 设置为 True 时,将使用新客户端(例如 ArcGIS API for JavaScript 4.x)支持的 CIM 符号。

此属性仅在关联的要素图层被包含,且服务定义发布到 ArcGIS Enterprise 11.3 或更高版本时有效。

Boolean

方法概述

方法说明
exportToSDDraft (out_sddraft)

MapImageSharingDraft 转换为服务定义草稿 (.sddraft) 文件。

方法

exportToSDDraft (out_sddraft)
参数说明数据类型
out_sddraft

A string that represents the path and file name for the output service definition draft (.sddraft) file.

String

MapImageSharingDraft 配置完成后,即可将其作为服务定义草稿 (.sddraft) 文件进行保存。 随后即可使用过渡服务上传服务定义工具将其过渡和共享给 ArcGIS Enterprise 门户联合服务器。

代码示例

将地图图像图层发布到门户文件夹

以下脚本将为地图创建地图图像图层服务定义草稿文件 (.sddraft),并设置元数据属性。 地图图像图层将发布到 ArcGIS Enterprise 中的文件夹并与所有人(公共)共享。 门户信息可从 SignInToPortal 函数中获得。

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

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

# Create MapImageSharingDraft and set metadata, portal folder, and server folder properties
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.credits = "These are credits"
sddraft.description = "This is description"
sddraft.summary = "This is summary"
sddraft.tags = "tag1, tag2"
sddraft.useLimitations = "These are use limitations"
sddraft.portalFolder = "my folder name"
sddraft.serverFolder = "MyServerFolder"
sddraft.sharing.sharingLevel = "EVERYONE"
sddraft.sharing.groups = ""  # Group names = "group1,group2"

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)

print("Finish Publishing")
覆盖地图图像图层

以下脚本将覆盖地图图像图层。 如果服务名称已存在,将覆盖该服务;否则,将创建新服务。 如果希望 Web 图层具有特定的属性,则必须设置属性值,即使要覆盖的 Web 图层已配置了属性。 否则,现有属性将被默认设置覆盖。

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

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

# Create MapImageSharingDraft and set overwrite property
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.overwriteExistingService = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)

print("Finish Publishing")
发布具有相关联要素图层的地图图像图层

以下脚本可以创建地图图像图层服务定义草稿 (.sddraft) 文件。 然后将添加要素图层并设置要素图层和地图图像图层属性。 然后,会将 .sddraft 文件过渡并发布到 ArcGIS Enterprise 门户联合服务器。 必须已在服务器上注册数据存储,才能引用数据。

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
								
# Create MapImageSharingDraft, set copyDataToServer property to False to reference registered data, set CIM symbols, and map operations. Include feature layer and enable capabilities.
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.esri.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.copyDataToServer = False
sddraft.useCIMSymbols = True
sddraft.mapOperations = "Map,Data"
sddraft.extension.feature.isEnabled = True
sddraft.extension.feature.featureCapabilities = "Create,Sync,Query"

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)

print("Finish Publishing")
发布缓存地图图像图层。

以下脚本通过调用管理地图服务器缓存切片工具以创建地图服务缓存切片,来发布缓存地图图像图层。 在过渡期间,将对 .sddraft 文件进行分析以查看是否存在错误和警告。

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

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

# Create MapImageSharingDraft
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.enableCache = True
sddraft.cache.configuration = "C:\Program Files\ArcGIS\Pro\Resources\TilingSchemes\WGS84_Geographic_Coordinate_System_V2.xml"

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

try:
    # Stage Service
    print("Start Staging")
    arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
    warnings = arcpy.GetMessages(1)
    print(warnings)

    # Share to portal
    print("Start Uploading")
    arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)
    print("Finish Publishing")

    # Manage Map Server Cache Tiles
    # For cache, use multiple scales separated by semicolon (;)
    # For example, "591657527.591555;295828763.795855"
    arcpy.server.ManageMapServerCacheTiles(federated_server_url + "/" + "rest/services" + "/" + service_name + "/" + "MapServer", "295828763.795855", "RECREATE_ALL_TILES")
except Exception as stage_exception:
    print("Analyzer errors encountered - {}".format(str(stage_exception)))

except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))
发布从现有缓存中提取的地图图像图层

以下脚本可以创建地图图像图层服务定义草稿 (.sddraft) 文件。 该脚本之后会使用现有缓存绘制服务。 然后,会将 .sddraft 文件过渡并发布到 ArcGIS Enterprise 门户联合服务器。

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

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

# Create MapImageSharingDraft
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.enableCache = True
sddraft.cache.useExistingCache = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)

print("Finish Publishing")
分析并注册数据存储

以下脚本可以为地图图像图层创建服务定义草稿 (.sddraft) 文件。 在过渡期间,将对 .sddraft 文件进行分析。 如果返回分析器 24011,警告未将数据源注册到服务器,则将使用 ArcGIS API for Python 中的 arcgis.gis 模块注册数据存储。

import arcpy
import os

# Add a data store item on the portal and register it with a federated server
def register_datastore_item(portal_url, username, password, sde_conn_file, data_store_name, federated_server_url):
    from arcgis.gis import GIS

    tags = "tag1, tag2"
    description = "Data Store Item created from ArcGIS API for Python"
    federated_server_url = federated_server_url.rstrip('/')
    federated_server_adminurl = federated_server_url + "/admin"

    # Connect to your portal using ArcGIS API for Python
    gis = GIS(url=portal_url, username=username, password=password)

    # Get federated server ID
    server_list = gis.servers["servers"]
    fedserver_dict = [srvr for srvr in server_list if srvr["url"] == federated_server_url][0]
    fedserver_id = fedserver_dict["id"]
    print("Server id: " + fedserver_id)

    # Get federated server's DatastoreManager object
    fedserver = [srvr for srvr in gis.admin.servers.list() if srvr.url == federated_server_adminurl][0]
    fedserver_dsmgr = fedserver.datastores

    # Create a connection string from .sde file connection
    conn_file = sde_conn_file
    conn_string = fedserver_dsmgr.generate_connection_string(conn_file)
    print("Connection string generated")

    # Create a dictionary for data store configuration
    ds_config = {"type": "egdb",
                 "path": "/enterpriseDatabases/" + data_store_name,
                 "info": {"isManaged": "false",
                          "dataStoreConnectionType": "shared",
                          "connectionString": conn_string}
                 }

    # Create a dictionary for the item properties
    item_properties = {"title": data_store_name,
                       "type": "Data Store",
                       "tags": tags,
                       "snippet": description}

    # Add the data store item to the portal
    ds_item = gis.content.add(item_properties=item_properties,
                              text=ds_config)
    print("Data store item added")

    # Get portal data store
    portal_ds = gis.datastore
    
    # Validate the data store item can be connected to before registering
    validation_state = portal_ds.validate(server_id=fedserver_id,
                                          item=ds_item)
    print("Data store item validated")

    # Register the database with the federated server
    portal_ds.register(item=ds_item,
                       server_id=fedserver_id,
                       bind=False)
    print("Data store item registered to server")
    return True


if __name__ == "__main__":
    arcpy.env.overwriteOutput = True
    portal_url = "https://portal.domain.com/webadaptor"
    username = "MyUserName"
    password = "MyPassword"

    # Sign in to portal
    arcpy.SignInToPortal(portal_url, username, password)

    # Set output file names
    outdir = r"C:\Project\Output"
    service_name = "registerdatastore_example"
    sddraft_filename = service_name + ".sddraft"
    sddraft_output_filename = os.path.join(outdir, sddraft_filename)
    sd_filename = service_name + ".sd"
    sd_output_filename = os.path.join(outdir, sd_filename)
    sde_conn_file = r"C:\Project\db_conn.sde"
    data_store_name = "PortalDSItem"

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

    # Create MapImageSharingDraft and set copyDataToServer property to False to reference registered data
    server_type = "FEDERATED_SERVER"
    federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
    sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
    sddraft.federatedServerUrl = federated_server_url
    sddraft.copyDataToServer = False

    # Create Service Definition Draft file
    sddraft.exportToSDDraft(sddraft_output_filename)

    # Stage the service and analyze the .sddraft file for registered data store
    # Continue publishing only if data store is registered
    print("Start Staging")
    stage_service = True
    while stage_service:
        arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
        # Get analyzer warnings to check if data store is registered
        warnings = arcpy.GetMessages(1)
        print(warnings)
        # If data store is not registered
        if "24011" in warnings:
            # Register data store
            register_res = register_datastore_item(portal_url, username, password, sde_conn_file, data_store_name,
                                                   federated_server_url)
            if not register_res:
                print("Unable to register the data store, skipping upload")
                exit()
            # Stage the service again
            stage_service = True
        else:
            stage_service = False

    # Share to portal
    print("Start Uploading")
    arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)

    print("Finish Publishing")
设置时区并配置池化

以下脚本可以创建地图图像图层服务定义草稿 (.sddraft) 文件。 它为带有日期字段的图层设置时区,并配置服务实例设置。 然后,会将 .sddraft 文件过渡并发布到 ArcGIS Enterprise 门户联合服务器。 必须已在服务器上注册数据存储,才能引用数据。

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)
										 
# Reference map to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
			 
# Create MapImageSharingDraft and set time zone, enable version management, and configure pooling options
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.esri.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.copyDataToServer = False
sddraft.pooling.type = "DEDICATED"
sddraft.pooling.minInstances = 0
sddraft.pooling.maxInstances = 2
sddraft.timezone.ID = "Pacific Standard Time"
sddraft.timezone.DaylightSavingTime = True
sddraft.extension.versionManagement.isEnabled = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)

print("Finish Publishing")
发布图层和表

以下脚本可将图层和表作为地图图像图层发布至 ArcGIS Enterprise 门户。

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

# Reference layers to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
selected_layer = m.listLayers('States')[0]
selected_table = m.listTables('Cities')[0]

# Create MapImageSharingDraft
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name, [selected_layer, selected_table])
sddraft.federatedServerUrl = federated_server_url

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Share to portal
print("Start Uploading")
arcpy.UploadServiceDefinition_server(sd_output_filename, federated_server_url)

print("Finish Publishing")
创建并发布离线服务定义

以下脚本将为目标服务器版本创建离线服务定义,并将其发布为地图图像图层。

import arcpy
import os

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

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

# Create MapImageSharingDraft and set offline and offlineTarget properties
server_type = "FEDERATED_SERVER"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.offline = True
# Set offlineTarget property to "ENTERPRISE_11" for ArcGIS Enterprise 11.0 or later
# The default is ArcGIS Enterprise 10.9.1 or earlier
sddraft.offlineTarget = "ENTERPRISE_10x"

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

# Stage Service
print("Start Staging")
arcpy.server.StageService(sddraft_output_filename, sd_output_filename)

# Sign in to portal to upload and publish
arcpy.SignInToPortal("https://portal.domain.com/webadaptor",
                     "MyUserName", "MyPassword")

# Share to portal
print("Start Uploading")
arcpy.server.UploadServiceDefinition(sd_output_filename, "https://MyFederatedServer.domain.com/serverWebadaptor")

print("Finish Publishing")
分析以确认地图已设置为允许分配唯一数字 ID

以下脚本将创建启用了 checkUniqueIDAssignment 属性的地图图像图层服务定义草案文件 (.sddraft)。 在过渡期间,将对 .sddraft 文件进行分析。 如果地图未设置为允许分配用于共享 web 图层的唯一数字 ID,则会返回分析器错误 00374 并打印一条消息。 有关详细信息,请参阅分配图层 ID

import arcpy
import os

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

# Set output file names
outdir = r"C:\Project\Output"
service_name = "MapImageSharingDraftExample"
sddraft_filename = service_name + ".sddraft"
sddraft_output_filename = os.path.join(outdir, sddraft_filename)
sd_filename = service_name + ".sd"
sd_output_filename = os.path.join(outdir, sd_filename)

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

# Create MapImageSharingDraft and set the check unique ID assignment property
server_type = "FEDERATED_SERVER"
federated_server_url = "https://MyFederatedServer.domain.com/serverWebadaptor"
sddraft = m.getWebLayerSharingDraft(server_type, "MAP_IMAGE", service_name)
sddraft.federatedServerUrl = federated_server_url
sddraft.checkUniqueIDAssignment = True

# Create Service Definition Draft file
sddraft.exportToSDDraft(sddraft_output_filename)

try:
    # Stage Service
    print("Start Staging")
    arcpy.server.StageService(sddraft_output_filename, sd_output_filename)
    # Share to portal
    print("Start Uploading")
    arcpy.server.UploadServiceDefinition(sd_output_filename, federated_server_url)

    print("Finish Publishing")
except Exception as stage_exception:
    if "00374" in str(stage_exception):
        print("The map is not set to allow assignment of unique IDs")
    print("Analyzer errors encountered - {}".format(str(stage_exception)))

except arcpy.ExecuteError:
    print(arcpy.GetMessages(2))

相关主题