HOW TO

Festlegen eine Zeitzone und Angeben der Sommerzeit beim Veröffentlichen eines Feature-Layers mithilfe von ArcPy

Last Published: December 29, 2020

Zusammenfassung

Beim Veröffentlichen eines Feature-Layers über ArcGIS Pro kann mithilfe von ArcPy eine Zeitzone festgelegt und die Sommerzeit angegeben werden, indem die Konfigurationseigenschaften für die Veröffentlichung geändert werden.

Vorgehensweise

  1. Importieren Sie die erforderlichen Module.
import arcpy import os import xml.dom.minidom as DOM import codecs import xml.etree.ElementTree as ET
  1. Definieren Sie die Funktion so, dass die erforderlichen Erweiterungen aktiviert werden, und lesen Sie die SDDRAFT-Datei (Service Definition Draft, Service-Definitionsentwurf). Suchen Sie alle Elemente mit dem Namen "TypeName", um die SOE-Namen (Server Object Extension, Serverobjekterweiterung) zu definieren und in die SDDRAFT-Datei zu schreiben.
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. Definieren Sie die Funktion so, dass die Eigenschaften einer Erweiterung konfiguriert werden, und lesen Sie die SDDRAFT-Datei. Bei der SOE handelt es sich um die Erweiterung, der Eigenschaften hinzugefügt werden müssen. Suchen Sie alle Elemente mit dem Namen "TypeName", um die SOE-Namen (Server Object Extension, Serverobjekterweiterung) zu definieren und in die SDDRAFT-Datei zu schreiben.
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. Stellen Sie eine Verbindung mit dem angegebenen Portal her, und geben Sie dabei die entsprechenden Anmeldeinformationen an. Veröffentlichen Sie eine Karte im aktuellen ArcGIS-Projekt (APRX). Legen Sie die Zeitzone fest, und geben Sie die Sommerzeit an. Aktivieren Sie die Erweiterungen auf dem Kartenserver, und veröffentlichen Sie den Feature-Layer.
Hinweis: Beim Herstellen einer Verbindung mit dem Portal über "arcpy.SignInToPortal()" kann möglicherweise ein Fehler auftreten. Weitere Informationen hierzu finden Sie unter Problem: Unable to log in to ArcGIS Online using ArcPy.
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")

Artikel-ID: 000024162

Holen Sie sich Unterstützung mit KI

Lösen Sie Ihr Problem schnell mit dem Esri Support AI Chatbot.

Beginnen Sie jetzt mit dem Chatten

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Beginnen Sie jetzt mit dem Chatten

Zu Download-Optionen wechseln