Jika Anda memiliki kemampuan driver PostGIS dalam paket rgdal maka itu hanya masalah membuat string koneksi dan menggunakannya. Di sini saya terhubung ke database lokal saya gis
menggunakan kredensial default, jadi DSN saya agak sederhana. Anda mungkin perlu menambahkan host, nama pengguna, atau kata sandi. Lihat gdal docs untuk info.
> require(rgdal)
> dsn="PG:dbname='gis'"
Tabel apa yang ada di database itu?
> ogrListLayers(dsn)
[1] "ccsm_polygons" "nongp" "WrldTZA"
[4] "nongpritalin" "ritalinmerge" "metforminmergev"
Dapatkan Satu:
> 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
Apa yang saya dapatkan?
> 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
Kalau tidak, Anda dapat menggunakan fungsionalitas database R dan meminta tabel secara langsung.
> 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)
Yang mengembalikan geometri fitur df$geom
, yang Anda harus mengkonversi ke sp
objek kelas (SpatialPolygons, SpatialPoints, SpatialLines) untuk melakukan apa saja dengan. Fungsi readWKT di rgeos dapat membantu dengan itu.
Hal-hal yang perlu diperhatikan biasanya adalah hal-hal seperti kolom basis data yang tidak dapat dipetakan ke tipe data R. Anda dapat memasukkan SQL dalam kueri untuk melakukan konversi, pemfilteran, atau pembatasan. Ini seharusnya membantu Anda memulai.
rgadl
? Saya di Ubuntu 13.04 ...readOGR
metode ini menggunakan sql, bukan tabel lengkap?where
klausa dan meneruskannya ke OGR melaluisetAttributeFilter
tetapi semua harus dilakukan dalam kode C dan C ++ ...Jika Anda memiliki data di Postgis, jangan mengekspornya ke shapefile. Dari sudut pandang saya, ini semacam langkah mundur.
Anda dapat meminta database postgis Anda dari R menggunakan pernyataan SQL, mengimpornya sebagai kerangka data dan, karena Anda terbiasa dengan R, lakukan semua geostatistik yang Anda butuhkan dari sana. Saya yakin Anda juga dapat mengekspor hasil geostatistik Anda kembali ke postgis.
Menggunakan SQL dengan Fungsi Postgis Anda juga dapat melakukan semua jenis analisis spasial, seperti operasi overlay, jarak, dan sebagainya.
Untuk memetakan peta, saya akan menggunakan QGIS , sebuah perangkat lunak OpenSource GIS, yang dapat membaca postgis secara langsung (sejauh yang saya tahu itu adalah tujuan awal proyek), dan versi 2.0 yang akan datang hadir dengan banyak fitur untuk menghasilkan peta yang tampak hebat .
sumber
Paket sf yang baru diperkenalkan (succesor sp) menyediakan
st_read()
danst_read_db()
fungsinya. Setelah tutorial ini dan dari pengalaman saya, ini lebih cepat daripada cara yang telah disebutkan. Karena sf mungkin akan menggantikan sp suatu hari itu juga merupakan panggilan yang baik untuk melihat sekarang;)Anda juga dapat mengakses DB menggunakan RPostgreSQL:
Dengan
st_write()
Anda dapat mengunggah data.sumber
Anda dapat menggunakan semua alat pada saat yang sama berdasarkan untuk setiap langkah untuk solusi Anda.
Kami dapat memberi Anda jawaban yang lebih spesifik jika Anda memberi kami lebih banyak detail dari masalah Anda
sumber
Saya juga akan menggunakan kombinasi rgdal dan RPostgreSQL. Jadi, kode yang sama dengan @Guillaume, kecuali dengan tryCatch yang menangani lebih banyak baris, nama tabel pseudo-acak dan penggunaan tabel yang tidak di-log untuk kinerja yang lebih baik. (Catatan untuk diri saya: kita tidak bisa menggunakan tabel TEMP, karena itu tidak terlihat dari readOGR)
Pemakaian:
Tapi, ini masih sangat lambat:
Untuk sekelompok kecil poligon (6 fitur, 22 bidang):
bagian postgis:
bagian readOGR:
sumber
Sekarang ada paket RPostGIS yang dapat mengimpor geom PostGIS ke R dengan query SQL.
sumber
Anda juga dapat menggabungkan rgdal dan RPostreSQL. Fungsi contoh ini membuat tabel sementara dengan RPostgreSQL dan mengirimkannya ke readOGR untuk output objek spasial. Ini benar-benar tidak efisien dan jelek, tetapi bekerja dengan cukup baik. Perhatikan bahwa kueri harus menjadi kueri SELECT dan pengguna harus memiliki akses tulis ke database.
Anda dapat menyebutnya dengan sesuatu seperti:
sumber
Jika Anda mengembalikan kueri dengan 'ST_AsText (geom) sebagai geomwkt' dan mengambil hasilnya menjadi data, Anda dapat menggunakan:
Masih sangat lambat .... 1 detik selama 100 geom pada tes.
sumber
Geotuple - https://github.com/rhansson/geotuple adalah aplikasi web yang menghubungkan R-Server dan PostGIS (menggunakan RPostgreSQL)
sumber