J'essaie de lire une table directement d'une géodatabase fichier ESRI dans R. Un exemple de fichier de données peut être téléchargé ici . La base de données contient une classe d'entités ponctuelles (Zone9_2014_01_Broadcast) et deux tables liées (Zone9_2014_01_Vessel et Zone9_2014_01_Voyage). Vous pouvez lire le fichier de formes dans R à l'aide readOGR
du rgeos
package:
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")
Les deux tableaux liés indiquent également quand vous utilisez ogrListLayers
ou ogrInfo
. Cependant, ogrInfo
donne un avertissement:
Message d'avertissement: Dans ogrInfo ("Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel"): ogrInfo: toutes les fonctionnalités NULL
Et si vous essayez d'utiliser readOGR
sur les tables, vous obtenez une erreur:
vessel <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel")
Erreur dans readOGR (dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel"): aucune fonctionnalité trouvée En outre: Message d'avertissement: dans ogrInfo (dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv,: ogrInfo: toutes les fonctionnalités NULL
Ainsi, il apparaît que seules les caractéristiques géographiques peuvent être lues par readOGR. Existe-t-il un moyen d'importer les tables directement dans R ou est-ce la seule solution pour les exporter d'abord depuis ArcGIS en tant que fichiers * .dbf (ou * .txt) comme dans cette réponse?
En outre, si quelqu'un peut fournir des appels de R à un script python qui automatise l'exportation de fichiers * csv (de préférence) ou * .dbf, ce serait une solution de contournement acceptable. La solution doit simplement être évolutive et automatisée.
arcgisbbinding
en R. La fonction arc.open()
ouvrira la table en tant que arc.dataset-class object
. Pour ouvrir directement en tant que data.table
, utilisez la fonction arc.select
.