我最近收集了带有 GPS 坐标的数据。数据收集单位是病房。在绘图时,我意识到有些点超出了预期的范围。有很多病房,请协助使用 R 函数根据病房形状文件剪切每个点
我尝试比较数据集以获得其中的点。输出为几何图形,可以合并原始 csv 以获得结果
嗨 Omena Fulu,欢迎来到 Stack Overflow!您可以使用“sf”包中的
st_intersection()
函数完成与 ArcGIS“剪辑”相同的操作。我使用“spData”包中提供的示例数据集为您创建了一个可重现的示例(请参阅末尾)。在您的情况下,您需要首先使用 read_csv()
函数或 read.table()
函数读取 csv,然后使用“sf”包中的 st_as_sf()
函数将 csv 转换为简单的特征数据框。在我的示例中,“cycle_hires”数据集是一个点数据集,类似于 csv 中的 GPS 点数据集。巧合的是,“lnd”数据集也包含伦敦大都市区的行政区,并且应该几乎与您所追求的完全相似。下面是例子:
##Loading Necessary Packages##
library(spData)
library(sf)
library(tmap)
library(tmaptools)
#Getting Example Data##
data("lnd") #Polygon Data similar to wards
data("cycle_hire") #Point Data similar gps points
##Take a look at the raw data##
#Setting tmap to interactive viewing#
tmap_mode("view")
#drawing the map#
tm_shape(lnd)+
tm_polygons(col="NAME", alpha=0.5)+
tm_shape(cycle_hire)+
tm_dots(col="red", size = .01)+
tm_basemap(server=providers$Esri.WorldImagery)
##Geoprocessing the data##
Westminster<-lnd[lnd$NAME=="Westminster",] #Get just the Westminster geographical area
westminster_cycles<-st_intersection(cycle_hire, Westminster) #use the st_intersection() function to clip cycle hires to just the Westminster geographical area
##View the results##
#drawing the new map#
tm_shape(lnd)+
tm_polygons(col="NAME", alpha=0.5)+
tm_shape(westminster_cycles)+
tm_dots(col="red", size = .01)+
tm_basemap(server=providers$Esri.WorldImagery)