簡體   English   中英

刪除重疊的多邊形,點太多

[英]Removing overlapping polygons, too many points

我有很多數據點。 其實太多了。 沒有一點是重疊的,但有些彼此很接近。 我想減少點數,但不移動任何位置。

我最終將獲得盡可能多的點,但只能與其他任何點至少相距約5.7公里。 (如果有一點重疊,就可以了-0.5km的誤差是可以接受的)

我試圖用R編寫一個算法來完成此操作,但是有很多出乎意料的結果。 我有一些覆蓋地球的大約300,000點數據。 我還有其他幾百萬個數據。 執行算法時,我可以按國家/地區細分數據,從而將這些數字減少到20,000到100,000之間。 如果這些點的位置無關緊要,那么我可能只是制作一個插值柵格並將其命名為好,但是對於這個問題,我需要保持特定位置不變。

我嘗試做的另一件事是制作一個0.028度的規則網格,然后運行NNJoin查找最近的數據點。 這比我的R代碼要好一些,但是結果可能有點像您想象的那樣有趣。

我的另一個想法是對點進行緩沖,計算與緩沖層相交的點數。 我還在做這個

有沒有已經建立的方法來達到這個結果? 如果有可以執行此操作的程序包或庫,我很願意與PostGIS,QGIS,Python,R一起使用。

tl; dr如何減少密集的點簇,但保持減少的點集覆蓋率?

這是一種方法。

示例數據

x <- runif(10000, -180, 180)
y <- runif(10000, -90, 90)
pts <- cbind(x, y)

library(raster)
# you will want a lower resolution than this
r <- raster(nrow=18, ncol=36, vals=1) 
# get cell numbers
cells <- cellFromXY(r, pts)
# pick one point per cell
sel <- aggregate(pts, list(cells), function(i)i[1])  # or sample

讓我們來看看

plot(r)
points(pts, cex=.1)
points(sel[,2:3], pch=20, col="red")

請注意,此操作使用lon / lat,因此跨緯度的距離不同。 不確定是否重要; 但如果是這樣,您可以轉型。

后來:

有多種方法可以通過更改范圍或創建RasterLayer來創建偏移的變體。 有關更多信息,請參見柵格和范圍。 您也可以使用shift

#add a row and a column
r1 <- raster(nrow=19, ncol=37, xmx=190, ymn=-100)
r2 <- shift(r1, -.5*xres(r1), -.5*yres(r1))

plot(as(r1, "SpatialPolygons"))
lines(as(r2, "SpatialPolygons"), col="red")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM