之前我问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)
我可以采取其他方式解决这个问题。
答案 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