Instrução

Definir um fuso horário e especificar o horário de verão ao publicar uma camada de feição usando ArcPy

Last Published: December 29, 2020

Resumo

Ao publicar uma camada de feição do ArcGIS Pro, é possível definir um fuso horário e especificar o horário de verão usando o ArcPy, modificando as propriedades de configuração para publicação.

Procedimento

  1. Importe os módulos necessários.
import arcpy import os import xml.dom.minidom as DOM import codecs import xml.etree.ElementTree as ET
  1. Defina a função para habilitar as extensões necessárias e leia o arquivo Service Definition Draft (.sddraft). Encontre todos os elementos chamados TypeName para definir os nomes da extensão do objeto do servidor (SOE), habilitar o acesso à feição e gravar no arquivo .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. Defina a função para configurar as propriedades de uma extensão e leia o arquivo .sddraft. O SOE é a extensão à qual as propriedades devem ser adicionadas. Encontre todos os elementos chamados TypeName para definir os nomes da extensão do objeto do servidor (SOE), habilitar o acesso à feição e gravar no arquivo .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. Conecte-se ao portal especificado e especifique as credenciais de login. Publique um mapa no projeto ArcGIS atual (.aprx). Defina o fuso horário e especifique o horário de verão. Habilite as extensões no servidor de mapa e publique a camada de feição.
NotA: Pode haver um erro ao conectar-se ao portal por meio de arcpy.SignInToPortal(). Consulte o Problema: Não é possível de efetuar login no ArcGIS Online usando ArcPy para obter mais informações.
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 do Artigo: 000024162

Obtenha suporte com IA

Resolva seu problema rapidamente com o chatbot de IA de suporte da Esri.

Comece a conversar agora

Informações Relacionadas

Descubra mais sobre este tema

Obtenha ajuda de especialistas do ArcGIS

Entre em contato com Suporte Técnico

Comece a conversar agora

Ir para as opções de download