Hi Jon (thanks for reminding off-list!), I haven't looked into finding the line with an ID, but in general finding the nearest SpatialLines index (which of course might be ambiguous) might be done by: library(rgeos) d = gDistance(nres, nres, byid=TRUE) diag(d)=1e9 apply(d,2,function(x)which(x==min(x))[1]) Does that get you any further? Or are there more clever solutions? -- Edzer
On 04/13/2011 09:59 AM, Jon Olav Skoien wrote:
Hi,
I have a SpatialLinesDataFrame with predictions on different locations
of a river network that I would like to plot. However, I have many more
line segments in the network than I have predictions, so most of the
data.frame has NA-values. Does anyone know a simple way of finding the
nearest downstream value for a line segment with an NA-value, so that I
can get a continuous river network with predictions?
Below is a simple example of what I want to do, based on a shapefile
("nres") that can be downloaded from:
http://intamap.geo.uu.nl/~jon/sarp/tempaacf/
nres = readOGR(".","nres")
nin = nres
nin$pred[!(nin$OBJECTID %in% c(1015, 1020, 1366, 1369, 4981))] = NA
"nres" is the SpatialLinesDataFrame that I would like to have as result
after associating all NA-values to the nearest downstream value. "nin"
is a simplified version of the SpatialLinesDataFrame that I have after
predicting, and that I would like to use for creating "nres". "pred" is
the prediction column in these SLDFs. The following plot shows the
results (with colors) and thick black lines for the segments where I
have predictions.
spplot(nres, "pred", col.regions = bpy.colors(),
panel = function(x,y, ...) {
panel.polygonsplot(x,y, ...)
sp.lines(nin[!is.na(nin$pred),], col = "black", lwd = 2)
})
So far I have got the result in this plot from an iterative procedure
using the FROMJCT and TOJCT (from and to junction) IDs of the data.frame:
ichange = 1
while (ichange > 0) {
ichange = 0
for (i in 1:dim(nin)[1]) {
if (!is.na(nin$pred[i])) {
tt = which(nin$TOJCT == nin$FROMJCT[i])
if (length(tt) > 0 && is.na(nin$pred[tt])) {
nin$pred[tt] = nin$pred[i]
ichange = ichange + 1
}
}
}
}
But I think it should be either possible to simplify this (quite slow
for a large river network), or preferably take advantage of topology of
SpatialLines objects? Any clues?
Thanks,
Jon
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Edzer Pebesma Institute for Geoinformatics (ifgi), University of M?nster Weseler Stra?e 253, 48151 M?nster, Germany. Phone: +49 251 8333081, Fax: +49 251 8339763 http://ifgi.uni-muenster.de http://www.52north.org/geostatistics e.pebesma at wwu.de