Se você possui a capacidade do driver PostGIS no pacote rgdal, é apenas uma questão de criar uma string de conexão e usá-la. Aqui estou me conectando ao meu banco de dados local gis
usando credenciais padrão, portanto meu DSN é bastante simples. Pode ser necessário adicionar um host, nome de usuário ou senha. Veja os documentos da gdal para obter informações.
> require(rgdal)
> dsn="PG:dbname='gis'"
Quais tabelas estão nesse banco de dados?
> ogrListLayers(dsn)
[1] "ccsm_polygons" "nongp" "WrldTZA"
[4] "nongpritalin" "ritalinmerge" "metforminmergev"
Pegue um:
> 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
O que eu tenho?
> 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
Caso contrário, você pode usar a funcionalidade do banco de dados de R e consultar as tabelas diretamente.
> 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)
Isso retorna a geometria do recurso df$geom
, na qual você precisará converter em sp
objetos de classe (SpatialPolygons, SpatialPoints, SpatialLines) para fazer qualquer coisa. A função readWKT nos rgeos pode ajudar com isso.
O que você deve observar são coisas como colunas de banco de dados que não podem ser mapeadas para tipos de dados R. Você pode incluir SQL na consulta para fazer conversões, filtrar ou limitar. Isso deve ajudá-lo a começar.
rgadl
? Estou no Ubuntu 13.04 ...readOGR
método é possível usar um sql em vez de uma tabela completa?where
cláusula e passar isso para OGR viasetAttributeFilter
, mas que todos tem que ser feito em código C e C ++ ...Se você possui dados no Postgis, não os exporte para o shapefile. Do meu ponto de vista, é meio que um passo atrás.
Você pode consultar seu banco de dados postgis a partir do R usando instruções SQL, importando-os como quadros de dados e, como você está familiarizado com o R, faça todas as geoestatísticas necessárias a partir daí. Acredito que você também pode exportar seu resultado geoestatístico de volta para postgis.
Usando SQL com funções Postgis, você também pode fazer todo o tipo de análise espacial, como operações de sobreposição, distâncias e assim por diante.
Para a plotagem de mapas, eu usaria o QGIS , um software GIS de código aberto, que pode ler postgis diretamente (até onde eu sei que era o objetivo inicial do projeto), e a próxima versão 2.0 vem com muitos recursos para produzir mapas de ótima aparência .
fonte
O recém-introduzido pacote sf (sucessor de sp) fornece as funções
st_read()
est_read_db()
. Após este tutorial e pela minha experiência, é mais rápido do que as formas já mencionadas. Como o sf provavelmente substituirá sp um dia, também é uma boa ideia dar uma olhada agora;)você também pode acessar o banco de dados usando o RPostgreSQL:
Com
st_write()
você pode fazer upload de dados.fonte
Você pode usar todas as ferramentas ao mesmo tempo com base em cada etapa da sua solução.
Poderíamos fornecer uma resposta mais específica se você nos desse mais detalhes sobre o seu problema
fonte
Eu também usaria uma combinação de rgdal e RPostgreSQL. Portanto, o mesmo código que o @Guillaume, exceto com um tryCatch que lida com mais linhas, um nome de tabela pseudoaleatório e o uso de uma tabela não registrada para obter melhor desempenho. (Observação: não podemos usar a tabela TEMP, porque não é visível no readOGR)
Uso:
Mas isso ainda é dolorosamente lento:
Para um pequeno conjunto de polígonos (6 recursos, 22 campos):
parte postgis:
parte readOGR:
fonte
Agora existe um pacote RPostGIS que pode importar geoms PostGIS para o R com consultas SQL.
fonte
Você também pode combinar rgdal e RPostreSQL. Esta função de exemplo cria uma tabela temporária com o RPostgreSQL e a envia ao readOGR para a saída de um objeto espacial. Isso é realmente ineficiente e feio, mas funciona muito bem. Observe que a consulta deve ser uma consulta SELECT e o usuário precisa ter acesso de gravação ao banco de dados.
Você pode chamá-lo com algo como:
fonte
Se você retornar uma consulta com 'ST_AsText (geom) como geomwkt' e buscar o resultado nos dados, poderá usar:
Ainda é dolorosamente lento .... 1 segundo para 100 geoms em um teste.
fonte
Geotuple - https://github.com/rhansson/geotuple é um aplicativo da web que conecta o R-Server e o PostGIS (usando o RPostgreSQL)
fonte