在R中创建缓冲区和计数点

时间:2017-03-01 06:00:50

标签: r dataframe buffer coordinates geospatial

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

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

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) 

enter image description here

我可以采取其他方式解决这个问题。

1 个答案:

答案 0 :(得分: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