Hi all,
I have a set of projected spatial points (id, x, y, dist, value) that needs to
be filtered. For each point I have to find the other ones falling within a
variable distance. For each selection, I need only the one with the maximum
value or, if duplicated, keeping just one.
I tried to check the available tools and I found out what follows:
- A simpler possibility would be to use the “Select by expression”,
but I’m not that familiar with the syntax and I ended up with [clearly
non-working]: CASE WHEN distance($currentfeature)<”dist” THEN max(“value”) END
- Another possibility would be to improve the following R code,
available online (thanks to the author)
Any (R, Python, else) suggestion?
##Layer=vector
##ID=Field Layer
##distance= Field Layer
##Output= output vector
library(rgeos)
library(sp)
library(spdep)
coordi <- as.matrix(coordinates(Layer))
tram_nb <- dnearneigh(coordi, d1 = 0, d2 = distance,row.names=Layer[[ID]])
tram_nb<-as.data.frame(card(tram_nb))
tram<-cbind(as.vector(Layer[[ID]]), tram_nb)
Coord<-cbind()
n<-length(Layer[[ID]])
for(i in 1:n){
if (tram[i,2]!=0 ){ Coord <-rbind(Coord,cbind(coordi[i,1],
coordi[i,2],as.vector(Layer[[ID]])[i]))
}
}
x<-as.numeric(Coord[,1])
y<-as.numeric(Coord[,2])
X<-cbind(x,y)
matrix<-as.matrix(X)
matrix<-SpatialPointsDataFrame(matrix,as.data.frame(Coord),proj4string=CRS(Layer))
Output=matrix
Thank you in advance for your help!
All the best,
Nic
_______________________________________________
Qgis-user mailing list
[email protected]
List info: http://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-user