摘要
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 对象属性。 如果未指定属性的值,则使用默认值。 下面的属性列表中提供了有关每个属性的信息。
注:
如果未设置元数据属性(credits、description、summary、tags 和 useLimitations)或其具有空字符串,则 Web 图层项目将从地图或图层中获取元数据,具体取决于共享的内容。 有关 Web 图层如何获取元数据的详细信息,请参阅 Web 图层元数据。
配置 VectorTileSharingDraft 对象后,可以使用可选 analyzeForSharing 方法分析错误和警告,并使用 Publish 函数发布。 Publish 函数将矢量切片图层及任何相关 Web 图层发布至 ArcGIS Online 或 ArcGIS 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 (可读写) | 已启用的功能,以逗号分隔。 支持以下功能:
当 server_type 属性设置为 FEDERATED_SERVER 时, Query、Create、Update、Delete 和 Editing 是默认值。 这是 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 Online 或 ArcGIS 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 | 错误和警告的字典。 |
代码示例
以下脚本为地图中的图层创建矢量切片图层共享草稿并设置元数据和文件夹属性。 矢量切片图层将发布到 ArcGIS Online 或 ArcGIS 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 要素图层设置功能和时区。 然后,为矢量切片图层和关联的 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")