【发布时间】: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