Geoprocessing In R – Identify Points on a Polygon Layer From Survey Data
What happens when you have a bunch of survey data with GPS points, and you want to do Geoprocessing?
THERE IS AN EASIER WAY!
To start – I’m not sure if this is truly necessary but it seems like a good idea – convert your identify layer (TAZs, for example) to the same coordinate system as your points (likely WGS 1984, which matches GPS coordinates).
Then, load the sf package in R:
install.packages("sf") #only needs to be done once library(sf)
To read the identity layer, use:
taz = st_read("gis/tazlayer.shp")
Once that’s loaded, doing the identity process is simple:
joined_df = st_join(st_as_sf(surveydf, coords = c("LongitudeFieldName", "LatitudeFieldName"), crs = 4326, agr = "field"), taz["TAZ"])
What this does:
- st_as_sf is the function to turn another object into an sf object
- The surveydf is the survey dataframe (you’ll want to change this to match whatever you have)
- coords = c(“LongitudeFieldName”, “LatitudeFieldName”) tells st_as_sf the names of the coordinate fields
- crs = 4326 tells st_as_sf that the coordinates are in WGS1984 – if your coordinates are in another coordinate system (state plane, for example), you’ll need to change this
- agr = “field” tells st_as_sf the attribute-to-geometry relationship. In this case, the attributes are constant throughout the geometry (because it’s a point)
- The taz[“TAZ”] is the second part of the join – we’re joining the points to the TAZ layer and only taking the TAZ field (this could be expanded with something like taz[c(“TAZ”, “AREATYPE”)])
One caveat – the return of this (what joined_df will be after the above function is run) is a collection of geometry objects, so when joining to table data, it is best to take a data frame of the object… a la:
library(dplyr) df_out = df_in %>% Â Â left_join(as.data.frame(joined_df), by = "idField")
This is much faster than loading ArcMap or QGIS to do this work, and it keeps everything in one script, which makes life easier.
You must be logged in to post a comment.