此处对R进行空间分析的新内容。我有一个我从HERE下载的美国shapefile。我还有一组位于相邻美国的纬度/长点(50万)。
我想找到最偏远的地方" - 连续美国境内距离点数最远的地方。
我正在使用rgdal,raster和sp包。这是一个可重复的例子,随机抽样为10分:
# Set wd to the folder tl_2010_us_state_10
usa <- readOGR(dsn = ".", layer = "tl_2010_us_state10")
# Sample 10 points in USA
sample <- spsample(usa, 10, type = "random")
# Set extent for contiguous united states
ext <- extent(-124.848974, -66.885444, 24.396308, 49.384358)
# Rasterize USA
r <- raster(ext, nrow = 500, ncol = 500)
rr <- rasterize(usa, r)
# Find distance from sample points to cells of USA raster
D <- distanceFromPoints(object = rr, xy = sample)
# Plot distances and points
plot(D)
points(sample)
在最后两行代码之后,我得到了这个情节。
然而,我希望它能够超越美国的栅格化地图。并且,我希望只考虑距离连续美国的细胞的距离,而不是边界框中的所有细胞。我该怎么做呢?
我也很欣赏有关我使用的形状文件的任何其他提示 - 它是最好的吗?我应该担心使用正确的投影,因为我的实际数据集是纬度/经度? distanceFromPoints能否有效地处理如此庞大的数据集,还是有更好的功能?
答案 0 :(得分:1)
要将光栅D限制为连续的美国,您可以找到rr指定的NA值的元素(即在边界框内但在美国多边形之外的栅格单元格),并为这些相同的元素分配一个NA值。
D[which(is.na(rr[]))] <- NA
plot(D)
lines(usa)
您可以使用'proj4string(usa)'查找usa shapefile的投影信息。如果您感兴趣的坐标基于不同的投影,您可以将它们转换为匹配USA shapefile投影,如下所示:
my_coords_xform <- spTransform(my_coords, CRS(proj4string(usa)))
不确定distanceFromPoints的相对效率,但使用10分的示例在我的计算机上运行只需约1秒。
答案 1 :(得分:0)
我认为您正在寻找mask
功能。
library(raster)
usa <- getData('GADM', country='USA', level=1)
# exclude Alaska and Hawaii
usa <- usa[!usa$NAME_1 %in% c( "Alaska" , "Hawaii"), ]
# get the extent and create raster with preferred resolution
r <- raster(floor(extent(usa)), res=1)
# rasterize polygons
rr <- rasterize(usa, r)
set.seed(89)
sample <- spsample(usa, 10, type = "random")
# Find distance from sample points to cells of USA raster
D <- distanceFromPoints(object = rr, xy = sample)
# remove areas outside of polygons
Dm <- mask(D, rr)
# an alternative would be mask(D, usa)
# cell with highest value
mxd <- which.max(Dm)
# coordinates of that cell
pt <- xyFromCell(r, mxd)
plot(Dm)
points(pt)
当使用长/纬数据时,距离应该很好。但是rasterFromPoints
对于大数据集确实有点慢,因为它使用强力算法。