Если у вас есть возможность драйвера PostGIS в пакете rgdal, тогда просто вопрос создания строки подключения и ее использования. Здесь я подключаюсь к своей локальной базе данных, gis
используя учетные данные по умолчанию, поэтому мой DSN довольно прост. Вам может понадобиться добавить хост, имя пользователя или пароль. Смотрите gdal документы для информации.
> require(rgdal)
> dsn="PG:dbname='gis'"
Какие таблицы в этой базе данных?
> ogrListLayers(dsn)
[1] "ccsm_polygons" "nongp" "WrldTZA"
[4] "nongpritalin" "ritalinmerge" "metforminmergev"
Получить один:
> polys = readOGR(dsn="PG:dbname='gis'","ccsm_polygons")
OGR data source with driver: PostgreSQL
Source: "PG:dbname='gis'", layer: "ccsm_polygons"
with 32768 features and 4 fields
Feature type: wkbMultiPolygon with 2 dimensions
Что у меня есть?
> summary(polys)
Object of class SpatialPolygonsDataFrame
Coordinates:
min max
x -179.2969 180.7031
y -90.0000 90.0000
Is projected: NA
proj4string : [NA]
Data attributes:
area perimeter ccsm_polys ccsm_pol_1
Min. :1.000 Min. :5.000 Min. : 2 Min. : 1
1st Qu.:1.000 1st Qu.:5.000 1st Qu.: 8194 1st Qu.: 8193
Median :1.000 Median :5.000 Median :16386 Median :16384
Mean :1.016 Mean :5.016 Mean :16386 Mean :16384
3rd Qu.:1.000 3rd Qu.:5.000 3rd Qu.:24577 3rd Qu.:24576
Max. :2.000 Max. :6.000 Max. :32769 Max. :32768
В противном случае вы можете использовать функциональность базы данных R и запрашивать таблицы напрямую.
> require(RPostgreSQL)
Loading required package: RPostgreSQL
Loading required package: DBI
> m <- dbDriver("PostgreSQL")
> con <- dbConnect(m, dbname="gis")
> q="SELECT ST_AsText(the_geom) AS geom from ccsm_polygons LIMIT 10;"
> rs = dbSendQuery(con,q)
> df = fetch(rs,n=-1)
Это возвращает геометрию объекта df$geom
, которую вам нужно преобразовать в sp
объекты класса (SpatialPolygons, SpatialPoints, SpatialLines), чтобы иметь с чем угодно. Функция readWKT в rgeos может помочь с этим.
Остерегайтесь вещей, таких как столбцы базы данных, которые нельзя сопоставить с типами данных R. Вы можете включить SQL в запрос для выполнения преобразований, фильтрации или ограничения. Это должно начать вас, хотя.
rgadl
? Я в Ubuntu 13.04 ...readOGR
методе использовать sql вместо полной таблицы?where
предложение и передать его в OGR через,setAttributeFilter
но все это должно быть сделано в коде на C и C ++ ...Если у вас есть данные в Postgis, не экспортируйте их в шейп-файл. С моей точки зрения, это своего рода шаг назад.
Вы можете запросить вашу базу данных postgis из R, используя операторы SQL, импортируя их как кадры данных, и, поскольку вы знакомы с R, выполните всю необходимую вам геостатистику. Я верю, что вы также можете экспортировать свой геостатистический результат обратно в postgis.
Используя SQL с функциями Postgis, вы также можете выполнять все виды пространственного анализа, такие как операции наложения, расстояния и так далее.
Для построения карт я бы использовал QGIS , программное обеспечение OpenSource GIS, которое может считывать postgis напрямую (насколько я знаю, что было первоначальной целью проекта), а в следующей версии 2.0 будет множество функций для создания великолепно выглядящих карт .
источник
Нововведенная SF-пакет (succesor из зр) обеспечивает
st_read()
иst_read_db()
функции. После этого урока и из моего опыта это быстрее, чем уже упомянутые способы. Поскольку sf, вероятно, заменит sp однажды, это также хороший вызов, чтобы посмотреть сейчас;)Вы также можете получить доступ к БД с помощью RPostgreSQL:
С помощью
st_write()
вы можете загружать данные.источник
Вы можете использовать все инструменты одновременно для каждого шага вашего решения.
Мы могли бы предоставить вам более конкретный ответ, если вы дадите нам более подробную информацию о вашей проблеме
источник
Я также пошел бы на комбинацию rgdal и RPostgreSQL. Таким образом, тот же код, что и у @Guillaume, за исключением tryCatch, который обрабатывает больше строк, псевдослучайное имя таблицы и использование незафиксированной таблицы для повышения производительности. (Примечание для себя: мы не можем использовать таблицу TEMP, потому что она не видна из readOGR)
Использование:
Но это все еще мучительно медленно:
Для небольшого набора полигонов (6 объектов, 22 поля):
Postgis часть:
часть readOGR:
источник
Теперь есть пакет RPostGIS , который может импортировать геомы PostGIS в R с помощью SQL-запросов.
источник
Вы также можете комбинировать rgdal и RPostreSQL. В этом примере функция создает временную таблицу с RPostgreSQL и отправляет ее в readOGR для вывода пространственного объекта. Это действительно неэффективно и некрасиво, но работает довольно хорошо. Обратите внимание, что запрос должен быть запросом SELECT, а пользователь должен иметь доступ для записи в базу данных.
Вы можете назвать это чем-то вроде:
источник
Если вы возвращаете запрос с ST_AsText (geom) как geomwkt и извлекаете результат в данные, вы можете использовать:
Все еще мучительно медленно ... 1 секунда для 100 гемов на тесте.
источник
Geotuple - https://github.com/rhansson/geotuple - это веб-приложение, которое соединяет R-Server и PostGIS (используя RPostgreSQL)
источник