Skip to main content

analyzeForSharing

汇总

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,并开始在服务器上缓存。

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

语法

analyzeForSharing()

属性

名称 说明 数据类型

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

  • SharedTemplateEditing

  • Append

  • Extract

  • Editing

当 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 文档中的 时区 。

注:

该设置适用于以下情景:

  • 您的数据已设置编辑器追踪字段以记录数据库时间中的日期。

  • 您正在将包含日期字段的数据共享到 ArcGIS Enterprise 11.5 和更低版本。

  • 您正在共享至 ArcGIS Online 或 ArcGIS Enterprise 12.0 及更高版本,并且 图层属性 中未定义时区。

这是 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 对象并返回错误、警告和消息。

返回值

数据类型 说明

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 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 要素图层功能和项目 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")