【发布时间】:2018-09-24 12:05:37
【问题描述】:
假设我有一个名为zone 的数据文件,其中1994 字符串2D 坐标表示多边形顶点的坐标,如下所示(每行RHS 上的第一个数字表示zone)
c1 <- "1", "1 21, 31 50, 45 65, 75 80"
c2 <- "2", "3 20, 5 15, 2 26, 70 -85, 40 50, 60 80"
.....
c1993 <- "1993", "3 2, 2 -5, 0 60, 7 -58, -12 23, 56 611, 85 152"
c1994 <- "1994", "30 200, 50 -15, 20 260, 700 -850, -1 2, 5 6, 8 15"
现在我想以这样一种方式操作这些字符串,即给定一对随机的lat-lon(比如说12和20),我可以比较它是否属于第一个多边形,第二个多边形,第三个多边形,....或第 1994 个多边形。 蛮力解决方案是:将x-coordinate (= 12) 与所有4 x-坐标和y-coordinate(= 20) to all the4y@987654342 @c1andc2, respectively. The conclusion would be whether there is a valid **sandwich** inequality for each given coordinatexandy`。
例如,通过使用上述求解过程,点(12,20) 将在c1 但不在c2。
我的问题:我怎样才能在 R 中实现这个目标?
我的尝试:感谢 Stéphane Laurent 的帮助,我能够生成所有矩阵,每个矩阵都有一定的大小,存储每个多边形的所有顶点的 lat-lon 对,如下所示代码:
zone <- read_delim("[directory path to zone.csv file]", delim = ",", col_names = TRUE)
for(i in 1:nrow(zone)){
zone$geo[i] = substr(zone$geo[i],10,135)
}
zone <- zone[complete.cases(zone),]
Numextract <- function(string){
unlist(regmatches(string, gregexpr("[[:digit:]]+\\.*[[:digit:]]*", string)))
}
for(i in 1:nrow(zone)){
poly1 <- matrix(as.numeric(Numextract(zone$geo[i])),i, ncol=2, byrow=TRUE)
poly2 <- cbind(poly1, c(i))
}
但是,如您所见,我需要找到一种方法来索引与在for() 循环期间生成的每个区域对应的每个矩阵。原因是因为之后,我可以使用另一个for() 循环来确定一个点属于哪个区域!但是我一直无法弄清楚,所以任何人都可以帮我提供详细的代码吗?
【问题讨论】:
-
可能这个问题属于
gis.stackexchange。 -
您对如何定义
c1和c2有任何控制权吗?它们是否始终是lat lon, lat lon, lat lon, ...形式的字符串,还是您可以随意定义它们? -
@SymbolixAU:是的,正如你所指出的,它们都是那种格式。该格式中有整个
1614字符串。但是,当然,我们可以使用 R 中的代码来更改它,对吧?
标签: r point-in-polygon