【问题标题】:Create buffer and count points in R在 R 中创建缓冲区和计数点
【发布时间】:2017-03-01 17:03:04
【问题描述】:

我之前问过this question,但没有得到回复,所以这次我会努力做得更好!

我想使用 R 分析加油站点的空间密度。我需要在加油站周围创建一个缓冲区(比如说 1,000m)并计算缓冲区内的加油站数量。然后,我需要调整缓冲区距离,看看什么是合理的缓冲区才能看到有趣的东西。我不会发布整个形状文件,因为它相当混乱,但这是数据的样子:

all <- readShapePoints("sbc_gas.shp") 
all.df <- as(all, "data.frame")
head(all)

OBJECTID Fuellocati               Name   Latitude      Longitude     
      1      34828     WORLD OIL #104    34.44190      -119.8304    
      2      48734  STOP AND SHOP GAS    34.41962      -119.6768    
      3      51276 EL RANCHERO MARKET    34.41911      -119.7162    
      4      52882  EDUCATED CAR WASH    34.44017      -119.7439    
      5      74038           CIRCLE K    34.63925      -120.4406    
      6     103685    7-ELEVEN #23855    34.40506      -119.5296    

我能够使用以下代码在点周围创建一个缓冲区,但现在我如何计算缓冲区内的点数?

require(sp)
require(rdgal)
require(geosphere)

coordinates(all) <- c("Longitude", "Latitude")
pc <- spTransform(all, CRS( "+init=epsg:3347" ) ) 
distInMeters <- 1000
pc100km <- gBuffer(pc, width=100*distInMeters, byid=TRUE )
# Add data, and write to shapefile
pc100km <- SpatialPolygonsDataFrame(pc100km, data=pc100km@data )
writeOGR( pc100km, "pc100km", "pc100km", driver="ESRI Shapefile" )

plot(pc100km) 

我愿意接受其他方式来解决这个问题。

【问题讨论】:

  • 您能否提供更多有关“无法工作”的信息?您是否收到任何错误输出?你能进入调试模式并检查变量持有的内容吗?
  • 向问题添加了错误消息。
  • 对于初学者来说,distm 似乎没有定义。你的意思是把distInMeters 放在那里吗?
  • distm 应该没问题。这是geosphere 包中的一个函数,它获取点的纬度和经度并创建点之间距离的矩阵。不过我会玩这个。也许这就是问题所在。
  • 我认为,如果您尝试“计算缓冲区中的点数”,您真正需要做的是创建一个嵌套的 for 循环并计算每个成对组合之间的距离,然后当距离小于缓冲区半径时设置条件。您现在所拥有的只是创建有关输入点的缓冲区几何图形。

标签: r dataframe buffer coordinates geospatial


【解决方案1】:

使用geosphere 为我自己的问题提出了一个(简单的)解决方案:

cbind(coordinates(all.df), X=rowSums(distm (coordinates(all.df)[,1:2], fun = distHaversine) / 1000 <= 10)) # number of points within distance 10 km
    Longitude Latitude  X
0   -119.8304 34.44190 25
1   -119.6768 34.41962 29
2   -119.7162 34.41911 34
3   -119.7439 34.44017 39
4   -120.4406 34.63925 13
5   -119.5296 34.40506  7
6   -120.4198 34.93860 26
7   -119.8221 34.43598 30

【讨论】:

    猜你喜欢
    • 2016-03-22
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多