Получить похожие области, используя geosphere::areaPolygon для SpatialPointDataFrame?
Я работал с областью файла OSM, полученного как следующие:
library(osmar)
id<-1818782
dist <- get_osm(relation(id), full=T)
dist_lines <- as_sp(dist, 'lines')
dist_lines_closed <- gLineMerge(dist_lines)
list_of_Lines <- slot(dist_lines_closed, "lines")
dist_polygon <- SpatialPolygons(lapply(list_of_Lines, function(x) {
Polygons(list(Polygon(slot(slot(x, "Lines")[[1]], "coords"))),
ID=slot(x, "ID"))
}),proj4string=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
area<-areaPolygon(dist_polygon)/1000000 ##In sq.kms
Теперь, если у меня есть SpatialPointDataFrame, который я накладываю, используя:
whatever <- spdf[!is.na(over(spdf, as(dist_polygon , "SpatialPolygons"))), ]
whatever <- as.data.frame(whatever)
Площадь, полученная при использовании areaPolygon(cbind(whatever$Lon,whatever$Lat))
будет отличаться-где Lon
а также Lat
Долгота и Широта в кадре данных. Я приложил эти данные здесь.
Что я могу получить те же значения? участок dist_polygon
и сюжет (whatever$Lon,whatever$Lat)
дает мне точно такую же форму, но площадь под whatever
совершенно другой. Я думаю, что это не учитывает область между координатами.
Есть ли способ считать точки контуром карты и рассчитать площадь.
Спасибо за помощь.
Изменить: После этого я нашел эту ссылку и R документ по методу выпуклой оболочки. У Math.StackExchange есть эта хорошая статья о том, как найти область неправильных форм. Любая помощь в реализации была бы отличной помощью.