方法

ArcPy を使用してフィーチャ レイヤーを公開するときにタイム ゾーンを設定し、サマータイムを適用する

Last Published: December 29, 2020

サマリー

ArcGIS Pro からフィーチャ レイヤーを公開するときに、公開用の config プロパティを修正することで、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

AI によるサポートを受ける

Esri サポート AI チャットボットを使用して問題を迅速に解決します。

今すぐチャットを開始

関連情報

このトピックについてさらに調べる

ArcGIS エキスパートのサポートを受ける

テクニカル サポートへのお問い合わせ

今すぐチャットを開始

ダウンロード オプションに移動