R sf包创建的缓冲区与点无法在地图显示问题求助
R空间分析点位不显示问题修复方案
问题根源
创建空间点对象时存在两处参数错误,导致点位坐标完全偏离研究区范围,因此无法在底图上显示:
st_as_sf()函数的coords参数要求坐标顺序为c(经度, 纬度)(x轴在前,y轴在后),你的代码中将纬度放在了前面,坐标解析完全错位。- CSV文件中存储的经纬度为WGS84地理坐标系(EPSG:4326),你直接将其CRS指定为已经投影后的
ESRI:102003,相当于把十进制度的坐标值直接识别为米制投影坐标,点位完全不在圣路易斯范围内。
修复代码
#Bring in data # MO county data county.sf <- get_acs(state = "MO", county = c("St. Louis County", "St. Louis City"), geography = "tract", variables = "B03002_001", output="wide", geometry = TRUE) %>% sf::st_transform(crs = "ESRI:102003") class(county.sf) # Restaurant data 修复坐标顺序和原始CRS res <- read.csv("Myfile1.csv") res.sf <- st_as_sf(res, coords = c("long", "lat"), crs = 4326) res.sf.utm <- st_transform(res.sf, crs = "ESRI:102003") # Store data 修复坐标顺序和原始CRS store <- import("Myfile2.csv") store.sf <- st_as_sf(store, coords = c("Longitude", "Latitude"), crs = 4326) store.sf.utm <- st_transform(store.sf, crs = "ESRI:102003") # Creating buffers # Going to use 1000 ft which = 304.8 meter buffers elem.buff <-st_buffer(res.sf.utm, 304) class(elem.buff) #Create Map ex.map<- tm_shape(county.sf) + tm_polygons() + tm_shape(elem.buff) + tm_borders(col="red") + tm_shape(res.sf.utm) + tm_dots(col = "red") + tm_shape(store.sf.utm) + tm_dots()
验证方法
修复后执行st_bbox(res.sf.utm)和st_bbox(county.sf),两者的坐标范围将完全匹配,重新绘图即可正常显示餐饮点、缓冲区和便利店点位。
频次统计实现
点位显示正常后,可通过以下代码完成需求的频次统计:
# 统计每个餐饮点1000英尺范围内的便利店数量 res_with_store_count <- elem.buff %>% mutate(convenience_store_count = lengths(st_intersects(., store.sf.utm)))
内容的提问来源于stack exchange,提问作者revere2323
相关产品推荐
相关产品推荐

