Создайте выпуклый многоугольник корпуса из точек и сохраните как файл формы
Необходима помощь в преобразовании в R.
Я вычислил выпуклый корпус облака точек. Я хотел бы, чтобы из точек, образующих выпуклую оболочку, построить объект многоугольника и сохранить это как шейп файл, который может быть прочитан программным обеспечением ГИС (ArcMap или тому подобное).
Мой код выглядит следующим образом:
gps <- read.csv(f) ##reads the lat-long coordinates file
x <- gps$LONGITUDE ##tells R which columns is which
y <- gps$LATITUDE
z<-chull(x,y) ##calculates the convex hull --this is just a list of x-y points, N vertex
dfHull <-cbind(x[z],y[z]) ##the convex hull expressed as a list of selected x-y points
plot(dfHull) ##this plots the vertex of the polygon, just a check
lines(dfhull) ##plots the polygon in screen
##generate polygon shapefile, from dfHull, and save it externally as a shapefile ???
Исходный файл содержит только полные координаты, например:
52.73336 N 0.365974
52.7332 N 0.366051
52.73289 N 0.36636
52.73297 N 0.366258
52.73298 N 0.366243
52.733 N 0.366112
52.73308 N 0.365942
52.73317 N 0.365881
52.73321 N 0.36593
52.73328 N 0.365942
52.73352 N 0.36579
52.73362 N 0.365678
52.73391 N 0.365536
52.7373 N 0.36543
52.73289 N 0.36728
Я знаю, что есть пакеты (rgdal, maptools,..), чтобы помочь с ними, но я очень незнакомый с пространственным материалом. На самом деле все, что мне нужно, это создать объект polygon и сохранить его как файл формы.
Любая помощь оценивается. Заранее спасибо, dev.
Ответы
Ответ 1
Вот простой пример создания SpatialPolygonsDataFrame
, который может быть сохранен как шейп файл с rgdal::writeOGR()
:
set.seed(1)
dat <- matrix(stats::rnorm(2000), ncol = 2)
ch <- chull(dat)
coords <- dat[c(ch, ch[1]), ] # closed polygon
plot(dat, pch=19)
lines(coords, col="red")
![convex hull]()
library("sp")
library("rgdal")
sp_poly <- SpatialPolygons(list(Polygons(list(Polygon(coords)), ID=1)))
# set coordinate reference system with SpatialPolygons(..., proj4string=CRS(...))
# e.g. CRS("+proj=longlat +datum=WGS84")
sp_poly_df <- SpatialPolygonsDataFrame(sp_poly, data=data.frame(ID=1))
writeOGR(sp_poly_df, "chull", layer="chull", driver="ESRI Shapefile")