VectorTileSharingDraft

摘要

VectorTileSharingDraft 类允许您为具有关联 Web 要素图层的矢量切片图层创建共享草稿。 您可以为矢量切片图层配置 VectorTileSharingDraft 对象,将所有数据或引用的注册数据复制到 ArcGIS Enterprise 10.8.1 和更高版本,或将所有数据复制到 ArcGIS Online

要在 Python 中发布本地缓存的矢量切片图层,请改用地理处理工具。 有关详细信息,请参阅使用包发布 Web 图层

说明

要创建 VectorTileSharingDraft 对象,需使用 Map 对象的 getWebLayerSharingDraft 方法并将 service_type 参数设置为 VECTOR_TILE。 要指定矢量切片图层是否将所有数据或引用注册的数据复制到 ArcGIS Enterprise,请将 server_type 参数设置为下列之一:

  • HOSTING_SERVER - 复制所有数据;包括关联的 web 要素图层。
  • FEDERATED_SERVER - 引用注册的数据;包括关联的地图影像图层和 web 要素图层。

此外,getWebLayerSharingDraft 方法的 layers_and_tables 参数是可选的。 如果使用,它应该是图层列表,其中至少有一个 2D 点、线或面图层。 使用 ArcGISProject 对象中的 listMaps 函数和 Map 类上的 listLayers 方法来引用要发布的地图中的图层。 如果不使用该参数,则发布 VectorTileSharingDraft 对象时将包含地图中所有支持的图层。

然后,可通过设置服务级别属性配置 VectorTileSharingDraft 对象。 您还可以设置关联的 Web 要素图层和地图影像图层的 VectorTileSharingDraft 对象属性。 如果未指定属性的值,则使用默认值。 下面的属性列表中提供了有关每个属性的信息。

注:

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

配置 VectorTileSharingDraft 对象后,可以使用可选 analyzeForSharing 方法分析错误和警告,并使用 Publish 函数发布。 Publish 函数将矢量切片图层及任何相关 Web 图层发布至 ArcGIS OnlineArcGIS Enterprise,并开始在服务器上缓存。

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

属性

属性说明数据类型
allowTrueCurvesUpdates
(可读写)

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

这是 Web 要素图层属性。

Boolean
allowUpdateWithoutMValues
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

Boolean
approvePublicDataCollection
(可读写)

指定是否允许在 Web 要素图层上进行公开编辑。

默认值为 False

Boolean
cache.configuration
(可读写)

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

String
cache.exportTiles
(可读写)

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

Boolean
cache.exportTilesCount
(可读写)

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

Integer
credits
(可读写)

web 图层制作者名单。

String
description
(可读写)

web 图层的描述。

String
featureCapabilities
(可读写)

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

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

server_type 属性设置为 FEDERATED_SERVER 时, QueryCreateUpdateDeleteEditing 是默认值。

这是 Web 要素图层和地图图像图层属性。

String
maxRecordCount
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

Integer
onlyAllowTrueCurveUpdatesByTrueCurveClients
(可读写)

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

这是 Web 要素图层属性。

Boolean
portalFolder
(可读写)

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

String
preserveEditUsersAndTimestamps
(可读写)

指定是否将保留编辑者追踪信息。 默认值为 False

这是 Web 要素图层属性。

Boolean
serviceName
(可读写)

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

String
sharing.groups
(可读写)

以逗号分隔的组名称。

String
sharing.sharingLevel
(可读写)

指定 Web 图层的共享级别。

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

String
summary
(可读写)

Web 图层的摘要。

String
tags
(可读写)

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

String
timezone.DaylightSavingTime
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

Boolean
timezone.ID
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

String
timezone.preferredTimezoneID
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

String
timezone.preferredTimezoneIDDaylightSavingTime
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

Boolean
useCIMSymbols
(可读写)

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

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

Boolean
useLimitations
(可读写)

Web 图层的使用限制。

String
zDefault.enable
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

Boolean
zDefault.value
(可读写)

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

这是 Web 要素图层和地图图像图层属性。

Double

方法概述

方法说明
analyzeForSharing ()

analyzeForSharing 方法分析 VectorTileSharingDraft 对象并返回错误、警告和消息。

方法

analyzeForSharing ()
返回值
数据类型说明
Dictionary

错误和警告的字典。

{
'errors': 
[
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"},
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"}
], 
'warnings':
[
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"},
    {"code":"xxxxx","message":"message string","object":"value such as map or layer name"}
]
}

代码示例

发布将所有数据复制到门户文件夹的矢量切片图层

以下脚本为地图中的图层创建矢量切片图层共享草稿并设置元数据和文件夹属性。 矢量切片图层将发布到 ArcGIS OnlineArcGIS Enterprise 的文件夹中并与所有人(公共)共享。 门户信息可从 SignInToPortal 函数中获得。

import arcpy

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

# Reference layer to publish
aprx = arcpy.mp.ArcGISProject(r"C:\Project\World.aprx")
m = aprx.listMaps('World')[0]
lyrs = []
lyrs.append(m.listLayers('Cities')[0])
lyrs.append(m.listLayers('Counties')[0])

# Create VectorTileSharingDraft and set metadata and portal folder properties
server_type = "HOSTING_SERVER"
service_type = "VECTOR_TILE"
service_name = "VectorTileSharingDraftExample"
vector_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name,
                                         lyrs)
vector_draft.credits = "These are credits"
vector_draft.description = "This is description"
vector_draft.summary = "This is summary"
vector_draft.tags = "tag1, tag2"
vector_draft.useLimitations = "These are use limitations"
vector_draft.portalFolder = "my folder name"
vector_draft.sharing.sharingLevel = "EVERYONE"
vector_draft.sharing.groups = ""  # Group names = "group1,group2"

# Share to portal
print("Start Publishing")
res = arcpy.sharing.Publish(vector_draft)

print(r"item_url: " + res["vector_tile_layer"]["item_url"])
print(r"rest_url: " + res["vector_tile_layer"]["rest_url"])
print(r"cache_job_id: " + res["vector_tile_layer"]["cache_job_id"])
print("Finish Publishing")
发布引用注册数据的矢量切片图层

以下脚本创建了矢量切片图层共享草稿。 分析了共享草稿。 如果返回 analyzer 00231,则使用 ArcGIS API for Python 中的 arcgis.gis 模块注册数据存储。

import arcpy

# 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 == fedserver_dict["adminUrl"]+"/admin"][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, which can be connected 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__":
    portal_url = "https://organization.example.com/webadaptorname"
    username = "MyUserName"
    password = "MyPassword"

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

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

    # Local variables
    server_type = "FEDERATED_SERVER"
    service_type = "VECTOR_TILE"
    service_name = "VectorTileSharingDraftExample"
    sde_conn_file = r"C:\Project\db_conn.sde"
    data_store_name = "PortalDSItem"

    # Create VectorTileSharingDraft for vector tile layer that references data
    # in registered data store and set metadata, portal folder, and server
    # folder properties.
    vector_draft = m.getWebLayerSharingDraft(server_type, service_type,
                                             service_name, lyr)
    vector_draft.credits = "These are credits"
    vector_draft.description = "This is description"
    vector_draft.summary = "This is summary"
    vector_draft.tags = "tag1, tag2"
    vector_draft.useLimitations = "These are use limitations"
    vector_draft.portalFolder = "my folder name"
    vector_draft.serverFolder = "MyServerFolder"
    vector_draft.sharing.sharingLevel = "EVERYONE"
    vector_draft.sharing.groups = ""  # Group names = "group1,group2"

    print("Analyzing")
    analyze_res = vector_draft.analyzeForSharing()
    print(analyze_res)
    register_error = [err for err in analyze_res["errors"] if err["code"] == "00231"]
    # If data store is not registered
    if register_error:
        # Register data store
        register_res = register_datastore_item(portal_url, username, password, 
                                               sde_conn_file, data_store_name,
                                               "https://gisserver.example.com/webadaptorname")
        if not register_res:
            print("Unable to register the data store, skipping publish")
            exit()

    # Share to portal
    print("Start Publishing")
    res = arcpy.sharing.Publish(vector_draft)

    print(r"item_url: " + res["vector_tile_layer"]["item_url"])
    print(r"rest_url: " + res["vector_tile_layer"]["rest_url"])
    print(r"cache_job_id: " + res["vector_tile_layer"]["cache_job_id"])
    print("Finish Publishing")
设置关联的 Web 要素图层功能和项目 ID

以下脚本创建矢量切片图层为地图共享草稿并为关联的 Web 要素图层设置功能和时区。 然后,为矢量切片图层和关联的 Web 图层指定项目 ID。 将矢量切片图层发布到 ArcGIS Enterprise。 必须已在服务器上注册数据存储,才能引用数据。

import arcpy

# Sign in to portal
arcpy.SignInToPortal("https://organization.example.com/webadaptorname",
                     "MyUserName", "MyPassword")

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

# Create VectorTileSharingDraft and set feature capabilities and time zone
# properties
server_type = "FEDERATED_SERVER"
service_type = "VECTOR_TILE"
service_name = "VectorTileSharingDraftExample"
vector_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name)
vector_draft.featureCapabilities = "Query,Create,Update"
vector_draft.timezone.ID = "Pacific Standard Time"
vector_draft.timezone.DaylightSavingTime = True

# Publish vector tile layer using the VectorTileSharingDraft object and specific
# item ID. The ID must be available and contain 32 alphanumeric values ranging
# from letters a to f and numbers 0 to 9.
item_id = {
 "vector_tile_layer_id": "itemid1",
 "web_feature_layer_id": "itemid2",
 "map_image_layer_id": "itemid3"
}

# Share to portal
print("Start Publishing")
res = arcpy.sharing.Publish(vector_draft, item_id)

print(r"item_url: " + res["vector_tile_layer"]["item_url"])
print(r"rest_url: " + res["vector_tile_layer"]["rest_url"])
print(r"cache_job_id: " + res["vector_tile_layer"]["cache_job_id"])
print("Finish Publishing")

相关主题