发布一个FGDB到AGOL -使用层别名而不是名称

148
3.
3周前
标签(1)
CassKalinski
通过
新贡献者III

短篇小说:
当我从文件GDB发布时,我希望AGOL使用层别名,而不是特性类名称。

长故事:
我将一组包含在文件GDB中的20个特性类发布到AGOL。在处理后,这最终成为一个特征层集合。在线层是用特性类名而不是别名创建的。我希望在线层使用特性类别名,因为在用户喜欢的名称中有空格和标点符号。在GDB中的特性类名称中不允许使用标点符号,但在AGOL名称中是可以使用的。

此外,AGOL特性服务随后将被覆盖更新,因此名称要么需要具有“粘性”,要么同样的问题会出现在覆盖过程中。如何使用别名而不是特性类名?

发布我正在使用的代码…

gis = gis (userName, passWord) service_properties = {'title': 'A Name', 'type': 'File Geodatabase', 'itemType': 'File', 'tags': ['tags'], 'typeKeywords': ['File', 'Geodatabase'], 'description': 'A description', 'snippet': 'A snippet', 'spatialReference': '3857'} content_zip = r' c:\ZippedUpFileGDB.zip' new_item = gis.content。add(item_properties = service_properties, data = content_zipped) publish_properties = {'name': '服务名称','description': '描述','layerInfo': {"capabilities": '查询'},'targetSR': {"wkid": 3857}} published_item = new_item。publish(publish_parameters = publish_properties, file_type = 'filegeodatabase', overwrite=True)

更新/重写代码:

fs_id = 'TheGUID' content_zip = r' c:\ZippedUpFileGDB.zip' agol_item = gis.content.get(fs_id) agol_flc = FeatureLayerCollection.fromitem(agol_item) results = agol_flc.manager.overwrite(content_zipped)

我知道我可以像这样重命名AGOL图层…

fs_id = 'TheGUID' agol_item = gis.content.get(fs_id) fs_layers = agol_item。如果lyr_renames中的current_name: update_name = {"name": lyr_renames[current_name]} response = layer.manager.update_definition(update_name)

...但是这会破坏更新/覆盖。

标签(4)
0荣誉
3回复
Clubdebambos
通过
临时贡献者II

@CassKalinski

重命名代码不必破坏更新/覆盖。

您可以创建一个字典来将特性类名称存储为键,将别名存储为值。将此添加到脚本的开头。

导入arcpy GDB = r"path\到\。sde" arcpy.env.workspace = gdb ## dictionary key-fc name, value-fc alias lyr_rename = {fc:arcpy.da.Describe(fc)["aliasName"] for fc in arcpy.ListFeatureClasses()}

您可以使用published_item变量来获取内容项的项id (TheGUID),并在脚本的末尾添加重命名代码作为延续。

Agol_item = gis.content.get(published_item.id) fs_layers = Agol_item。如果current_name in lyr_renames: update_name = {"name": lyr_renames[current_name]} response = layer.manager.update_definition(update_name)

~规划我的退休之路
0荣誉
CassKalinski
通过
新贡献者III

你好@Clubdebambos

谢谢您的回复。我认为我最初的帖子中我重命名图层的部分(第三个代码块)本质上与您提供的相同。我的错,我在命名上不一致,没有叫出一个缩写细节。

我的线…
fs_id = 'TheGUID'
...用于发布的特性服务项。想想剩下的,然后与你的建议一致。

和我…
lyr_rename = {'fc_name': 'fc_alias'}
...就像你提议的那样,只是一本完整字典的占位符。我在构建发布的GDB/zip文件时编译了它,但实际上是一样的。我应该在邮件里提到的。

如果我对AGOL动态的理解是正确的,那么它有点循环。我可以重命名功能服务中的层,但下一次覆盖是删除另一个GDB副本,使用旧名称(因为与原始名称相同的命名限制)。这与重命名的功能服务冲突。

在某种程度上,我希望在已发布的特性类中存在类似的名称/别名关系,以便我可以利用。或者一种强制发布和覆盖使用GDB别名的方法。目前,我们的工作是创建一个具有用户喜欢的命名的视图。

0荣誉
Clubdebambos
通过
临时贡献者II

@CassKalinski

我使用的另一种方法是有一个包含数据的模板APRX(或mxd),而不是作为gdb发布,而是使用arcpy从APRX/mxd直接作为特性服务发布。层名保持别名(如目录中所示的名称)。通过这样做,如果需要的话,你可以保持符号学。

~规划我的退休之路
0荣誉