Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert sets of spatial coordinates to polygons in R using sf

Tags:

r

sf

Each element of my list contains a set of spatial coordinates that I would like to convert to polygons using sf. Each set of coordinates is sorted in the order I would like to "connect the dots" and the first and last rows are identical, to close the polygons. Each list element is named with a unique identifier which I would like to retain as an attribute in the sf output.

I have adapted code from the sf-related answer here:

Convert sequence of longitude and latitude to polygon via sf in R

but my case differs in that I have multiple sets of coordinates (each of which should produce a separate polygon) whereas that question had a single set of coordinates (resulting in one polygon).

My specific question is how can I use sf to produce a sf polygon object containing multiple polygons in separate rows, each created with the coordinates in one of my list elements.

Thank you in advance for any suggestions or help.

Mark


My sample data, resulting from dput(), are at the end of this question and my code is:

points_df<-arrange(dat,SitePondGpsRep,DateTime_local) #sort on DateTime_local for proper sequence

points_df<-dplyr::select(points_df,SitePondGpsRep,Longitude,Latitude) #drop columns, for upcoming st_polygon call (requires numerics only)

points_ls<-split(points_df,points_df$SitePondGpsRep) #dataframe to list

points_ls<-lapply(points_ls, function(x) { x["SitePondGpsRep"] <- NULL; x }) #delete SitePondGpsRep column, it’s retained in list names

points_ls<-lapply(points_ls,function(x) {as.matrix(x)}) #convert to matrix for upcoming st_sf call

points_ls<-lapply(points_ls,function(x) {rbind(x,x[1,])}) #close poly, first and last point must be same

polys <- st_sf(st_sfc(st_polygon(points_ls)), crs = 4326) #create polys, but only one polygon is created when I expected three polygons

str(polys); glimpse(polys); plot(polys) #check output

Sample data:

dat <- structure(list(SitePondGpsRep = c("BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", 
"BURR-1-1-1", "BURR-1-1-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", 
"BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", 
"BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1"
), DateTime_local = c("2018-05-30 10:49:04", "2018-05-30 10:49:05", 
"2018-05-30 10:49:06", "2018-05-30 10:49:07", "2018-05-30 10:49:08", 
"2018-05-30 10:49:09", "2018-05-30 10:49:10", "2018-05-30 10:49:27", 
"2018-05-30 10:49:28", "2018-05-30 10:49:29", "2018-05-30 10:49:30", 
"2018-05-30 10:49:31", "2018-05-30 10:49:32", "2018-05-30 10:49:33", 
"2018-05-30 10:49:34", "2018-05-30 10:49:35", "2018-05-30 10:49:36", 
"2018-05-30 10:49:37", "2018-05-30 10:49:38", "2018-05-30 10:49:39", 
"2018-05-30 10:49:40", "2018-05-30 10:49:41", "2018-05-30 10:49:42", 
"2018-05-30 10:49:43", "2018-05-30 10:49:44", "2018-05-30 10:49:45", 
"2018-05-30 10:49:46", "2018-05-30 10:49:47", "2018-05-30 10:49:48", 
"2018-05-30 10:49:49", "2018-05-30 10:49:50", "2018-05-30 10:49:51", 
"2018-05-30 10:49:52", "2018-05-30 10:49:54", "2018-05-30 10:49:55", 
"2018-05-30 10:49:56", "2018-05-30 10:49:57", "2018-05-30 10:49:58", 
"2018-05-30 10:50:01", "2018-05-30 10:50:02", "2018-05-30 10:50:03", 
"2018-05-30 10:50:04", "2018-05-30 10:50:05", "2018-05-30 10:50:06", 
"2018-05-30 10:50:07", "2018-05-30 10:50:09", "2018-05-30 10:50:10", 
"2018-05-30 10:50:11", "2018-05-30 10:50:12", "2018-05-30 10:50:13", 
"2018-05-30 10:50:14", "2018-05-30 10:50:15", "2018-05-30 10:50:16", 
"2018-05-30 10:50:17", "2018-05-30 10:50:18", "2018-05-30 10:50:20", 
"2018-05-30 10:50:24", "2018-05-30 10:50:27", "2018-05-30 10:50:36", 
"2018-05-30 10:50:41", "2018-05-30 10:50:42", "2018-05-30 10:50:43", 
"2018-05-30 10:50:44", "2018-05-30 10:50:45", "2018-05-30 10:49:05", 
"2018-05-30 10:49:06", "2018-05-30 10:49:07", "2018-05-30 10:49:08", 
"2018-05-30 10:49:09", "2018-05-30 10:49:10", "2018-05-30 10:49:11", 
"2018-05-30 10:49:12", "2018-05-30 10:49:13", "2018-05-30 10:49:19", 
"2018-05-30 10:49:31", "2018-05-30 10:49:32", "2018-05-30 10:49:33", 
"2018-05-30 10:49:34", "2018-05-30 10:49:35", "2018-05-30 10:49:36", 
"2018-05-30 10:49:37", "2018-05-30 10:49:38", "2018-05-30 10:49:39", 
"2018-05-30 10:49:40", "2018-05-30 10:49:41", "2018-05-30 10:49:42", 
"2018-05-30 10:49:43", "2018-05-30 10:49:44", "2018-05-30 10:49:45", 
"2018-05-30 10:49:46", "2018-05-30 10:49:47", "2018-05-30 10:49:48", 
"2018-05-30 10:49:49", "2018-05-30 10:49:50", "2018-05-30 10:49:51", 
"2018-05-30 10:49:52", "2018-05-30 10:49:53", "2018-05-30 10:49:54", 
"2018-05-30 10:49:55", "2018-05-30 10:49:56", "2018-05-30 10:49:57", 
"2018-05-30 10:49:58", "2018-05-30 10:49:59", "2018-05-30 10:50:00", 
"2018-05-30 10:50:01", "2018-05-30 10:50:02", "2018-05-30 10:50:03", 
"2018-05-30 10:50:04", "2018-05-30 10:50:05", "2018-05-30 10:50:06", 
"2018-05-30 10:50:07", "2018-05-30 10:50:10", "2018-05-30 10:50:11", 
"2018-05-30 10:50:12", "2018-05-30 10:50:13", "2018-05-30 10:50:14", 
"2018-05-30 10:50:15", "2018-05-30 10:50:16", "2018-05-30 10:50:37", 
"2018-05-30 10:50:44", "2018-05-30 10:49:05", "2018-05-30 10:49:06", 
"2018-05-30 10:49:07", "2018-05-30 10:49:08", "2018-05-30 10:49:09", 
"2018-05-30 10:49:10", "2018-05-30 10:49:11", "2018-05-30 10:49:12", 
"2018-05-30 10:49:19", "2018-05-30 10:49:21", "2018-05-30 10:49:22", 
"2018-05-30 10:49:26", "2018-05-30 10:49:27", "2018-05-30 10:49:30", 
"2018-05-30 10:49:31", "2018-05-30 10:49:32", "2018-05-30 10:49:33", 
"2018-05-30 10:49:34", "2018-05-30 10:49:35", "2018-05-30 10:49:36", 
"2018-05-30 10:49:37", "2018-05-30 10:49:38", "2018-05-30 10:49:39", 
"2018-05-30 10:49:40", "2018-05-30 10:49:41", "2018-05-30 10:49:42", 
"2018-05-30 10:49:43", "2018-05-30 10:49:44", "2018-05-30 10:49:45", 
"2018-05-30 10:49:46", "2018-05-30 10:49:47", "2018-05-30 10:49:48", 
"2018-05-30 10:49:49", "2018-05-30 10:49:50", "2018-05-30 10:49:51", 
"2018-05-30 10:49:52", "2018-05-30 10:49:54", "2018-05-30 10:49:57", 
"2018-05-30 10:49:58", "2018-05-30 10:49:59", "2018-05-30 10:50:00", 
"2018-05-30 10:50:01", "2018-05-30 10:50:02", "2018-05-30 10:50:03", 
"2018-05-30 10:50:04", "2018-05-30 10:50:05", "2018-05-30 10:50:06", 
"2018-05-30 10:50:07", "2018-05-30 10:50:08", "2018-05-30 10:50:09", 
"2018-05-30 10:50:10", "2018-05-30 10:50:11", "2018-05-30 10:50:12", 
"2018-05-30 10:50:13", "2018-05-30 10:50:14", "2018-05-30 10:50:15", 
"2018-05-30 10:50:16"), Latitude = c(51.9851623569, 51.9851641171, 
51.9851674698, 51.9851741754, 51.9851825573, 51.9851923641, 51.9852027576, 
51.9853603374, 51.985360086, 51.9853615109, 51.9853631873, 51.9853626005, 
51.9853596669, 51.9853546377, 51.9853501953, 51.9853491057, 51.9853499439, 
51.9853510335, 51.9853526261, 51.9853537157, 51.9853544701, 51.9853550568, 
51.9853562303, 51.985358661, 51.9853618462, 51.985365618, 51.9853699766, 
51.9853755087, 51.9853831362, 51.9853900932, 51.9853944518, 51.9853973016, 
51.9854001515, 51.9854111318, 51.9854149874, 51.9854135625, 51.985412389, 
51.9854097068, 51.9853739161, 51.9853589125, 51.9853450824, 51.9853315037, 
51.9853169192, 51.9853025861, 51.9852880016, 51.985260509, 51.9852461759, 
51.9852311723, 51.9852169231, 51.9852023385, 51.9851880893, 51.985174343, 
51.9851596747, 51.9851456769, 51.9851331878, 51.9851182681, 51.9851253927, 
51.9851476047, 51.9851814676, 51.9851861615, 51.9851861615, 51.9851835631, 
51.9851810485, 51.985178953, 51.9851332717, 51.9851353671, 51.9851413183, 
51.9851502031, 51.9851596747, 51.9851695653, 51.9851823058, 51.9851954654, 
51.9852077868, 51.9852676336, 51.9853508659, 51.9853491057, 51.9853438251, 
51.9853392988, 51.9853389636, 51.985339215, 51.9853398018, 51.9853422325, 
51.9853455853, 51.9853481837, 51.9853506982, 51.9853537995, 51.9853565656, 
51.9853595831, 51.9853626005, 51.9853671268, 51.9853722397, 51.9853787776, 
51.9853857346, 51.9853908475, 51.9853956252, 51.9854015764, 51.9854076114, 
51.9854149874, 51.9854189269, 51.9854177535, 51.9854149874, 51.985412892, 
51.9854062703, 51.985392943, 51.9853766821, 51.9853594154, 51.9853420649, 
51.9853279833, 51.9853130635, 51.9852968026, 51.9852817152, 51.9852411468, 
51.9852255564, 51.9852114748, 51.9851971418, 51.9851819705, 51.9851673022, 
51.9851524662, 51.985171577, 51.9851645362, 51.9851415697, 51.9851436652, 
51.9851481915, 51.9851561543, 51.9851645362, 51.9851733372, 51.9851848204, 
51.9851983991, 51.9852668792, 51.9852864929, 51.9853002392, 51.9853428192, 
51.9853453338, 51.9853506144, 51.9853511173, 51.9853491057, 51.9853441603, 
51.9853404723, 51.9853403047, 51.9853417296, 51.9853436574, 51.9853462558, 
51.985348016, 51.9853496924, 51.9853510335, 51.9853532966, 51.9853569008, 
51.9853605051, 51.9853646122, 51.9853681326, 51.9853726588, 51.9853808731, 
51.985391099, 51.9853972178, 51.9854009897, 51.9854052644, 51.9854188431, 
51.9854213577, 51.985419346, 51.985411467, 51.9853983074, 51.9853829686, 
51.9853670429, 51.9853521232, 51.9853375386, 51.9853222836, 51.9853064418, 
51.9852899294, 51.9852756802, 51.9852615986, 51.9852463435, 51.9852309208, 
51.9852158334, 51.9852004945, 51.9851861615, 51.9851720799, 51.9851580821
), Longitude = c(-105.0767748244, -105.0767996348, -105.0768228527, 
-105.0768438913, -105.0768627506, -105.0768831186, -105.0768996309, 
-105.0768738147, -105.0768491719, -105.0768251996, -105.0768006407, 
-105.0767758302, -105.0767515227, -105.0767283887, -105.0767055061, 
-105.0766806956, -105.0766552985, -105.0766305719, -105.0766069349, 
-105.0765823759, -105.0765584037, -105.0765349343, -105.0765112974, 
-105.076487828, -105.0764643587, -105.0764413923, -105.0764174201, 
-105.0763948727, -105.0763716549, -105.0763481855, -105.0763243809, 
-105.0763000734, -105.0762776099, -105.0762347784, -105.0762113091, 
-105.0761888456, -105.0761658791, -105.0761429127, -105.0761163421, 
-105.0761119835, -105.0761065353, -105.076102512, -105.0761000812, 
-105.076098321, -105.0760969799, -105.0760942139, -105.0760934595, 
-105.0760923699, -105.0760906935, -105.0760900229, -105.0760909449, 
-105.0760921184, -105.0760919508, -105.0760952197, -105.0761054456, 
-105.0761408173, -105.0762129016, -105.0762677193, -105.0764359441, 
-105.0765430648, -105.0765658636, -105.0765891653, -105.0766126346, 
-105.0766350981, -105.0767853856, -105.0768098608, -105.076832911, 
-105.0768533628, -105.0768733118, -105.0768928416, -105.0769080129, 
-105.0769187417, -105.0769294705, -105.0769564603, -105.0768144708, 
-105.0767890736, -105.0767669454, -105.0767435599, -105.0767160673, 
-105.0766881555, -105.0766630936, -105.0766382832, -105.076612886, 
-105.0765872374, -105.0765617564, -105.076536946, -105.0765135605, 
-105.0764897559, -105.0764658675, -105.0764395483, -105.0764154922, 
-105.0763928611, -105.0763694756, -105.0763450842, -105.0763208605, 
-105.0762992352, -105.0762787834, -105.0762574095, -105.0762354489, 
-105.0762114767, -105.076188175, -105.0761637837, -105.0761408173, 
-105.0761313457, -105.0761326868, -105.076130759, -105.0761248916, 
-105.076120114, -105.0761155877, -105.0761135761, -105.0761135761, 
-105.0761101395, -105.0761072896, -105.0761061162, -105.0761060324, 
-105.0761067867, -105.0761083793, -105.0761087146, -105.0764583237, 
-105.0766065158, -105.0767834578, -105.0768087711, -105.0768324919, 
-105.0768561289, -105.0768786762, -105.0768972002, -105.0769114494, 
-105.0769231003, -105.0769605674, -105.0769288, -105.076918155, 
-105.0768983737, -105.0768753234, -105.076808352, -105.0767832901, 
-105.0767600723, -105.0767381117, -105.0767147262, -105.076689329, 
-105.0766637642, -105.0766387023, -105.0766154006, -105.0765913446, 
-105.0765661988, -105.0765423942, -105.0765190087, -105.0764952041, 
-105.0764719862, -105.076448014, -105.0764254667, -105.0764035899, 
-105.0763796177, -105.0763540529, -105.0763287395, -105.0763040129, 
-105.0762819685, -105.0762406457, -105.0761751831, -105.0761494506, 
-105.0761289988, -105.076121036, -105.0761198625, -105.0761174317, 
-105.0761130732, -105.076108044, -105.0761036016, -105.0761017576, 
-105.0761008356, -105.0760996621, -105.0760973152, -105.0760949682, 
-105.0760931242, -105.0760921184, -105.0760929566, -105.0760953873, 
-105.0760967284, -105.0760972314)), class = "data.frame", row.names = c(NA, 
-177L))
like image 289
Mark Avatar asked Oct 05 '18 16:10

Mark


2 Answers

The easier way to approach this rather than using split and lapply is to use the ability of sf to work well with dplyr tools, especially grouped operations. We can:

  1. Create points for each vertex of the polygons with the coords argument of st_as_sf,
  2. group_by your id and summarise to combine the points into a MULTIPOINT for each polygon,
  3. Use st_cast to convert to POLYGON, drawing the lines between each vertex.
dat <- structure(list(SitePondGpsRep = c("BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-1-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-3-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1", "BURR-1-4-1"), DateTime_local = c("2018-05-30 10:49:04", "2018-05-30 10:49:05", "2018-05-30 10:49:06", "2018-05-30 10:49:07", "2018-05-30 10:49:08", "2018-05-30 10:49:09", "2018-05-30 10:49:10", "2018-05-30 10:49:27", "2018-05-30 10:49:28", "2018-05-30 10:49:29", "2018-05-30 10:49:30", "2018-05-30 10:49:31", "2018-05-30 10:49:32", "2018-05-30 10:49:33", "2018-05-30 10:49:34", "2018-05-30 10:49:35", "2018-05-30 10:49:36", "2018-05-30 10:49:37", "2018-05-30 10:49:38", "2018-05-30 10:49:39", "2018-05-30 10:49:40", "2018-05-30 10:49:41", "2018-05-30 10:49:42", "2018-05-30 10:49:43", "2018-05-30 10:49:44", "2018-05-30 10:49:45", "2018-05-30 10:49:46", "2018-05-30 10:49:47", "2018-05-30 10:49:48", "2018-05-30 10:49:49", "2018-05-30 10:49:50", "2018-05-30 10:49:51", "2018-05-30 10:49:52", "2018-05-30 10:49:54", "2018-05-30 10:49:55", "2018-05-30 10:49:56", "2018-05-30 10:49:57", "2018-05-30 10:49:58", "2018-05-30 10:50:01", "2018-05-30 10:50:02", "2018-05-30 10:50:03", "2018-05-30 10:50:04", "2018-05-30 10:50:05", "2018-05-30 10:50:06", "2018-05-30 10:50:07", "2018-05-30 10:50:09", "2018-05-30 10:50:10", "2018-05-30 10:50:11", "2018-05-30 10:50:12", "2018-05-30 10:50:13", "2018-05-30 10:50:14", "2018-05-30 10:50:15", "2018-05-30 10:50:16", "2018-05-30 10:50:17", "2018-05-30 10:50:18", "2018-05-30 10:50:20", "2018-05-30 10:50:24", "2018-05-30 10:50:27", "2018-05-30 10:50:36", "2018-05-30 10:50:41", "2018-05-30 10:50:42", "2018-05-30 10:50:43", "2018-05-30 10:50:44", "2018-05-30 10:50:45", "2018-05-30 10:49:05", "2018-05-30 10:49:06", "2018-05-30 10:49:07", "2018-05-30 10:49:08", "2018-05-30 10:49:09", "2018-05-30 10:49:10", "2018-05-30 10:49:11", "2018-05-30 10:49:12", "2018-05-30 10:49:13", "2018-05-30 10:49:19", "2018-05-30 10:49:31", "2018-05-30 10:49:32", "2018-05-30 10:49:33", "2018-05-30 10:49:34", "2018-05-30 10:49:35", "2018-05-30 10:49:36", "2018-05-30 10:49:37", "2018-05-30 10:49:38", "2018-05-30 10:49:39", "2018-05-30 10:49:40", "2018-05-30 10:49:41", "2018-05-30 10:49:42", "2018-05-30 10:49:43", "2018-05-30 10:49:44", "2018-05-30 10:49:45", "2018-05-30 10:49:46", "2018-05-30 10:49:47", "2018-05-30 10:49:48", "2018-05-30 10:49:49", "2018-05-30 10:49:50", "2018-05-30 10:49:51", "2018-05-30 10:49:52", "2018-05-30 10:49:53", "2018-05-30 10:49:54", "2018-05-30 10:49:55", "2018-05-30 10:49:56", "2018-05-30 10:49:57", "2018-05-30 10:49:58", "2018-05-30 10:49:59", "2018-05-30 10:50:00", "2018-05-30 10:50:01", "2018-05-30 10:50:02", "2018-05-30 10:50:03", "2018-05-30 10:50:04", "2018-05-30 10:50:05", "2018-05-30 10:50:06", "2018-05-30 10:50:07", "2018-05-30 10:50:10", "2018-05-30 10:50:11", "2018-05-30 10:50:12", "2018-05-30 10:50:13", "2018-05-30 10:50:14", "2018-05-30 10:50:15", "2018-05-30 10:50:16", "2018-05-30 10:50:37", "2018-05-30 10:50:44", "2018-05-30 10:49:05", "2018-05-30 10:49:06", "2018-05-30 10:49:07", "2018-05-30 10:49:08", "2018-05-30 10:49:09", "2018-05-30 10:49:10", "2018-05-30 10:49:11", "2018-05-30 10:49:12", "2018-05-30 10:49:19", "2018-05-30 10:49:21", "2018-05-30 10:49:22", "2018-05-30 10:49:26", "2018-05-30 10:49:27", "2018-05-30 10:49:30", "2018-05-30 10:49:31", "2018-05-30 10:49:32", "2018-05-30 10:49:33", "2018-05-30 10:49:34", "2018-05-30 10:49:35", "2018-05-30 10:49:36", "2018-05-30 10:49:37", "2018-05-30 10:49:38", "2018-05-30 10:49:39", "2018-05-30 10:49:40", "2018-05-30 10:49:41", "2018-05-30 10:49:42", "2018-05-30 10:49:43", "2018-05-30 10:49:44", "2018-05-30 10:49:45", "2018-05-30 10:49:46", "2018-05-30 10:49:47", "2018-05-30 10:49:48", "2018-05-30 10:49:49", "2018-05-30 10:49:50", "2018-05-30 10:49:51", "2018-05-30 10:49:52", "2018-05-30 10:49:54", "2018-05-30 10:49:57", "2018-05-30 10:49:58", "2018-05-30 10:49:59", "2018-05-30 10:50:00", "2018-05-30 10:50:01", "2018-05-30 10:50:02", "2018-05-30 10:50:03", "2018-05-30 10:50:04", "2018-05-30 10:50:05", "2018-05-30 10:50:06", "2018-05-30 10:50:07", "2018-05-30 10:50:08", "2018-05-30 10:50:09", "2018-05-30 10:50:10", "2018-05-30 10:50:11", "2018-05-30 10:50:12", "2018-05-30 10:50:13", "2018-05-30 10:50:14", "2018-05-30 10:50:15", "2018-05-30 10:50:16"), Latitude = c(51.9851623569, 51.9851641171, 51.9851674698, 51.9851741754, 51.9851825573, 51.9851923641, 51.9852027576, 51.9853603374, 51.985360086, 51.9853615109, 51.9853631873, 51.9853626005, 51.9853596669, 51.9853546377, 51.9853501953, 51.9853491057, 51.9853499439, 51.9853510335, 51.9853526261, 51.9853537157, 51.9853544701, 51.9853550568, 51.9853562303, 51.985358661, 51.9853618462, 51.985365618, 51.9853699766, 51.9853755087, 51.9853831362, 51.9853900932, 51.9853944518, 51.9853973016, 51.9854001515, 51.9854111318, 51.9854149874, 51.9854135625, 51.985412389, 51.9854097068, 51.9853739161, 51.9853589125, 51.9853450824, 51.9853315037, 51.9853169192, 51.9853025861, 51.9852880016, 51.985260509, 51.9852461759, 51.9852311723, 51.9852169231, 51.9852023385, 51.9851880893, 51.985174343, 51.9851596747, 51.9851456769, 51.9851331878, 51.9851182681, 51.9851253927, 51.9851476047, 51.9851814676, 51.9851861615, 51.9851861615, 51.9851835631, 51.9851810485, 51.985178953, 51.9851332717, 51.9851353671, 51.9851413183, 51.9851502031, 51.9851596747, 51.9851695653, 51.9851823058, 51.9851954654, 51.9852077868, 51.9852676336, 51.9853508659, 51.9853491057, 51.9853438251, 51.9853392988, 51.9853389636, 51.985339215, 51.9853398018, 51.9853422325, 51.9853455853, 51.9853481837, 51.9853506982, 51.9853537995, 51.9853565656, 51.9853595831, 51.9853626005, 51.9853671268, 51.9853722397, 51.9853787776, 51.9853857346, 51.9853908475, 51.9853956252, 51.9854015764, 51.9854076114, 51.9854149874, 51.9854189269, 51.9854177535, 51.9854149874, 51.985412892, 51.9854062703, 51.985392943, 51.9853766821, 51.9853594154, 51.9853420649, 51.9853279833, 51.9853130635, 51.9852968026, 51.9852817152, 51.9852411468, 51.9852255564, 51.9852114748, 51.9851971418, 51.9851819705, 51.9851673022, 51.9851524662, 51.985171577, 51.9851645362, 51.9851415697, 51.9851436652, 51.9851481915, 51.9851561543, 51.9851645362, 51.9851733372, 51.9851848204, 51.9851983991, 51.9852668792, 51.9852864929, 51.9853002392, 51.9853428192, 51.9853453338, 51.9853506144, 51.9853511173, 51.9853491057, 51.9853441603, 51.9853404723, 51.9853403047, 51.9853417296, 51.9853436574, 51.9853462558, 51.985348016, 51.9853496924, 51.9853510335, 51.9853532966, 51.9853569008, 51.9853605051, 51.9853646122, 51.9853681326, 51.9853726588, 51.9853808731, 51.985391099, 51.9853972178, 51.9854009897, 51.9854052644, 51.9854188431, 51.9854213577, 51.985419346, 51.985411467, 51.9853983074, 51.9853829686, 51.9853670429, 51.9853521232, 51.9853375386, 51.9853222836, 51.9853064418, 51.9852899294, 51.9852756802, 51.9852615986, 51.9852463435, 51.9852309208, 51.9852158334, 51.9852004945, 51.9851861615, 51.9851720799, 51.9851580821), Longitude = c(-105.0767748244, -105.0767996348, -105.0768228527, -105.0768438913, -105.0768627506, -105.0768831186, -105.0768996309, -105.0768738147, -105.0768491719, -105.0768251996, -105.0768006407, -105.0767758302, -105.0767515227, -105.0767283887, -105.0767055061, -105.0766806956, -105.0766552985, -105.0766305719, -105.0766069349, -105.0765823759, -105.0765584037, -105.0765349343, -105.0765112974, -105.076487828, -105.0764643587, -105.0764413923, -105.0764174201, -105.0763948727, -105.0763716549, -105.0763481855, -105.0763243809, -105.0763000734, -105.0762776099, -105.0762347784, -105.0762113091, -105.0761888456, -105.0761658791, -105.0761429127, -105.0761163421, -105.0761119835, -105.0761065353, -105.076102512, -105.0761000812, -105.076098321, -105.0760969799, -105.0760942139, -105.0760934595, -105.0760923699, -105.0760906935, -105.0760900229, -105.0760909449, -105.0760921184, -105.0760919508, -105.0760952197, -105.0761054456, -105.0761408173, -105.0762129016, -105.0762677193, -105.0764359441, -105.0765430648, -105.0765658636, -105.0765891653, -105.0766126346, -105.0766350981, -105.0767853856, -105.0768098608, -105.076832911, -105.0768533628, -105.0768733118, -105.0768928416, -105.0769080129, -105.0769187417, -105.0769294705, -105.0769564603, -105.0768144708, -105.0767890736, -105.0767669454, -105.0767435599, -105.0767160673, -105.0766881555, -105.0766630936, -105.0766382832, -105.076612886, -105.0765872374, -105.0765617564, -105.076536946, -105.0765135605, -105.0764897559, -105.0764658675, -105.0764395483, -105.0764154922, -105.0763928611, -105.0763694756, -105.0763450842, -105.0763208605, -105.0762992352, -105.0762787834, -105.0762574095, -105.0762354489, -105.0762114767, -105.076188175, -105.0761637837, -105.0761408173, -105.0761313457, -105.0761326868, -105.076130759, -105.0761248916, -105.076120114, -105.0761155877, -105.0761135761, -105.0761135761, -105.0761101395, -105.0761072896, -105.0761061162, -105.0761060324, -105.0761067867, -105.0761083793, -105.0761087146, -105.0764583237, -105.0766065158, -105.0767834578, -105.0768087711, -105.0768324919, -105.0768561289, -105.0768786762, -105.0768972002, -105.0769114494, -105.0769231003, -105.0769605674, -105.0769288, -105.076918155, -105.0768983737, -105.0768753234, -105.076808352, -105.0767832901, -105.0767600723, -105.0767381117, -105.0767147262, -105.076689329, -105.0766637642, -105.0766387023, -105.0766154006, -105.0765913446, -105.0765661988, -105.0765423942, -105.0765190087, -105.0764952041, -105.0764719862, -105.076448014, -105.0764254667, -105.0764035899, -105.0763796177, -105.0763540529, -105.0763287395, -105.0763040129, -105.0762819685, -105.0762406457, -105.0761751831, -105.0761494506, -105.0761289988, -105.076121036, -105.0761198625, -105.0761174317, -105.0761130732, -105.076108044, -105.0761036016, -105.0761017576, -105.0761008356, -105.0760996621, -105.0760973152, -105.0760949682, -105.0760931242, -105.0760921184, -105.0760929566, -105.0760953873, -105.0760967284, -105.0760972314)), class = "data.frame", row.names = c(NA, -177L))
library(tidyverse)
library(sf)
dat %>%
  st_as_sf(coords = c("Longitude", "Latitude"), crs = 4326) %>%
  group_by(SitePondGpsRep) %>%
  summarise(geometry = st_combine(geometry)) %>%
  st_cast("POLYGON") %>%
  plot()

Created on 2018-10-05 by the reprex package (v0.2.0).

like image 66
Calum You Avatar answered Nov 13 '22 11:11

Calum You


library(sfheaders) on CRAN from 20191004 can convert data.frames to sf objects.

library(sf)
library(sfheaders)

sf <- sfheaders::sf_polygon(
  obj = dat
  , x = "Longitude"
  , y = "Latitude"
  , polygon_id = "SitePondGpsRep"
)

sf
# Simple feature collection with 3 features and 1 field
# geometry type:  POLYGON
# dimension:      XY
# bbox:           xmin: -105.077 ymin: 51.98512 xmax: -105.0761 ymax: 51.98542
# epsg (SRID):    NA
# proj4string:    
#   id                       geometry
# 1 BURR-1-1-1 POLYGON ((-105.0768 51.9851...
# 2 BURR-1-3-1 POLYGON ((-105.0768 51.9851...
# 3 BURR-1-4-1 POLYGON ((-105.0768 51.9851...
like image 21
SymbolixAU Avatar answered Nov 13 '22 10:11

SymbolixAU