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?
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?
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)
For 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[[1]] = nc$geom[[1]] + st_point(c(1,1))
> plot(nc$geom)
nc
with the same offset (e.g. + st_point(c(1,0))
) the output of st_bbox(nc)
does not change, even though the geoms do plot in the new positions. Any idea why?
Commented
Sep 24, 2020 at 14:21
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)