QGIS has a "Move Features" tool where points can be moved. Is it possible to move features from within R?
If not, is it possible to open R spatial objects in QGIS, move points in QGIS then import the spatial object back in R?
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It only takes a minute to sign up.Sign up to join this community
Its a bit obscure, but the
elide function in the
maptools package can be used to move
sp class objects.
This works for all point, line, and polygon classes. Following the data setup in
help(elide) here's a river polygon shifted 0.10 units up and across:
> plot(rivers1) > plot(elide(rivers1, shift=c(.10,.10)),add=TRUE) > axis(1)
sf objects adding a point to a geometry acts as a vector addition:
> nc = st_read(system.file("shape/nc.shp", package="sf")) Reading layer `nc' from data source `/nobackup/rowlings/RLibrary/R/x86_64-pc-linux-gnu-library/3.4/sf/shape/nc.shp' using driver `ESRI Shapefile' Simple feature collection with 100 features and 14 fields geometry type: MULTIPOLYGON dimension: XY bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965 epsg (SRID): 4267 proj4string: +proj=longlat +datum=NAD27 +no_defs
Let's move the first county +1 degree up and across:
> nc$geom[] = nc$geom[] + st_point(c(1,1)) > plot(nc$geom)
There may be a way of building an interface in R to click and drag geometries to a new location, but probably it's just easier to load the layer in QGIS and modify it there before reloading in R. It will take only a few seconds to switch between apps and reload layers.
library(sf) db <- "~/workspace/_temp/qgis2R.gpkg" # Create a point layer pts <- data.frame(name = "blue", x = 36.5, y = -2.5) pts <- st_as_sf(pts, coords = c('x', 'y'), crs = 4326) write_sf(pts, dsn = db, layer = "pts", driver = 'GPKG')
Open QGIS and add that point layer - plus (in this example) the "Stamen toner" layer from QuickMapServices
Edit the layer - move the point somewhere (or add new ones) then save the layer edits
Reload the layer in R - note the new XY data.
pts <- read_sf(db, layer = "pts") pts Simple feature collection with 1 feature and 1 field geometry type: POINT dimension: XY bbox: xmin: 36.8635 ymin: -2.832009 xmax: 36.8635 ymax: -2.832009 epsg (SRID): 4326 proj4string: +proj=longlat +datum=WGS84 +no_defs # A tibble: 1 x 2 name geom <chr> <POINT> 1 blue (36.8635 -2.832009)