Advertisement
Guest User

Untitled

a guest
Apr 13th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. > require(rgdal)
  2. > dsn="PG:dbname='gis'"
  3.  
  4. > ogrListLayers(dsn)
  5. [1] "ccsm_polygons" "nongp" "WrldTZA"
  6. [4] "nongpritalin" "ritalinmerge" "metforminmergev"
  7.  
  8. > polys = readOGR(dsn="PG:dbname='gis'","ccsm_polygons")
  9. OGR data source with driver: PostgreSQL
  10. Source: "PG:dbname='gis'", layer: "ccsm_polygons"
  11. with 32768 features and 4 fields
  12. Feature type: wkbMultiPolygon with 2 dimensions
  13.  
  14. > summary(polys)
  15. Object of class SpatialPolygonsDataFrame
  16. Coordinates:
  17. min max
  18. x -179.2969 180.7031
  19. y -90.0000 90.0000
  20. Is projected: NA
  21. proj4string : [NA]
  22. Data attributes:
  23. area perimeter ccsm_polys ccsm_pol_1
  24. Min. :1.000 Min. :5.000 Min. : 2 Min. : 1
  25. 1st Qu.:1.000 1st Qu.:5.000 1st Qu.: 8194 1st Qu.: 8193
  26. Median :1.000 Median :5.000 Median :16386 Median :16384
  27. Mean :1.016 Mean :5.016 Mean :16386 Mean :16384
  28. 3rd Qu.:1.000 3rd Qu.:5.000 3rd Qu.:24577 3rd Qu.:24576
  29. Max. :2.000 Max. :6.000 Max. :32769 Max. :32768
  30.  
  31. > require(RPostgreSQL)
  32. Loading required package: RPostgreSQL
  33. Loading required package: DBI
  34. > m <- dbDriver("PostgreSQL")
  35. > con <- dbConnect(m, dbname="gis")
  36. > q="SELECT ST_AsText(the_geom) AS geom from ccsm_polygons LIMIT 10;"
  37. > rs = dbSendQuery(con,q)
  38. > df = fetch(rs,n=-1)
  39.  
  40. dbGetSp <- function(dbInfo,query) {
  41. if(!require('rgdal')|!require(RPostgreSQL))stop('missing rgdal or RPostgreSQL')
  42. d <- dbInfo
  43. tmpTbl <- sprintf('tmp_table_%s',round(runif(1)*1e5))
  44. dsn <- sprintf("PG:dbname='%s' host='%s' port='%s' user='%s' password='%s'",
  45. d$dbname,d$host,d$port,d$user,d$password
  46. )
  47. drv <- dbDriver("PostgreSQL")
  48. con <- dbConnect(drv, dbname=d$dbname, host=d$host, port=d$port,user=d$user, password=d$password)
  49. tryCatch({
  50. sql <- sprintf("CREATE UNLOGGED TABLE %s AS %s",tmpTbl,query)
  51. res <- dbSendQuery(con,sql)
  52. nr <- dbGetInfo(res)$rowsAffected
  53. if(nr<1){
  54. warning('There is no feature returned.');
  55. return()
  56. }
  57. sql <- sprintf("SELECT f_geometry_column from geometry_columns WHERE f_table_name='%s'",tmpTbl)
  58. geo <- dbGetQuery(con,sql)
  59. if(length(geo)>1){
  60. tname <- sprintf("%s(%s)",tmpTbl,geo$f_geometry_column[1])
  61. }else{
  62. tname <- tmpTbl;
  63. }
  64. out <- readOGR(dsn,tname)
  65. return(out)
  66. },finally={
  67. sql <- sprintf("DROP TABLE %s",tmpTbl)
  68. dbSendQuery(con,sql)
  69. dbClearResult(dbListResults(con)[[1]])
  70. dbDisconnect(con)
  71. })
  72. }
  73.  
  74. d=list(host='localhost', dbname='spatial_db', port='5432', user='myusername', password='mypassword')
  75. spatialObj<-dbGetSp(dbInfo=d,"SELECT * FROM spatial_table")
  76.  
  77. user system elapsed
  78. 0.001 0.000 0.008
  79.  
  80. user system elapsed
  81. 0.313 0.021 1.436
  82.  
  83. RPostGIS <- function(coninfo,query) {
  84. dsn=paste("PG:dbname='",coninfo$dbname,"' host='",coninfo$host,"' port='",coninfo$port,"' user='",coninfo$user,"' password='",coninfo$password,"'", sep='')
  85. drv <- dbDriver("PostgreSQL")
  86. con <- dbConnect(drv, user=coninfo$user, password=coninfo$password, dbname=coninfo$dbname)
  87. res <- dbSendQuery(con,paste('CREATE TABLE tmp1209341251dva1 AS ',query,sep=''))
  88. geo <- dbGetQuery(con,"SELECT f_geometry_column from geometry_columns WHERE f_table_name='tmp1209341251dva1'")
  89. if(length(geo)>1){
  90. tname=paste("tmp1209341251dva1(",geo$f_geometry_column[1],")")
  91. }else{
  92. tname="tmp1209341251dva1";
  93. }
  94. out <- tryCatch(readOGR(dsn,tname), finally=dbSendQuery(con,'DROP TABLE tmp1209341251dva1'))
  95. dbDisconnect(con)
  96. return(out)
  97. }
  98.  
  99. > require('rgdal')
  100. > require('RPostgreSQL')
  101. > coninfo=list(host='localhost',dbname='spatial_db',port='5432',user='myusername',password='mypassword')
  102. > spatial_obj<-RPostGIS(coninfo,"SELECT * FROM spatial_table")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement