Bladeren bron

Initial commit.

Ardo Kubjas 4 jaren geleden
bovenliggende
commit
d8e635ed12

+ 3 - 0
.Rbuildignore

@@ -0,0 +1,3 @@
+^.*\.Rproj$
+^\.Rproj\.user$
+^ardo/

+ 8 - 0
.gitignore

@@ -0,0 +1,8 @@
+.Rproj.user
+.Rhistory
+.RData
+.Ruserdata
+
+Rplot*.*
+ardo/tmp
+man/

+ 14 - 0
DESCRIPTION

@@ -0,0 +1,14 @@
+Package: transpordiTsoonid
+Type: Package
+Title: Transporditsoonid
+Version: 0.1.0
+Author: Ardo Kubjas
+Maintainer: The package maintainer <ardo.kubjas@gmail.com>
+Description: Transporditsoonide arvutamisega seotud funktsioond.
+    Elanike arvude jaotamine tsoonide vahel. 
+License: GPL-2
+Encoding: UTF-8
+LazyData: true
+Imports: rgeos, geosphere, sp, methods, DBI, RPostgres, RPostgreSQL, magrittr, utils
+Roxygen: list(markdown = TRUE)
+RoxygenNote: 6.0.1

+ 21 - 0
NAMESPACE

@@ -0,0 +1,21 @@
+# Generated by roxygen2: do not edit by hand
+
+export(area2SpatialPolygonsDataFrame)
+export(centroid2SpatialPolygonsDataFrame)
+export(df2PostgresReplaceFieldsArray)
+export(dfNamesToLower)
+export(isObjectSpatialPolygonsDataFrame)
+export(myPostgresConnect)
+export(myPostgresCreateGisDb)
+export(myPostgresDropTable)
+export(myPostgresImprotShp)
+export(ogr2postgis)
+export(perimeter2SpatialPolygonsDataFrame)
+export(projection2WGS84)
+export(queryAddColumnsToPostgresDbAccordingDF)
+export(queryDropColumnsFromPostgresDbAccordingDF)
+export(queryWithGeom)
+export(queryWithoutGeom)
+export(spPolygons2SpLines)
+export(spPolygonsOutline)
+export(wkt)

+ 24 - 0
R/area2SpatialPolygonsDataFrame.R

@@ -0,0 +1,24 @@
+#' Add polygon area value to Spdf
+#' @details Polügooni pindala (ruutmeetrites) lisamine SpatialPolygonsDataFrame objektile. Andmetele lisatakse veerg "area".
+#' @param spdf object with class "SpatialPolygonsDataFrame".
+#' @return area Polygon area value in square meters.
+#' @seealso \code{\link{isObjectSpatialPolygonsDataFrame}}, \code{\link{centroid2SpatialPolygonsDataFrame}},
+#' \code{\link{projection2WGS84}}, \code{\link{area2SpatialPolygonsDataFrame}},
+#' \code{\link{perimeter2SpatialPolygonsDataFrame}}, \code{\link{spPolygonsOutline}}
+#' @examples \dontrun{
+#' load(rahvaarv)
+#' rahvaarv <- area2SpatialPolygonsDataFrame(spdf = rahvaarv)
+#' rahvaarv@data$area
+#'
+#' }
+#'
+#' @export
+#'
+
+area2SpatialPolygonsDataFrame <- function(spdf) {
+  isObjectSpatialPolygonsDataFrame(spdf)
+  # Area
+  # spdf@data$area <- sapply(slot(spdf, "polygons"), function(x) sapply(slot(x, "Polygons"), slot, "area"))
+  spdf@data$area <- geosphere::areaPolygon(spdf)
+  return(spdf)
+}

+ 26 - 0
R/centroid2SpatialPolygonsDataFrame.R

@@ -0,0 +1,26 @@
+#' Add centroid values to Spdf
+#' @details Funktsioon keskpunkti (tsentroidi) lisamiseks shp polügoonile. Andmetele lisatakse veerud: centroid_x ja centroid_y.
+#' @param spdf object with class "SpatialPolygonsDataFrame".
+#' @return centroid_x Centroid longitude value.
+#' @return centroid_y Centroid latitude value.
+#' @seealso \code{\link{isObjectSpatialPolygonsDataFrame}}, \code{\link{centroid2SpatialPolygonsDataFrame}},
+#' \code{\link{projection2WGS84}}, \code{\link{area2SpatialPolygonsDataFrame}},
+#' \code{\link{perimeter2SpatialPolygonsDataFrame}}, \code{\link{spPolygonsOutline}}
+#' @examples \dontrun{
+#' load(rahvaarv)
+#' rahvaarv <- centroid2SpatialPolygonsDataFrame(spdf = rahvaarv)
+#' rahvaarv@data[,c("centroid_x", "centroid_x")]
+#'
+#' }
+#'
+#' @export
+#'
+
+centroid2SpatialPolygonsDataFrame <- function(spdf) {
+  isObjectSpatialPolygonsDataFrame(spdf)
+  spdf@data$centroid_y <- spdf@data$centroid_x <- NA
+  # Keskpunkt
+  spdf@data$centroid_x <- geosphere::centroid(spdf)[,1]
+  spdf@data$centroid_y <- geosphere::centroid(spdf)[,2]
+  return(spdf)
+}

+ 15 - 0
R/df2PostgresReplaceFieldsArray.R

@@ -0,0 +1,15 @@
+#' Named array for converting DataFrame column types into Postgresql column types
+#' @details Nimedega vektor mille abil on võimalik konverteerida dataframe'i objekt veergude
+#' tüübid vastavaks postgresql veergude tüüpideks.
+#' @return named array.
+#' @seealso \code{\link{dfNamesToLower}}, \code{\link{df2PostgresReplaceFieldsArray}}
+#' @examples \dontrun{
+#' df2PostgresReplaceFieldsArray
+#'
+#' }
+#'
+#' @export
+#'
+
+df2PostgresReplaceFieldsArray <- c('character'="VARCHAR", 'double' = "double precision", 'integer' = "integer",
+                                   'date' = "date")

+ 28 - 0
R/dfNamesToLower.R

@@ -0,0 +1,28 @@
+#' Changes DataFrame colnames to lower and remove punctuation.
+#' @details Dataframe veergude nimede muutmine väikesteks tähtedeks ja "." asendamine alakriipsuga.
+#' Kasuta funktsiooni kui soovid DataFrame objekti salvestada Postgres andmebaasi koos veergude
+#' nimedega.
+#' @param df DataFrame.
+#' @return array with the changed column names.
+#' @seealso \code{\link{dfNamesToLower}}, \code{\link{df2PostgresReplaceFieldsArray}}
+#' @examples \dontrun{
+#' L3 <- LETTERS[1:3]
+#' fac <- sample(L3, 10, replace = TRUE)
+#' (d <- data.frame(x = 1, y = 1:10, FAC.XXX = fac))
+#' dfNamesToLower(df = d)
+#' colnames(d) <- dfNamesToLower(df = d)
+#' d
+#'
+#' }
+#'
+#' @export
+#'
+
+dfNamesToLower <- function(df) {
+  res <- sapply(1:ncol(df), function(x) {
+    gsub("[.]", "_", tolower(names(df)[x]))
+  })
+  message(paste0("DataFrame'i veeru nimed on muudetud importimiseks postgresql andmebaasi.
+Uued nimed:"), paste(res, collapse = ", "))
+  res
+}

+ 22 - 0
R/isObjectSpatialPolygonsDataFrame.R

@@ -0,0 +1,22 @@
+#' Is object class "SpatialPolygonsDataFrame"
+#' @details Alamfunktsioon objekti klassi kontrollimiseks. Objekti klass peab olema "SpatialPolygonsDataFrame".
+#' @param obj Spatial object.
+#' @return TRUE/FALSE.
+#' @seealso \code{\link{isObjectSpatialPolygonsDataFrame}}, \code{\link{centroid2SpatialPolygonsDataFrame}},
+#' \code{\link{projection2WGS84}}, \code{\link{area2SpatialPolygonsDataFrame}},
+#' \code{\link{perimeter2SpatialPolygonsDataFrame}}, \code{\link{spPolygonsOutline}}
+#' @examples \dontrun{
+#' load(rahvaarv)
+#' isObjectSpatialPolygonsDataFrame(obj = rahvaarv)
+#' }
+#'
+#' @export
+#'
+
+isObjectSpatialPolygonsDataFrame <- function(obj) {
+  if(class(obj)[1]=="SpatialPolygonsDataFrame")
+    return(TRUE)
+  else
+    message("Object class is not SpatialPolygonsDataFrame.")
+  return(FALSE)
+}

+ 37 - 0
R/myPostgresConnect.R

@@ -0,0 +1,37 @@
+#' PostgreSQL - Create a connection object
+#' @details Ühenduse loomine PostgreSql andmebaasiga.
+#' @param host Name or the numeric IPaddress of the host to connect to.
+#' @param dbname The database name.
+#' @param user PostgreSQL user name to connect as. Defaults to be the same as the operating system name of the user running the application.
+#' @param password Password to be used if the server demands password authentication.
+#' @param port Port number to connect to at the server host.
+#' @param type Connection type "RPostgres" or "RPostgreSQL". RPostgres is default.
+#' @return return message.
+#' @seealso \code{\link{myPostgresConnect}}, \code{\link{myPostgresDropTable}},
+#' \code{\link{myPostgresCreateGisDb}}, \code{\link{myPostgresImprotShp}}
+#' @examples \dontrun{
+#' con <- myPostgresConnect(host = '192.168.255.26', port = 5432,
+#'        user = 'osm', password = 'osm', dbname = 'shp')
+#'
+#' }
+#'
+#' @export
+#'
+
+myPostgresConnect <- function(host = '192.168.255.26', port = 5432,
+                              user = 'osm', password = 'osm', dbname = 'shp',
+                              type = c("RPostgres", "RPostgreSQL")) {
+  con = NULL
+  if(length(type)>1) type <- type[1]
+  driver <- RPostgres::Postgres()
+  if(tolower(type)=="rpostgresql") driver <- RPostgreSQL::PostgreSQL()
+  try(con <- DBI::dbConnect(driver, host = host, port = port, user = user, password = password, dbname = dbname),
+      silent = FALSE)
+  # Check is connection valid
+  #  DBI::dbIsValid(con) - see ei toimi RPostgreSQL ühenduse korral.
+  if(is.null(con)){
+    message(paste0("DB connection is not valid!"))
+    return()
+  }
+  con
+}

+ 26 - 0
R/myPostgresCreateGisDb.R

@@ -0,0 +1,26 @@
+#' PostgreSQL - Create 'postgis' database
+#' @details Postgis'i andmebaasi loomine.
+#' @param host Name or the numeric IPaddress of the host to connect to.
+#' @param dbname The database name.
+#' @param user PostgreSQL user name to connect as. Defaults to be the same as the operating system name of the user running the application.
+#' @param password Password to be used if the server demands password authentication.
+#' @param port Port number to connect to at the server host.
+#' @return return message.
+#' @seealso \code{\link{myPostgresConnect}}, \code{\link{myPostgresDropTable}},
+#' \code{\link{myPostgresCreateGisDb}}, \code{\link{myPostgresImprotShp}}
+#' @examples \dontrun{
+#' con <- myPostgresCreateGisDb(host = '192.168.255.26', port = 5432,
+#'        user = 'ardo', password = '247848', dbname = 'xxx')
+#'
+#' }
+#'
+#' @export
+#'
+
+myPostgresCreateGisDb <- function(host = '192.168.255.26', port = 5432, user = 'ardo', password = '247848', dbname = NULL) {
+  if(is.null(dbname)) {message("Palun sisesta andmebaasi nimi!"); return(NULL)}
+  system(paste0("export PGPASSWORD='", password, "' && createdb -U ", user, " -h ", host, " -p ", port, " ", dbname, ";"))
+  # "psql -U ardo -h 192.168.255.26 -p 5432 -d shp -c 'CREATE EXTENSION hstore; CREATE EXTENSION postgis;'"
+  system(paste0("export PGPASSWORD='", password, "' && psql -U ", user, " -d ", dbname, " -h ", host, " -p ", port, "  -c 'CREATE EXTENSION hstore; CREATE EXTENSION postgis;'"))
+  message(paste0("Genereeriti postgis'i andmebaas ", dbname, "."))
+}

+ 36 - 0
R/myPostgresDropTable.R

@@ -0,0 +1,36 @@
+#' PostgreSQL - Delete postgresql database table
+#' @details PostgreSql andmebaasi tabeli kustutamine.
+#' @param con An PostgreSQLConnection object as produced by dbConnect.
+#' @param tbl The database table name.
+#' @return eturn message.
+#' @seealso \code{\link{myPostgresConnect}}, \code{\link{myPostgresDropTable}},
+#' \code{\link{myPostgresCreateGisDb}}, \code{\link{myPostgresImprotShp}}
+#' @examples \dontrun{
+#' con <- myPostgresConnect(host = '192.168.255.26', port = 5432,
+#'        user = 'osm', password = 'osm', dbname = 'shp')
+#' myPostgresDropTable(con = con, tbl = "xxx")
+#'
+#' }
+#'
+#' @export
+#'
+
+myPostgresDropTable <- function(con = NULL, tbl) {
+  # Check is connection valid
+  if(is.null(con) || !DBI::dbIsValid(con)){
+    message(paste0("DB connection is not valid!"))
+    return()
+  }
+  # Check if db exists
+  if(!DBI::dbExistsTable(con, tolower(tbl))){
+    DBI::dbDisconnect(con)
+    message(paste0("Tabel ", tbl, " doesn't exist."))
+    return()
+  }
+  # Drop table
+  q <- paste("drop table if exists ", tbl, ";")
+  res <- DBI::dbSendQuery(con, q)
+  DBI::dbHasCompleted(res)
+  DBI::dbClearResult(res)
+  DBI::dbDisconnect(con)
+}

+ 41 - 0
R/myPostgresImprotShp.R

@@ -0,0 +1,41 @@
+#' PostgreSQL - Automatic ESRI shp file import into postgis table
+#' @details ESRI shape failide automaatne importimine postgis tabeliks. Eelnevalt peab olema loodud postgis andmebaas
+#' \code{\link{myPostgresCreateGisDb}} ja defineeritud tabeli nimi. Andmed salvestatakse WGS4326 projektsioonis.
+#'     Kui parameeter 'shp' on määramata, siis tuleb *.shp fail valida failide kataloogist.
+#' @param host Name or the numeric IPaddress of the host to connect to.
+#' @param dbname The database name.
+#' @param user PostgreSQL user name to connect as. Defaults to be the same as the operating system name of the user running the application.
+#' @param password Password to be used if the server demands password authentication.
+#' @param port Port number to connect to at the server host.
+#' @param shpFile ESRI shp file.
+#' @param tbl Postgis table name.
+#' @return return message.
+#' @seealso \code{\link{myPostgresConnect}}, \code{\link{myPostgresDropTable}},
+#' \code{\link{myPostgresCreateGisDb}}, \code{\link{myPostgresImprotShp}}
+#' @examples \dontrun{
+#' myPostgresImprotShp(host = '192.168.255.26', port = 5432,
+#'        user = 'osm', password = 'osm', shpFile = NULL, dbname = 'xxxxx', tbl = 'table_xxx')
+#'
+#' }
+#'
+#' @export
+#'
+
+myPostgresImprotShp <- function(host = '192.168.255.26', port = 5432, user = 'osm', password = 'osm', dbname = 'shp',
+                                shpFile = NULL, tbl = NULL) {
+  '%>%' <- magrittr::`%>%`
+  if(is.null(tbl)) {message("Postgis tabeli nimi on puudu!"); return(NULL)}
+  if(is.null(shpFile) || !file.exists(shpFile)) shpFile <- file.choose()
+  system(paste0("shp2pgsql -s 4326 -I '", shpFile, "' ", tbl, " > /tmp/tmp.sql"))
+  queries <- readLines("/tmp/tmp.sql")
+  # class(queries)
+  # Ühe tekstmuutuja moodustamine
+  d0 = paste(queries,collapse=" ")
+  # Tekstmuutuja jagamine osadeks semikooloni järele.
+  d1 = strsplit(d0, split = ";", fixed = TRUE) %>% unlist()
+  # semikooloni lisamine veeru lõppu
+  d2 = paste(paste0(d1, ";"))
+  write(d2, file = "/tmp/tmp1.sql")
+  system(paste0("export PGPASSWORD='", password, "' && psql -U ", user, " -d ", dbname, " -h ", host, " -p ", port, " -f /tmp/tmp1.sql"))
+  message("Shp faili importimine postgis andmebaasi lopetati.")
+}

+ 62 - 0
R/ogr2postgis.R

@@ -0,0 +1,62 @@
+#' Automatic ESRI shp file import into postgis table with ogr2ogr
+#' @details Selle funktsiooniga imporditakse zip kujul ESRI shp fail postgis andmebaasi.
+#' Geomeetria tuleb määrata parameetriga \code{\link{wkt}}. Andmete projektsioon
+#' konverteeritakse EPSG:4326 kujule. Esialgne tabel kirjutatakse andmebaasis üle.
+#' @param shpZip Zipped ESRI sho file.
+#' @param dsn	data source name (interpretation varies by driver — for some drivers,
+#' dsn is a file name, but may also be a folder).
+#' @param tbl Postgis table name.
+#' @param wkt Text representations (WKT) of the spatial objects.
+#' @return return message.
+#' @seealso \code{\link{ogr2postgis}}, \code{\link{wkt}},
+#' \code{\link{myPostgresCreateGisDb}}, \code{\link{myPostgresImprotShp}}
+#' @examples \dontrun{
+#' # Postgis conf
+#' source('/home/ardo/apps/git/R/apps/postgis/conf.R')
+#' tblName = "test_tabel"
+#' # Zipped shp file
+#' shpZip = "/home/ardo/apps/git/R/apps/postgis/data-sources/geodata/transport/teed/tanel/riigimnt.zip"
+#' ogr2postgis(shpZip = shpZip,
+#'             dsn = conf$dsn, tbl = tblName, wkt = "MULTILINESTRING")
+#'
+#' }
+#'
+#' @export
+#'
+
+ogr2postgis <- function(shpZip, dsn, tbl = NULL,
+                   wkt = c("NONE", "GEOMETRY", "POINT", "LINESTRING",
+                           "POLYGON", "MULTIPOINT", "MULTILINESTRING",
+                           "MULTIPOLYGON", "GEOMETRYCOLLECTION")) {
+  # Unzip
+  zip <- utils::unzip(zipfile = shpZip,
+                      list = F, overwrite = T, exdir = paste0(tempdir(), "/unzip"))
+  shpFileName <- list.files(paste0(tempdir(), "/unzip"), pattern = ".shp$", full.names = T, recursive = T)
+  cmd <- paste0('ogr2ogr  -lco FID="gid"  -wrapdateline -t_srs "EPSG:4326" ',
+                '-overwrite -lco GEOMETRY_NAME="geom" -a_srs "EPSG:4326"',
+                ' -f  "PostgreSQL" "', dsn, '"',
+                ' -nlt ', wkt,' ', shpFileName, ' -nln ', tbl)
+  # shpFileName
+  system(cmd)
+  unlink(zip)
+  message(paste("Tabeli", tbl, "kopeeriti andmebaasi."))
+  # cmd
+}
+
+
+#' Text representations (WKT) of the spatial objects
+#' @details Text representations (WKT) of the spatial objects. Postgis andmebaasis
+#' kasutatavate geomeetriate tüübid. Vajalik ESRI shp failide importimisel
+#' (\code{\link{ogr2postgis}})
+#' @seealso \code{\link{ogr2postgis}}, \code{\link{wkt}}
+#' @examples \dontrun{
+#' transpordiTsoonid::wkt
+#'
+#' }
+#'
+#' @export
+#'
+
+wkt = c("NONE", "GEOMETRY", "POINT", "LINESTRING", "POLYGON",
+        "MULTIPOINT", "MULTILINESTRING", "MULTIPOLYGON", "GEOMETRYCOLLECTION")
+

+ 25 - 0
R/perimeter2SpatialPolygonsDataFrame.R

@@ -0,0 +1,25 @@
+#' Add polygon perimeter value to Spdf
+#' @details Polügooni perimeetri (ümbermõõdu, meetrites) lisamine SpatialPolygonsDataFrame objektile.
+#' Andmetele lisatakse veerg "perimeter".
+#' @param spdf object with class "SpatialPolygonsDataFrame".
+#' @return perimeter Polygon perimeter value in meters.
+#' @seealso \code{\link{isObjectSpatialPolygonsDataFrame}}, \code{\link{centroid2SpatialPolygonsDataFrame}},
+#' \code{\link{projection2WGS84}}, \code{\link{area2SpatialPolygonsDataFrame}},
+#' \code{\link{perimeter2SpatialPolygonsDataFrame}}, \code{\link{spPolygonsOutline}}
+#' @examples \dontrun{
+#' load(rahvaarv)
+#' rahvaarv <- perimeter2SpatialPolygonsDataFrame(spdf = rahvaarv)
+#' rahvaarv@data$perimeter
+#'
+#' }
+#'
+#' @export
+#'
+
+perimeter2SpatialPolygonsDataFrame <- function(spdf) {
+  isObjectSpatialPolygonsDataFrame(spdf)
+  # Perimeter
+  # spdf@data$perimeter <- sapply(slot(spdf, "polygons"), function(x) sapply(slot(x, "Polygons"), slot, "area"))
+  spdf@data$perimeter <- geosphere::perimeter(spdf)
+  return(spdf)
+}

+ 19 - 0
R/projection2WGS84.R

@@ -0,0 +1,19 @@
+#' Projection to WGS84
+#' @details Projektsiooni teisendamine WGS84 koordinaatide süsteemi.
+#' @param spdf object with class "SpatialPolygonsDataFrame".
+#' @return SpatialPolygonsDataFrame object.
+#' @seealso \code{\link{isObjectSpatialPolygonsDataFrame}}, \code{\link{centroid2SpatialPolygonsDataFrame}},
+#' \code{\link{projection2WGS84}}, \code{\link{area2SpatialPolygonsDataFrame}},
+#' \code{\link{perimeter2SpatialPolygonsDataFrame}}, \code{\link{spPolygonsOutline}}
+#' @examples \dontrun{
+#' load(rahvaarv)
+#' rahvaarv <- projection2WGS84 <- function(spdf = rahvaarv)
+#' }
+#'
+#' @export
+#'
+
+projection2WGS84 <- function(spdf) {
+  spdf <- sp::spTransform(spdf, CRSobj = sp::CRS("+init=epsg:4326"))
+  return(spdf)
+}

+ 36 - 0
R/queryAddColumnsToPostgresDbAccordingDF.R

@@ -0,0 +1,36 @@
+#' Query to add columns to PostgreSQL database according df column names
+#' @details Veergude lisamine Postgresql andmebaasi etteantud df veergude nimede alusel.
+#' Andmebaasile lisatakse df veeru nimedega kokkulangevad andmebaasi veerud. Enne oleks
+#' vajalik kustutada samanimelised veerud \code{\link{df2PostgresReplaceFieldsArray}}.
+#' @param tbl The database table name.
+#' @param df The DataFrame name.
+#' @return query string.
+#' @seealso \code{\link{queryDropColumnsFromPostgresDbAccordingDF}},
+#' \code{\link{queryAddColumnsToPostgresDbAccordingDF}},
+#' \code{\link{queryWithoutGeom}}
+#' @examples \dontrun{
+#' # Connect with database
+#' tblName = "transport_tsoonid_tallinn"
+#' q <- queryAddColumnsToPostgresDbAccordingDF(df = tsoonAsumLosa, tbl = tblName)
+#' con <- myPostgresConnect(host = conf$host, port = conf$port, user = conf$user,
+#'         password = conf$password, dbname = conf$dbname, type = "RPostgreSQL")
+#' res <- DBI::dbSendQuery(conn = con, statement = q)
+#' DBI::dbClearResult(res)
+#' DBI::dbDisconnect(con)
+#'
+#' }
+#'
+#' @export
+#'
+
+queryAddColumnsToPostgresDbAccordingDF <- function(df, tbl) {
+  colnames(df) <- transpordiTsoonid::dfNamesToLower(df = df)
+  # Lisame andmebaasi veerud, mida tahame DataFrame'st kopeerida.
+  res <- sapply(1:ncol(df), function(x) {
+    paste0("ADD COLUMN ", names(df)[x], " ", transpordiTsoonid::df2PostgresReplaceFieldsArray[typeof(df[,x])], "")
+  })
+  res <- paste(res, collapse = ", ")
+  res <- paste0("ALTER TABLE ", tbl , " ", res, "")
+  res
+}
+

+ 34 - 0
R/queryDropColumnsFromPostgresDbAccordingDF.R

@@ -0,0 +1,34 @@
+#' Query to drop columns from PostgreSQL database according df column names
+#' @details Veergude kustutamine Postgresql andmebaasist etteantud df veergude nimede alusel.
+#' Andmebaasist kustutatakse df veeru nimedega kokkulangevad andmebaasi veerud.
+#' @param tbl The database table name.
+#' @param df The DataFrame name.
+#' @return query string.
+#' @seealso \code{\link{queryDropColumnsFromPostgresDbAccordingDF}},
+#' \code{\link{queryAddColumnsToPostgresDbAccordingDF}},
+#' \code{\link{queryWithoutGeom}}
+#' @examples \dontrun{
+#' # Connect with database
+#' tblName = "transport_tsoonid_tallinn"
+#' q <- queryDropColumnsFromPostgresDbAccordingDF(df = tsoonAsumLosa, tbl = tblName)
+#' con <- myPostgresConnect(host = conf$host, port = conf$port, user = conf$user,
+#'         password = conf$password, dbname = conf$dbname, type = "RPostgreSQL")
+#' res <- DBI::dbSendQuery(conn = con, statement = q)
+#' DBI::dbClearResult(res)
+#' DBI::dbDisconnect(con)
+#'
+#' }
+#'
+#' @export
+#'
+
+queryDropColumnsFromPostgresDbAccordingDF <- function(df, tbl) {
+  colnames(df) <- dfNamesToLower(df = df)
+  # Kustutame andmebaasist need veerud.
+  res <- sapply(1:ncol(df), function(x) {
+    paste0("DROP COLUMN IF EXISTS ", names(df)[x])
+  })
+  res <- paste(res, collapse = ", ")
+  res <- paste0("ALTER TABLE ", tbl , " ", res, "")
+  res
+}

+ 41 - 0
R/queryWithGeom.R

@@ -0,0 +1,41 @@
+#' Get query string with geom column representations to Spatial objects.
+#' @details Päringu stringi koostamine geomeetria veeruga Spatial objektina.
+#' @param con An PostgreSQLConnection object as produced by dbConnect.
+#' @param tbl The database table name.
+#' @param geom The array with postgresql geom column names.
+#' @param where Other conditions in request.
+#' @return query string.
+#' @seealso \code{\link{queryDropColumnsFromPostgresDbAccordingDF}},
+#' \code{\link{queryAddColumnsToPostgresDbAccordingDF}},
+#' \code{\link{queryWithoutGeom}},
+#' \code{\link{queryWithGeom}}
+#' @examples \dontrun{
+#' # Connect with database
+#' con <- myPostgresConnect(host = conf$host, port = conf$port, user = conf$user,
+#'         password = conf$password, dbname = conf$dbname, type = "RPostgreSQL")
+#' tblName = "transport_tsoonid_tallinn"
+#' q <- queryWithGeom(con = con, tbl = tblName, geom = 'geom', where = "LIMIT 100")
+#' df <- dbGetQuery(con, q)
+#' df
+#' DBI::dbClearResult(res)
+#' DBI::dbDisconnect(con)
+#'
+#' }
+#'
+#' @export
+#'
+
+queryWithGeom <- function(con, tbl, geom = 'geom', where = NULL) {
+  ## All columns without geom as shp@data
+  # geom = paste(paste0("'", geom, "'"), collapse = ", ")
+  q <- paste0("SELECT 'SELECT ' ||
+            ARRAY_TO_STRING(ARRAY(SELECT COLUMN_NAME::VARCHAR(50)
+            FROM INFORMATION_SCHEMA.COLUMNS
+            WHERE TABLE_NAME='", tbl, "' AND
+            COLUMN_NAME NOT IN ('", geom,"')
+            ORDER BY ORDINAL_POSITION
+            ), ', ') || ', ST_AsText(", geom,") AS ", geom," FROM ", tbl, "'")
+  q <- DBI::dbGetQuery(con,q)[1,1]
+  q <- paste(q, where)
+  q
+}

+ 42 - 0
R/queryWithoutGeom.R

@@ -0,0 +1,42 @@
+#' Get query string without geom column.
+#' @details Päringu stringi koostamine ilma geomeetria veergudeta, et oleks "kerge"
+#' importida df.
+#' @param con An PostgreSQLConnection object as produced by dbConnect.
+#' @param tbl The database table name.
+#' @param geom The array with postgresql geom column names.
+#' @param where Other conditions in request.
+#' @return query string.
+#' @seealso \code{\link{queryDropColumnsFromPostgresDbAccordingDF}},
+#' \code{\link{queryAddColumnsToPostgresDbAccordingDF}},
+#' \code{\link{queryWithoutGeom}},
+#' \code{\link{queryWithGeom}}
+#' @examples \dontrun{
+#' # Connect with database
+#' con <- myPostgresConnect(host = conf$host, port = conf$port, user = conf$user,
+#'         password = conf$password, dbname = conf$dbname, type = "RPostgreSQL")
+#' tblName = "transport_tsoonid_tallinn"
+#' q <- queryWithoutGeom(con = con, tbl = tblName, geom = c('geom', 'lines'), where = "LIMIT 100")
+#' df <- dbGetQuery(con, q)
+#' df
+#' DBI::dbClearResult(res)
+#' DBI::dbDisconnect(con)
+#'
+#' }
+#'
+#' @export
+#'
+
+queryWithoutGeom <- function(con, tbl, geom = 'geom', where = NULL) {
+  ## All columns without geom as shp@data
+  geom = paste(paste0("'", geom, "'"), collapse = ", ")
+  q <- paste0("SELECT 'SELECT ' ||
+            ARRAY_TO_STRING(ARRAY(SELECT COLUMN_NAME::VARCHAR(50)
+            FROM INFORMATION_SCHEMA.COLUMNS
+            WHERE TABLE_NAME='", tbl, "' AND
+            COLUMN_NAME NOT IN (", geom,")
+            ORDER BY ORDINAL_POSITION
+            ), ', ') || ' FROM ", tbl, "'")
+  q <- DBI::dbGetQuery(con,q)[1,1]
+  q <- paste(q, where)
+  q
+}

+ 23 - 0
R/spPolygons2SpLines.R

@@ -0,0 +1,23 @@
+#' Spatial Polygon to Spatial Line
+#' @details Polygon to Line.
+#'     Funktsioon klassi SpatialPolygons teisendamiseks klassiks SpatialLine.
+#' @param sp object with class "SpatialPolygons".
+#' @return SpatialLines Object with class "SpatialLines".
+#' @seealso \code{\link{isObjectSpatialPolygonsDataFrame}}, \code{\link{centroid2SpatialPolygonsDataFrame}},
+#' \code{\link{projection2WGS84}}, \code{\link{area2SpatialPolygonsDataFrame}},
+#' \code{\link{perimeter2SpatialPolygonsDataFrame}}, \code{\link{spPolygonsOutline}}
+#' @examples \dontrun{
+#' load(tr_tsoonid)
+#' tr_tsoonid.outline <- perimeter2SpatialPolygonsDataFrame(sp = tr_tsoonid)
+#' tr_tsoonid.outline.sl <- spPolygons2SpLines(tr_tsoonid.outline)
+#' tr_tsoonid.outline.sl
+#' class(tr_tsoonid.outline.sl)
+#'
+#' }
+#'
+#' @export
+#'
+
+spPolygons2SpLines <- function(sp) {
+  methods::as(sp, "SpatialLines")
+}

+ 29 - 0
R/spPolygonsOutline.R

@@ -0,0 +1,29 @@
+#' Outline for the polygons
+#' @details Tsoonidele piirjoone leidmine. Funktsiooni abil leitakse kõikide polügoonide ühisosa.
+#' Augud polügoonide sees eemaldatakse
+#' @param spdf object with class "SpatialPolygonsDataFrame".
+#' @return SpatialPolygon Object with class "SpatialPolygon".
+#' @seealso \code{\link{isObjectSpatialPolygonsDataFrame}}, \code{\link{centroid2SpatialPolygonsDataFrame}},
+#' \code{\link{projection2WGS84}}, \code{\link{area2SpatialPolygonsDataFrame}},
+#' \code{\link{perimeter2SpatialPolygonsDataFrame}}, \code{\link{spPolygonsOutline}}
+#' @examples \dontrun{
+#' load(tr_tsoonid)
+#' tr_tsoonid.outline <- perimeter2SpatialPolygonsDataFrame(spdf = tr_tsoonid)
+#' tr_tsoonid.outline
+#'
+#' }
+#'
+#' @export
+#'
+
+spPolygonsOutline <- function(spdf) {
+  # Remove intersections
+  # if(!rgeos::gIsValid(spdf)) {spdf <- rgeos::gBuffer(spdf, byid=FALSE, width=.00000001)} # .000001
+  # if(!rgeos::gIsValid(spdf)) {message("Remove intersections form spatial polygons."); return(NULL)}
+  spdf <- rgeos::gBuffer(spdf, byid=FALSE, width=.00000001)
+  outerRings = Filter(function(f){f@ringDir==1},spdf@polygons[[1]]@Polygons)
+  outerBounds = sp::SpatialPolygons(list(sp::Polygons(outerRings,ID=1)))
+  outerBounds@proj4string <- sp::CRS("+init=epsg:4326")
+  # plot(outerBounds, col = "red", border = "green", lwd = .8)
+  outerBounds
+}

+ 0 - 2
README.md

@@ -1,2 +0,0 @@
-# transpordiTsoonid
-

+ 6 - 0
inst/LOEMIND.Rd

@@ -0,0 +1,6 @@
+## Automaatne pdf manuaali genereerimine R pakettide jaoks.
+R CMD Rd2pdf transpordiTsoonid
+## Paketti kontrollimine
+R CMD check --as-cran transpordiTsoonid
+
+R CMD build --no-build-vignettes transpordiTsoonid

+ 23 - 0
transpordiTsoonid.Rproj

@@ -0,0 +1,23 @@
+Version: 1.0
+
+RestoreWorkspace: Default
+SaveWorkspace: Default
+AlwaysSaveHistory: Default
+
+EnableCodeIndexing: Yes
+UseSpacesForTab: Yes
+NumSpacesForTab: 2
+Encoding: UTF-8
+
+RnwWeave: Sweave
+LaTeX: pdfLaTeX
+
+AutoAppendNewline: Yes
+StripTrailingWhitespace: Yes
+
+BuildType: Package
+PackageUseDevtools: Yes
+PackageInstallArgs: --no-multiarch --with-keep.source
+PackageBuildArgs: --no-build-vignettes
+PackageCheckArgs: --check-subdirs=yes
+PackageRoxygenize: rd,collate,namespace