Vous exportez des entités avec des pièces jointes pour les utiliser en dehors d'ArcGIS?

14

ArcGIS 10 offre la nouvelle possibilité d' ajouter des pièces jointes à des entités individuelles aux classes d' entités stockées dans une géodatabase. Une utilisation de cela serait d'ajouter plusieurs photos à un endroit spécifique, les bornes d'incendie semblent être un exemple populaire (important de savoir si vous êtes un chien sur Internet qui a besoin d'un arrêt au stand je suppose).

Dans la base de données, la structure d'une classe d'entités activée pour les pièces jointes est triple:

  • la classe d'entités elle-même,
  • un tableau contenant les pièces jointes et les métadonnées associées (nom de fichier, taille, etc.), et
  • une classe de relations définissant la relation 1 à plusieurs entre les deux.

les 3 éléments qui composent une classe d'entités activée par pièce jointe

Ma question est: comment exporter ces données - classe d'entités , pièces jointes, métadonnées de pièce jointe - pour une consommation en dehors d'Arcgis? *

L'exportation du FC est facile, FeatureClassToFeatureClass fonctionne de la même manière que sur un FC sans attachement activé. Vous exportez la table des pièces jointes? Pas tellement. TableToTable vers output.dbf extrait uniquement les métadonnées du fichier joint, les erreurs output.csv avec un type de champ non pris en charge et la sortie du tableau d' informations échoue avec une erreur de champ générale.

Ce n'est pas si surprenant que ces types de fichiers ne prennent pas en charge un type de données blob binaire. Je m'attendais / espérais trouver un outil qui convertirait les binaires attachés dans leur format natif, par exemple

tableau du schéma du système de fichiers

Et alors? Que dois-je faire pour extraire les données?

* ironiquement mon projet du moment qui a donné naissance à ce Q est d'exporter pour une utilisation au sein d'Arcgis, mais pas d'Arcgis Desktop ...

Matt Wilkie
la source

Réponses:

4

http://support.esri.com/em/knowledgebase/techarticles/detail/41763

Pour ArcGIS 10.1+

from arcpy import da
import os

inTable = arcpy.GetParameterAsText(0)
fileLocation = arcpy.GetParameterAsText(1)

with da.SearchCursor(inTable,['DATA','ATT_NAME']) as cursor:
   for row in cursor:
      binaryRep = row[0]
      fileName = row[1]
      # save to disk
      open(fileLocation + os.sep + fileName, 'wb').write(binaryRep.tobytes())
      del row
      del binaryRep
      del fileName
ianbroad
la source
merci ian! Cela fonctionne, mais n'est vraiment qu'un point de départ vers une vraie solution. Les fichiers exportés sont simplement vidés dans un dossier commun, perdant la relation avec l'enregistrement source. Dans les commentaires, il existe une méthode décrite pour utiliser Record_ID comme nom de fichier; trop détourné pour moi, et ne prend pas en charge plusieurs pièces jointes, mais c'est mieux que la valeur par défaut.
matt wilkie
Quelques ressources supplémentaires pour vous aider avec une approche python: * forums.arcgis.com/threads/… * gist.github.com/oevans/6992139 * github.com/bgeomapping/arcgis-rest-toolbox
matt wilkie
3

L'exportation de GDB vers XML (en faisant un clic droit sur GDB> Exporter vers XML) peut parfaitement exporter des fonctionnalités + pièces jointes. De plus, si vous recherchez une approche plus automatisée, ArcGIS 10.1 propose une nouvelle boîte à outils pour l'exportation XML. Vous pouvez importer du XML dans de nouveaux GDB ou accéder directement à toutes ses données en les analysant pour d'autres applications.

Mojtaba Karami
la source
1
Cette approche semble intrigante, mais je n'ai pas d'outils (je ne pense pas) qui pourraient utiliser le .xml non plus. Je ne ferais donc que troquer un format opaque contre un autre. Cependant, au moins avec .xml, il existe un potentiel d'accès et de réutilisation. J'explorerai ce chemin lorsque nous aurons déployé la version 10.1.
Matt Wilkie
2

Je n'ai pas essayé les méthodes suivantes, alors juste mes pensées à ce sujet:

Si vous êtes à l'aise avec ArcGIS .NET API, vous pouvez utiliser C # pour exporter des objets blob vers des fichiers. Jetez un œil à cet extrait .

Vous pouvez également essayer d'exporter la table des pièces jointes vers Personal GDB, puis d'y exporter des objets blob. De la même manière, vous pouvez exporter vers la table SDE et utiliser votre SGBD (sql?) Pour l'exécuter.

Alex Markov
la source