操作方法

操作方法:使用 ArcPy 发布要素图层时设置时区并指定夏令时

Last Published: December 29, 2020

摘要

从 ArcGIS Pro 中发布要素图层时,可以通过修改发布的配置属性来使用 ArcPy 设置时区和指定夏令时。

过程

  1. 导入所需的模块。
import arcpy import os import xml.dom.minidom as DOM import codecs import xml.etree.ElementTree as ET
  1. 定义函数以启用必要的扩展模块并读取服务定义草稿 (.sddraft) 文件。 找到所有名为 TypeName 的元素来定义服务器对象扩展模块 (SOE) 名称,启用要素访问权限并写入 .sddraft 文件。
def enable_extensions(sddraftPath, soe): doc = DOM.parse(sddraftPath)     typeNames = doc.getElementsByTagName('TypeName') for typeName in typeNames: if typeName.firstChild.data == soe: extension = typeName.parentNode for extElement in extension.childNodes: if extElement.tagName == 'Enabled': extElement.firstChild.data = 'true' f = open(sddraftPath, 'w') doc.writexml(f) f.close()
  1. 定义函数以配置扩展模块的属性,并读取 .sddraft 文件。 SOE 是必需添加属性的扩展模块。 找到所有名为 TypeName 的元素来定义服务器对象扩展模块 (SOE) 名称,启用要素访问权限并写入 .sddraft 文件。
def enable_configproperties(sddraftPath, soe, property_set): doc = DOM.parse(sddraftPath)   typeNames = doc.getElementsByTagName('TypeName') for typeName in typeNames:          if typeName.firstChild.data == soe: extension = typeName.parentNode              # prp = extension.childNodes.getElementsByTagNameNS('PropertyArray') for extElement in extension.childNodes:                  if extElement.tagName == 'Definition': for definition in extElement.childNodes:           if definition.tagName == 'ConfigurationProperties': for config_prop in definition.childNodes:               if config_prop.tagName == 'PropertyArray': for prop in property_set: prop_set = doc.createElement("PropertySetProperty") attr = doc.createAttribute("xsi:type") attr.value = "typens:PropertySetProperty" prop_set.setAttributeNode(attr) prop_key = doc.createElement("Key") txt = doc.createTextNode(prop["key"]) prop_key.appendChild(txt) prop_set.appendChild(prop_key) prop_value = doc.createElement("Value") attr = doc.createAttribute("xsi:type") attr.value = "xs:string" prop_value.setAttributeNode(attr) txt = doc.createTextNode(prop["value"]) prop_value.appendChild(txt) prop_set.appendChild(prop_value) config_prop.appendChild(prop_set)                                          f = open(sddraftPath, 'w') doc.writexml(f) f.close()
  1. 连接到指定门户并指定登录凭据。 在当前 ArcGIS 项目中发布地图 (.aprx)。 设置时区并指定夏令时。 在地图服务器上启用扩展模块,并发布要素图层。
: 通过 arcpy.SignInToPortal() 连接到门户时可能出现错误。 有关详细信息,请参阅问题:无法使用 ArcPy 登录到 ArcGIS Online
if __name__ == "__main__": arcpy.SignInToPortal("https://www.arcgis.com/", "username", "password") # aprx = arcpy.mp.ArcGISProject("CURRENT") aprx = arcpy.mp.ArcGISProject(r"aprx path") m = aprx.listMaps('<Map_Name>')[0] # if to share selected layers # layers = m.listLayers() # lyr = layers[0] name = "service name" in_server = "https://server.domain.com:6443/arcgis/" sddraft = m.getWebLayerSharingDraft('FEDERATED_SERVER', 'MAP_IMAGE', name) sddraft.federatedServerUrl = in_server sddraft.copyDataToServer = False sddraft.exportToSDDraft("location and name of sddraft") #The desired timezone can be in UTC or PDT property_set = [{ "key": "dateFieldsRespectsDayLightSavingTime", "value": "true" }, { "key": "dateFieldsTimezoneID", "value": "<desired_timezone>" }] # To set time zone on hosted feature service, soe = "FeatureServer" enable_configproperties(sddraftPath, soe="MapServer", property_set=property_set)   # Enable extensions on the map server   enable_extensions(sddraftPath, "FeatureServer") # enable_extensions(sddraftPath, "VersionManagementServer") # enable_extensions(sddraftPath, "LRServer")   print("Start Staging")   arcpy.StageService_server("location and name of sddraft", "location and name of sd")   print("Start Uploadinb")   arcpy.UploadServiceDefinition_server("location and name of sd", in_server)   print("Finish publishing")

文章 ID: 000024162

获得人工智能支持

使用 Esri Support AI Chatbot 快速解决您的问题。

立即开始聊天

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

立即开始聊天

转至下载选项