R - 在光栅化美国地图上找到距离点集最远的点

R - find point farthest from set of points on rasterized USA map

这里是 R 空间分析的新手。我有一个从 HERE 下载的美国 shapefile。我还有一组 lat/long 个点(半百万),位于美国本土。

我想找到 "most remote spot" -- 美国本土距离点集最远的那个点。

我正在使用 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)

在最后两行代码之后,我得到了这个情节。

不过,我希望它位于美国的光栅化地图上。而且,我希望它只考虑与美国相邻单元格的距离,而不是边界框中所有单元格的距离。我该怎么做?

对于我正在使用的形状文件的任何其他提示,我也很感激 - 它是最好的吗?我是否应该担心使用正确的投影,因为我的实际数据集是 lat/long? distanceFromPoints 是否能够高效处理如此大的数据集,或者有更好的功能吗?

要将栅格 D 限制为连续的美国,您可以找到 rr 的元素分配的 NA 值(即边界框内但在美国多边形之外的栅格像元),并为 D 的这些相同元素分配值不适用

D[which(is.na(rr[]))] <- NA

plot(D)
lines(usa)

您可以使用 'proj4string(usa)' 来查找美国 shapefile 的投影信息。如果您感兴趣的坐标基于不同的投影,您可以按如下方式转换它们以匹配美国 shapefile 投影:

my_coords_xform <- spTransform(my_coords, CRS(proj4string(usa)))

不确定 distanceFromPoints 的相对效率,但在我的计算机上使用您的 10 点示例 运行 只用了 ~ 1 秒。

我认为您正在寻找 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)

距离应该没问题,使用 long/lat 数据时也是如此。但是 rasterFromPoints 对于大数据集来说确实有点慢,因为它使用了强力算法。