Я пытаюсь прочитать таблицу непосредственно из файловой базы геоданных ESRI в R. Пример файла данных можно скачать здесь . База данных содержит класс точечных объектов (Zone9_2014_01_Broadcast) и две связанные таблицы (Zone9_2014_01_Vessel и Zone9_2014_01_Voyage). Вы можете прочитать шейп readOGR
- rgeos
файл в R используя пакет:
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")
Две связанные таблицы также показывают, когда вы используете ogrListLayers
или ogrInfo
. Однако ogrInfo
выдает предупреждение:
Предупреждающее сообщение: В ogrInfo («Zone9_2014_01.gdb», layer = «Zone9_2014_01_Vessel»): ogrInfo: все функции NULL
И если вы попытаетесь использовать readOGR
таблицы, вы получите ошибку:
vessel <- readOGR(dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel")
Ошибка в readOGR (dsn = "Zone9_2014_01.gdb", layer = "Zone9_2014_01_Vessel"): функции не найдены. Дополнительно: Предупреждение: в ogrInfo (dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv,: ogrInfo: все функции NULL
Таким образом, похоже, что readOGR может прочитать только географические объекты. Есть ли способ импортировать таблицы непосредственно в R или это единственный способ сначала экспортировать их из ArcGIS в виде файлов * .dbf (или * .txt), как в этом ответе?
Кроме того, если кто-то может предоставить вызовы из R в скрипт на python, который автоматизирует экспорт файлов * csv (предпочтительно) или * .dbf, это будет приемлемым решением. Решение просто должно быть масштабируемым и автоматизированным.
источник
arcgisbbinding
в R. Функцияarc.open()
откроет таблицу какarc.dataset-class object
. Чтобы открыть напрямую какdata.table
, используйте функциюarc.select
.Ответы:
Я немного опоздал на вечеринку, но теперь это можно прочитать
sf
, сОн возвращает предупреждение (геометрия объектов отсутствует), а также data.frame с таблицей. Смотрите тему, которая началась здесь: https://stat.ethz.ch/pipermail/r-sig-geo/2018-F февраль/026344.html
источник
sf
решение, и Google с радостью вернул меня на эту же вечеринку с очень полезным решением (поэтому я с радостью добавил свое возражение к этому вопросу).Я использую GDAL 2.0.2, который «поставляется» с поддержкой FDGB и без стороннего драйвера FGDB для исследования этого материала. Средой тестирования является Debian Jessie 64-bit.
Короче говоря, кажется, что «слой»
Zone9_2014_01_Vessel
содержит чистые данные атрибутов, а слойZone9_2014_01_Broadcast
содержит данные о положении. Вы можете использовать обходной путь в R с помощью системного вызова и диалога GDB с контейнером шейп-файлов (последний скрипт в конце ответа).Вот следственные действия:
Как видите, поле
Geometry
установлено наNone
. Вы можете преобразовать данные в файл формы, используяogr2ogr
и получить также только файл атрибута dbase:Геометрии (позиции) можно найти в слое
Zone9_2014_01_Broadcast
.Судно и рейс, не содержащие данных о местоположении в соответствии с протоколом сообщений AIS .
Вот полный обходной путь в R, использующий системный вызов для GDB, чтобы сформировать диалог и пакет
foreign
для чтения dbf:источник
Не уверен, что вы можете сделать это с помощью readOGR, но попробуйте
Если это не сработает, попробуйте
ogr2ogr
напрямую, который может экспортировать негеометрии в таблицу. (Возможно, попробуйте пакет R,gdalUtils
чтобы запустить его, как только у вас закончится процесс.)источник
readOGR
не имеет возможности читать таблицы GDB.Недавно была выпущена интеграция между R и ArcGIS от Esri, которая называется R ArcGIS Tools . Он обеспечивает интеграцию между R и ArcGIS, делая возможным взаимозаменяемый доступ к инструментам R и ресурсам ArcGIS. С помощью этой интеграции вы сможете получить доступ к классам / таблицам объектов базы геоданных.
Примеры инструментов R доступны здесь, а примеры инструментов, иллюстрирующих использование R в сценариях геообработки, здесь .
источник
Эта пользовательская функция в основном следует пути, обозначенному @huckfinn, но использует
gdalUtils
библиотеку, предложенную @mdsumner.Запустите это так:
Если вы еще не
gdal
установили, вам нужно установить его, чтобы обеспечить доступ кgdalUtils
. Вы можете найти двоичные файлы и инструкции по установке 'gdal' здесь .источник