Estou tentando ler uma tabela diretamente de um geodatabase de arquivo ESRI para R. Um arquivo de dados de exemplo pode ser baixado aqui . O banco de dados contém uma classe de recurso de ponto (Zone9_2014_01_Broadcast) e duas tabelas vinculadas (Zone9_2014_01_Vessel e Zone9_2014_01_Voyage). Você pode ler o shapefile no R usando readOGR
o rgeos
pacote:
library(rgeos)
library(downloader)
download("https://coast.noaa.gov/htdata/CMSP/AISDataHandler/2014/01/Zone9_2014_01.zip", dest="Zone9_2014_01.zip", mode="wb")
unzip("Zone9_2014_01.zip", exdir = ".")
# Not Run (loads large point file)
# broadcast <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Broadcast")
As duas tabelas vinculadas também são exibidas quando você usa ogrListLayers
ou ogrInfo
. No entanto, ogrInfo
emite um aviso:
Mensagem de aviso: No ogrInfo ("Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel"): ogrInfo: todos os recursos NULL
E se você tentar usar readOGR
nas tabelas, receberá um erro:
vessel <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel")
Erro no readOGR (dsn = "Zone9_2014_01.gdb", camada = "Zone9_2014_01_Vessel"): nenhum recurso encontrado Além disso: Mensagem de aviso: No ogrInfo (dsn = dsn, camada = camada, codificação = codificação, use_iconv = use_iconv,: ogrInfo: todos os recursos NULL
Assim, parece que apenas características geográficas podem ser lidas pelo readOGR. Existe alguma maneira de importar as tabelas diretamente para o R ou a única solução para exportá-las primeiro do ArcGIS como arquivos * .dbf (ou * .txt), como nesta resposta?
Além disso, se alguém puder fornecer chamadas de R para um script python que automatize a exportação de arquivos * csv (preferencialmente) ou * .dbf, isso seria uma solução alternativa aceitável. A solução só precisa ser escalável e automatizada.
fonte
arcgisbbinding
em R. A funçãoarc.open()
abrirá a tabela como umarc.dataset-class object
. Para abrir diretamente comodata.table
, use a funçãoarc.select
.Respostas:
Estou um pouco atrasado para a festa, mas isso agora pode ser lido por
sf
, comEle retorna um aviso (sem geometrias de recursos presentes), mas também um data.frame com a tabela. Veja o tópico iniciado aqui: https://stat.ethz.ch/pipermail/r-sig-geo/2018-February/026344.html
fonte
sf
solução e o Google me trouxe de volta a essa mesma festa com uma solução super útil (então, adicionei meu voto positivo a essa pergunta).Eu uso o GDAL 2.0.2 "enviado" com suporte a FDGB e sem terceiros um driver FGDB para investigar essas coisas. O ambiente de teste é o Debian Jessie de 64 bits.
Em suma, parece que a "camada"
Zone9_2014_01_Vessel
contém dados puros de atributos e a camadaZone9_2014_01_Broadcast
contém dados de posição. Você pode usar uma solução alternativa no R por meio de uma chamada do sistema e da conversa do GDB em um contêiner de shapefile (último script no final da resposta).Aqui estão as etapas de investigação:
Como você vê o campo
Geometry
está definido comoNone
. Você pode converter os dados em um arquivo de forma usandoogr2ogr
e obter também apenas um arquivo de atributo dbase:Geometrias (posições) podem ser encontradas na camada
Zone9_2014_01_Broadcast
.Navio e Voyage que não contêm dados de posição de acordo com o protocolo de mensagens AIS .
Aqui está a solução completa em R usando uma chamada de sistema para o GDB moldar a conversa e o pacote
foreign
para ler os dbf's:fonte
Não tenho certeza se você pode fazer isso com o readOGR, mas tente
Se isso não funcionar, tente
ogr2ogr
diretamente, o que pode exportar não geometrias para a tabela. (Talvez tente o pacote RgdalUtils
para executá-lo, depois que o processo for interrompido.)fonte
readOGR
não tem a capacidade de ler tabelas gdb.Há uma integração lançada recentemente entre o R e o ArcGIS da Esri, chamada R ArcGIS Tools . Ele fornece integração entre o R e o ArcGIS, possibilitando o acesso intercambiável às ferramentas R e aos recursos do ArcGIS. Você deve poder acessar classes / tabelas de recursos do geodatabase com essa integração.
As ferramentas R de amostra estão disponíveis aqui e as ferramentas de amostra que ilustram o uso de R nos scripts de geoprocessamento estão aqui .
fonte
Essa função personalizada basicamente segue o caminho descrito por @huckfinn, mas usa a
gdalUtils
biblioteca sugerida por @mdsumner.Execute-o assim:
Se você ainda não tiver
gdal
instalado, será necessário instalá-lo para fornecer acessogdalUtils
. Você pode encontrar binários e instruções para a instalação do 'gdal' aqui .fonte