SceneLayerSharingDraft

摘要

SceneLayerSharingDraft 类允许您为具有关联 Web 要素图层的 Web 场景图层创建共享草稿。 您可以为 Web 场景图层配置 SceneLayerSharingDraft 对象,将所有数据或引用的注册数据复制到 ArcGIS Enterprise,或将所有数据复制到 ArcGIS Online

对象可发布以下类型的场景图层:

  • 3D 对象
  • 建筑物

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

说明

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

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

此外,getWebLayerSharingDraft 方法中的 layers_and_tables 参数必须是具有单个图层的列表。 使用 ArcGISProject 对象中的 listMaps 函数和 Map 类上的 listLayers 方法来引用要发布的 3D 场景中的图层。

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

注:

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

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

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

属性

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

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

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

Boolean
approvePublicDataCollection
(可读写)

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

Boolean
cachedAttributes
(可读写)

将包含在 Web 场景图层缓存中的图层字段列表。

List
compressedTextures
(可读写)

指定是否启用纹理优化,支持在 3D 应用程序中更快的显示。 共享多面体或 3D 对象要素图层时支持此属性。

Boolean
credits
(可读写)

web 图层制作者名单。

String
description
(可读写)

web 图层的描述。

String
export
(可读写)

指定用户是否可以将网 Web 场景图层导出为不同格式。

Boolean
featureCapabilities
(可读写)

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

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

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

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

String
maxRecordCount
(可读写)

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

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

Integer
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
useLimitations
(可读写)

Web 图层的使用限制。

String
zDefault.enable
(可读写)

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

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

Boolean
zDefault.value
(可读写)

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

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

Double

方法概述

方法说明
analyzeForSharing ()

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

方法

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

错误、警告和消息的字典。

代码示例

发布将所有数据复制到门户文件夹的 Web 场景图层

以下脚本为场景中的图层创建 Web 场景图层共享草稿并设置元数据和文件夹属性。 Web 场景图层将发布到 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]
lyr = m.listLayers('Cities')

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

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

print(r"item_url: " + res["web_scene_layer"]["item_url"])
print(r"rest_url: " + res["web_scene_layer"]["rest_url"])
print(r"cache_job_id: " + res["web_scene_layer"]["cache_job_id"])
print("Finish Publishing")
发布引用注册数据的 Web 场景图层

以下脚本创建了 Web 场景图层共享草稿。 分析了共享草稿。 如果返回 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 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__":
    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 = "SCENE_LAYER"
    service_name = "SceneLayerSharingDraftExample"
    sde_conn_file = r"C:\Project\db_conn.sde"
    data_store_name = "PortalDSItem"

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

    print("Analyzing")
    analyze_res = scene_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(scene_draft)

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

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

import arcpy

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

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

# Create SceneLayerSharingDraft and set feature capabilities, time zone, and cached attributes properties
server_type = "HOSTING_SERVER"
service_type = "SCENE_LAYER"
service_name = "SceneLayerSharingDraftExample"
scene_draft = m.getWebLayerSharingDraft(server_type, service_type, service_name, lyr)
scene_draft.featureCapabilities = "Query,Create,Update"
scene_draft.timezone.ID = "Pacific Standard Time"
scene_draft.timezone.DaylightSavingTime = True
scene_draft.cachedAttributes = ["field1", "field2"]

# Publish scene layer using the SceneLayerSharingDraft 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 = {
 "web_scene_layer_id": "itemid1",
 "web_feature_layer_id": "itemid2",
 "map_image_layer_id": "itemid3"
}

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

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

相关主题