Exportando recursos com anexos para uso fora do ArcGIS?

14

O ArcGIS 10 apresenta a nova capacidade de adicionar anexos a recursos individuais para classes de recursos armazenadas em um geodatabase. Um uso disso seria adicionar várias fotos a um local específico; os hidrantes parecem ser um exemplo popular (importante saber se você é um cachorro na Internet que precisa de um pit stop, suponho).

No banco de dados, a estrutura de uma classe de recurso ativada por anexo é dobrável em três partes:

  • a própria classe de recurso,
  • uma tabela contendo os anexos e os metadados associados (nome do arquivo, tamanho etc.) e
  • uma classe de relacionamento que define o relacionamento 1-para-muitos entre os dois.

os 3 itens que compõem uma classe de recurso habilitada para anexo

Minha pergunta é: como exportar esses dados - classe de recurso, anexos, metadados de anexo - para consumo fora do Arcgis? *

A exportação do FC é fácil, o FeatureClassToFeatureClass funciona da mesma maneira que em um FC sem anexo habilitado. Exportando a tabela de anexos? Não muito. TableToTable to output.dbf extrai apenas os metadados do arquivo anexado, para erros output.csv com tipo de campo não suportado e a tabela de informações de saída falha com um erro geral de campo.

Isso não é tão surpreendente, pois esses tipos de arquivo não suportam um tipo de dados de blob binário. Eu esperava encontrar uma ferramenta que convertesse os binários anexados em seu formato nativo, por exemplo,

tabela para diagrama do sistema de arquivos

Então, que tal? O que preciso fazer para divulgar os dados?

* Ironicamente, meu projeto do momento que gerou esse Q é exportar para uso no Arcgis, mas não no Arcgis Desktop ...

Matt Wilson
fonte

Respostas:

4

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

Para 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
fonte
obrigado ian! Isso funciona, mas é realmente apenas um ponto de partida para uma solução real. Os arquivos exportados são despejados em uma pasta comum, perdendo o relacionamento com o registro de origem. Nos comentários, há um método descrito para usar Record_ID como o nome do arquivo; muito tortuoso para mim e não acomoda vários anexos, mas é melhor que o padrão.
Matt Wilkie
Alguns mais recursos para ajudar com uma abordagem python: * forums.arcgis.com/threads/... * gist.github.com/oevans/6992139 * github.com/bgeomapping/arcgis-rest-toolbox
Matt Wilkie
3

Exportar GDB para XML (clicando com o botão direito do mouse em GDB> Exportar para XML) pode perfeitamente exportar recursos + anexos. Além disso, se você estiver procurando uma abordagem mais automatizada, o ArcGIS 10.1 apresenta uma nova caixa de ferramentas para exportação XML. Você pode importar XML para novos GDBs ou acessar diretamente todos os dados analisando-os para outros aplicativos.

Mojtaba Karami
fonte
1
Essa abordagem parece intrigante, no entanto, eu não tenho nenhuma ferramenta (acho) que poderia usar o .xml também. Então, eu estaria apenas trocando um formato opaco por outro. No entanto, pelo menos com .xml, há potencial para acessar e reutilizar. Explorarei esse caminho quando instalarmos o 10.1.
Matt Wilkie
2

Eu não tentei os próximos métodos, então apenas meus pensamentos sobre isso:

Se você preferir a API do ArcGIS .NET, pode usar o C # para exportar blobs para arquivos. Dê uma olhada neste trecho .

Também pode ser possível tentar exportar a tabela de anexos para o GDB pessoal e tentar exportar os blobs para lá. Da mesma maneira que você pode exportar para a tabela SDE e usar o DBMS (sql?) Para executá-lo.

Alex Markov
fonte