Suite

Calculer le champ Date dans ArcPy

Calculer le champ Date dans ArcPy


J'essaie d'utiliser arcpy.ExtractValuesToPoints() pour obtenir des valeurs raster dans une classe d'entités points pour plusieurs fichiers raster (8760). L'objectif est d'obtenir une vue temporelle de la façon dont les valeurs à certains emplacements changent au fil du temps.

Je connais assez bien Python ainsi que le module datetime intégré. Le problème que j'ai est d'enregistrer les valeurs date-heure dans une table dans ArcGIS.

(J'ai obtenu une approche similaire pour travailler en utilisant arcpy.da.InsertCursor() mais cette approche est très gourmande en processus et j'ai conclu que ce n'est pas une approche viable pour ce que j'essaie de faire. De plus, je Je préfère ne pas réinventer la roue et utiliser à la place la fonction ArcGIS : ExtractValuesToPoints().)

Pour donner un peu de contexte, j'utilise des dates qui nécessitent une précision datetime à l'heure, j'ai donc choisi d'utiliser une géodatabase fichier pour accueillir cette fonctionnalité (puisque les fichiers de formes ne peuvent gérer que la partie date).

J'essaie de résoudre un seul cas car je peux créer une solution pour itérer sur les 8760 fichiers avec lesquels je travaille.

Pour l'instant voici ce que j'ai :

import arcpy import os GRID_Table = "E:HRRR.gdbGRID_Table" # GRID_Table est une table ArcGIS SPP_LMP_Points = "E:HRRR.gdbSPPSPP_LMP_Points" # qui contient datetime et out_path = "C:scratch.gdb " # paires raster_path. row1 = [] # Obtient date_time et raster_path pour la ligne dans arcpy.SearchCursor(GRID_Table): # à partir de chaque entrée dans GRID_Table row1.append((row.DateTime, row.RasterPath)) # date_time = row1[0][0] # Définissez date_time sur le premier raster_path = row1[0][1] # entry out_path_shp = os.path.join(out_path, os.path.basename(raster_path)) # Générez # chemin de sortie. arcpy.sa.ExtractValuesToPoints(SPP_LMP_Points, raster_path, out_path_shp) arcpy.AddField_management(out_path_shp, "DateTime", "DATE") arcpy.CalculateField_management(out_path_shp, "DateTime", "!DateTime! = {0})".format , "PYTHON_9.3")

Tout cela fonctionne bien et ne signale aucune exception ou erreur. Le problème que j'ai est que l'appel à arcpy.CalculateField_management() ne remplit pas le champ DateTime. Au lieu de cela, j'obtiens une valeur NULL dans la table.

Des pensées?


Vous n'avez tout simplement pas tout à fait les guillemets dans votre expression. Vous avez besoin de guillemets doubles autour de votre datetime. Aussi, vous ne devriez pas avoir!DateHeure! =dans le cadre de celui-ci.

Essayer:

arcpy.CalculateField_management(out_path_shp, "DateTime", '"' + date_time + '"', "PYTHON_9.3")

Sur la base de la réponse d'Emil ci-dessous, j'ai pu trouver une réponse suffisante.

J'ai utilisé le code d'Emil, textuellement, et j'ai pu obtenir l'erreur suivante : "TypeError: can can catchate 'str' and 'datetime.datetime' objects"

La solution finale est la suivante (notez l'appel str()) :

arcpy.CalculateField_management(out_path_shp, "DateTime", '"' + str(date_time) + '"', "PYTHON_9.3")

Pour clarifier, le code ci-dessus entre les informations de date/heure dans un champ de classe d'entités "date" ArcGIS.


Voir la vidéo: Date and Time Field Calculations in Arcmap