Próbuję odczytać tabelę bezpośrednio z geobazy bazy danych pliku ESRI do R. Przykładowy plik danych można pobrać tutaj . Baza danych zawiera punktową klasę obiektów (Zone9_2014_01_Broadcast) i dwie połączone tabele (Zone9_2014_01_Vessel i Zone9_2014_01_Voyage). Możesz odczytać plik kształtu w R, używając readOGR
z rgeos
pakietu:
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")
Dwie połączone tabele pokazują także, kiedy używasz ogrListLayers
lub ogrInfo
. Jednak ogrInfo
daje ostrzeżenie:
Komunikat ostrzegawczy: W ogrInfo („Zone9_2014_01.gdb”, layer = „Zone9_2014_01_Vessel”): ogrInfo: wszystkie funkcje NULL
A jeśli spróbujesz użyć readOGR
na stołach, pojawi się błąd:
vessel <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel")
Błąd w readOGR (dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel"): nie znaleziono funkcji Ponadto: komunikat ostrzegawczy: W ogrInfo (dsn = dsn, layer = warstwa, kodowanie = kodowanie, use_iconv = use_iconv,: ogrInfo: wszystkie funkcje NULL
Wydaje się zatem, że readOGR odczytuje tylko cechy geograficzne. Czy istnieje sposób na zaimportowanie tabel bezpośrednio do R lub czy jest to jedyne rozwiązanie, aby je najpierw wyeksportować z ArcGIS jako pliki * .dbf (lub * .txt), jak w tej odpowiedzi?
Jako dodatek, jeśli ktokolwiek może dostarczyć wywołania z R do skryptu Pythona, który automatyzuje eksport plików * csv (najlepiej) lub * .dbf, byłoby to możliwe do obejścia. Rozwiązanie musi być skalowalne i zautomatyzowane.
źródło
arcgisbbinding
w R. Funkcjaarc.open()
otworzy tabelę jakoarc.dataset-class object
. Aby otworzyć bezpośrednio jakodata.table
, użyj funkcjiarc.select
.Odpowiedzi:
Jestem trochę spóźniony na imprezę, ale teraz można to odczytać za
sf
pomocąZwraca ostrzeżenie (brak geometrii elementu), ale także ramkę data.frame z tabelą. Zobacz wątek, który zaczął się tutaj: https://stat.ethz.ch/pipermail/r-sig-geo/2018-Febour/026344.html
źródło
sf
rozwiązania i Google z radością przywiodło mnie z powrotem na tę samą imprezę z super pomocnym rozwiązaniem (więc z radością dodałem opinię o tym pytaniu).Używam GDAL 2.0.2, który jest „dostarczany” ze wsparciem FDGB i bez zewnętrznego sterownika FGDB do zbadania tego. Środowisko testowe to Debian Jessie 64-bit.
Krótko mówiąc, wydaje się, że „warstwa”
Zone9_2014_01_Vessel
zawiera czyste dane atrybutów, a warstwaZone9_2014_01_Broadcast
zawiera dane pozycji. Możesz użyć obejścia w obrębie R za pomocą wywołania systemowego i konwersacji GDB do kontenera plików kształtu (ostatni skrypt na końcu odpowiedzi).Oto kroki dochodzenia:
Jak widzisz, pole
Geometry
jest ustawione naNone
. Możesz przekonwertować dane do pliku kształtu za pomocąogr2ogr
i uzyskać również tylko plik atrybutu dbase:Geometrie (pozycje) można znaleźć w warstwie
Zone9_2014_01_Broadcast
.Statek i podróż nie zawierające danych pozycji zgodnie z protokołem komunikatów AIS .
Oto pełne obejście w R przy użyciu wywołania systemowego dla GDB do kształtowania konwersacji i pakietu
foreign
do odczytu dbf:źródło
Nie jestem pewien, czy możesz to zrobić za pomocą readOGR, ale spróbuj
Jeśli to nie zadziała, spróbuj
ogr2ogr
bezpośrednio, aby wyeksportować nie-geometrie do tabeli. (Może wypróbuj pakiet R,gdalUtils
aby go uruchomić, gdy już zakończysz proces.)źródło
readOGR
nie ma możliwości odczytu tabel gdb.Niedawno wydana została integracja między R i ArcGIS firmy Esri, zwana R ArcGIS Tools . Zapewnia integrację między R i ArcGIS, umożliwiając wymienny dostęp do narzędzi R i zasobów ArcGIS. Dzięki tej integracji powinieneś mieć dostęp do klas obiektów / tabel geobazy.
Przykładowe narzędzia R są dostępne tutaj, a przykładowe narzędzia ilustrujące użycie R w skryptach geoprzetwarzania są tutaj .
źródło
Ta funkcja niestandardowa zasadniczo podąża ścieżką opisaną przez @huckfinn, ale korzysta z
gdalUtils
biblioteki sugerowanej przez @mdsumner.Uruchom tak:
Jeśli jeszcze tego nie masz
gdal
zrobiłeś, musisz go zainstalować, aby zapewnić dostęp dogdalUtils
. Pliki binarne i instrukcje instalacji „gdal” można znaleźć tutaj .źródło