[英]How do I generate a grid of coordinates within specified polygons in R?
我有一個二維多邊形列表,定義為R中x和y坐標的兩列矩陣。它們完全填充方形區域並且是互斥的。 我想使用這些多邊形定義來生成x,y坐標值的精細網格,其中每個值由它落入哪個多邊形來標識。
我已經探索了sp包並且可以將我的多邊形變成SpatialPolygons
類的對象,但我不知道這是否讓我更接近我的目標。 使用數據ggplot
多邊形,我可以使用帶有geom_polygon(aes(fill=ID))
來生成基於多邊形ID着色的多邊形圖。
我可以看到前進的幾條路徑,但不知道如何完成任何一條路徑:
采用多邊形並在多邊形邊界內生成均勻坐標網格的函數。 (我的多邊形非常不規則,有很多邊,因此為它們創建自定義函數會很痛苦且容易出錯。)
一個函數,它接受一對x,y坐標和我的多邊形列表以及輸出坐標所在的多邊形。
一個函數,它接受我的ggplot生成的繪圖並將顏色轉換為數字坐標值的網格,我可以讀回R.
可能還有其他方法我無法想象。 我不得不相信其他人之前有同樣的需求,但是廣泛的搜索並沒有讓我找到任何能夠滿足我需要的功能。
[關於spsample刪除的嘟??]
嗯,在寒冷的一天,似乎你想要別的東西:
如果您的所有多邊形都構成一個矩形並且您希望在該矩形上有一個規則的點網格,那么創建一個網格坐標的SpatialPoints對象(請參閱'expand.grid'以解決該子問題的部分解決方案)然后使用'overlay' from package:sp來測試網格點所在的多邊形。
您可能還想使用bbox來獲取多邊形的范圍。
這聽起來就像你在正方形網格上進行這種定位,因此它可能比更通用的多邊形方法需要的更簡單。 假設你在這個方格上的坐標是兩個向量,'xx'和'yy',你有一個名為'mypoints'的data.frame或矩陣中的點列表。 這將創建一個row-col-indices矩陣來查找正確的子方塊:
xx <- seq(0,1,by=.1)
yy <- seq(0,1,by=.1)
mypoints <- matrix(runif(10), ncol=2)
head(mypoints)
#---------------
[,1] [,2]
[1,] 0.7731868 0.2707768
[2,] 0.7005779 0.7881789
[3,] 0.9520941 0.6661852
[4,] 0.4625906 0.9176813
[5,] 0.4550811 0.5017386
#---------------
findInterval(mypoints[1:5,1], xx)
#[1] 8 8 10 5 5
findInterval(mypoints[1:5,2], yy)
#[1] 3 8 7 10 6
pointidxs <- matrix( c( findInterval(mypoints[,1], xx),
findInterval(mypoints[,2], yy) ), ncol=2)
head(pointidxs)
#--------------
[,1] [,2]
[1,] 8 3
[2,] 8 8
[3,] 10 7
[4,] 5 10
[5,] 5 6
我沒有想太多,但這里有一個咖啡前的想法:我知道你的多邊形形成了Voronoi的細分。 現在,應該很容易獲得相應的Delaunay三角剖分,這應該為您提供一種直接的方式來確定特定點是否屬於相應的多邊形。
希望有道理嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.