You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:15:03