Geodatabase et mp3

Vous connaissez les différents formats de champ? Il y a les entiers courts, les entiers longs, les réels simples, les réels doubles, les dates, les textuels.  Tous ces types de champs font partie des classes d’entités ShapeFile (Fichier de formes) et de la géodatabase.

D’autres types de champs font partie que de la géodatabase uniquement. Il y a les champs de type raster (images), les types GUID (identifiants globaux) et les BLOB (données binaires).

Si l'on se concentre sur ces derniers types de champs. À quoi peuvent-ils bien servir?

Raster (images) : un champ de ce type peut stocker les données raster. Donc une image peut être insérée directement dans une cellule d’une table.

GUID (Identifiants globaux) : un champ de ce type contient des chaînes de registre constituées de 36 caractères placés entre des accolades. Ces chaînes permettent d’identifier, de manière unique, une entité ou une ligne de table dans une géodatabase. BLOB (données binaires) : L’acronyme est Binary Large Object. Un champ de ce type peut contenir à peu près n’importe quoi de binaire. Par exemple une image, un fichier multimédia (sons et/ou vidéos), exécutable,etc. Même si ArcGIS utilise le type de champ binaire dans certains de ces traitements, il n’y a pas d’outils qui permettent d’insérer vos données dans un BLOB.  Cependant, vous pouvez utiliser un script Python pour le faire.  Voici le code :
import arcpy
#Fonction lit le fichier binaire
def encode(chFichier):
    fichierBinaire = open(chFichier, "rb").read()
    return fichierBinaire
 
#Fonction qui écrit la valeur en mémoire dans un fichier.
def decode(chFichierSortie, memview):
   open(chFichierSortie, "wb").write(memview.tobytes())
 
#Encodage
fc = r"D:\temp\MaGeo.gdb\test"
champ = ("mp3")
with arcpy.da.UpdateCursor(fc, champ) as cursor:
    for row in cursor:
            row[0] = encode("d:/temp/Sons.mp3")
            cursor.updateRow(row)
 #Décodage
with arcpy.da.SearchCursor(fc, champ) as cursor:
    for row in cursor:
            decode("d:/temp/Sons2.mp3", row[0])
Pour encoder, il suffit de lire un fichier binaire en mode binaire (évidemment). La ligne suivante permet de lire le fichier et de stocker le tout en mémoire. fichierBinaire = open(chFichier, "rb").read() Par la suite, le fichier en mémoire est mis dans la cellule.
with arcpy.da.UpdateCursor(fc, champ) as cursor:
    for row in cursor:
            row[0] = encode("d:/temp/Sons.mp3")
            cursor.updateRow(row)
Pour tester le tout, le fichier de sons en format mp3  est transféré de la cellule de la table en fichier mp3 sur le disque.
#Fonction qui écrit la valeur en mémoire dans un fichier.
def decode(chFichierSortie, memview):
    open(chFichierSortie, "wb").write(memview.tobytes())
 
#Decodage
with arcpy.da.SearchCursor(fc, champ) as cursor:
    for row in cursor:
            decode("d:/temp/Sons2.mp3", row[0])
Maintenant, vous pouvez utiliser les champs de type BLOB. Martin  
Vous avez du contenu à publier sur SigQuébec?

Communiquez avec le Webmestre.