gpt4 book ai didi

python - 计算线穿过的网格象限的有效方法

转载 作者:太空狗 更新时间:2023-10-29 22:27:15 30 4
gpt4 key购买 nike

我有一个二维单位网格,以及一堆以任意有理数开始和结束的线段。我需要一种有效的方法来计算线穿过哪些网格单元。例如,行:

从 (2.1, 3.9) 到 (3.8, 4.8) 穿过左下角点 (2, 3)、(2, 4) 和 (3, 4) 的网格单元。

是否有一种快速、有效的方法从直线的端点计算这些象限?

我将在 R 中工作,但 Python 或伪代码的答案也可以。谢谢!

最佳答案

从事空间数据工作的人一直都在处理这类问题,因此值得借助他们的努力。这是一个使用 R 的 raster 包(以及它所依赖的 sp 包中的函数)的解决方案:

library(raster)

## Create a SpatialLines object
a <- c(2.1, 3.9)
b <- c(3.8, 4.8)
## Method #1 -- Uses functions from the sp package.
SL <- SpatialLines(list(Lines(list(Line(rbind(a,b))), "ab")))
## Method #2 -- Uses readWKT() from the rgeos package. Easier to read.
# library(rgeos)
# string <- paste0("LINESTRING(", paste(a, b, collapse=", "), ")")
# SL <- readWKT(string)

## Create a raster object
m <- 10
n <- 10
mat <- matrix(seq_len(m*n), nrow = m, ncol = n)
r <- raster(mat, xmn = 0, xmx = n, ymn = 0, ymx = m)

## Find which cells are intersected & get coordinates of their lower-left corners
ii <- extract(r, SL, cellnumbers=TRUE)[[1]][, "cell"]
floor(xyFromCell(r, ii))
# x y
# [1,] 2 4
# [2,] 3 4
# [3,] 2 3

## Confirm that this is correct with a plot
image(r)
plot(as(rasterize(SL, r), "SpatialPolygons"),
border = "darkgrey", lwd = 2, add = TRUE)
lines(SL)

enter image description here

关于python - 计算线穿过的网格象限的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812409/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com