Thanks Felix, this is the answer that I was looking for!


points <- list("sp.points", Centroids, pch = 21,col="green")
polys <- list("sp.lines", Counties_lines, col="white")
ptLabels =
list("panel.text",LatLongs[,1],LatLongs[,2],labels=ss,col="white",pos=2)
print("plotting the grob")
browser()
grob2 = spplot(psImg, "band1", col.regions=greys,
sp.layout=list(points,ptLabels,polys),cuts=length(greys),
colorkey=FALSE,scales=list(draw=TRUE))
plot(grob2)

the complete example will soon be posted on my Web site:

http://nceas.ucsb.edu/scicomp/GISSeminar/UseCases/MapProdWithRGraphics/OneMapProdWithRGraphics.html

Regards, Rick R

Felix Andrews wrote:
> On 9/30/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>   
>> # Assume: ss[] is a char vector of point labels, one per Centroid element..
>> # display list entries for first two points
>> #
>> pt1 = list("sp.text",c(LatLongs[1,1],LatLongs[1,2]),ss[1],col="white",pos=2)
>> pt2 = list("sp.text",c(LatLongs[2,1],LatLongs[2,2]),ss[2],col="white",pos=2)
>> #
>> # I could create these for all 'n' list elements I suppose, but then the
>> code is not general.
>>     
>
> Look at sp.text, it is nothing but a constrained version of panel.text:
>
>   
>> sp.text
>>     
> function (loc, txt, ...)
> {
>     if (length(loc) != 2)
>         stop("loc should have length 2")
>     if (!is.numeric(loc))
>         stop("loc should be numeric")
>     panel.text(loc[1], loc[2], txt, ...)
> }
> <environment: namespace:sp>
>
> So you can just do this:
> ptLabels <- list("panel.text", LatLongs[,1], LatLongs[,2], labels=ss,
> col="white", pos=2)
>
> You might also be interested in maptools::pointLabel to place the
> labels so they don't overlap.
>
> Felix
>
>
> On 9/30/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>   
>> Hello:
>>
>> Im working on a method to create multilayer raster/vector plots using
>> spplot() and supporting functions. The question is: how do I efficiently
>> add display list instructions for plotting the point labels that works
>> for different sized point vectors?
>>
>> Here is a working 'brute force' approach (I have omitted the string parsing
>> code that produces the point labels) that creates the plot and labels the
>> first two points only:
>>
>> library(sp)
>> library(rgdal)
>> library(maptools)
>> #
>> # read files
>> #
>> Counties  <- readShapePoly("PugetSoundCountiesClp2.shp")
>> psImg     <- readGDAL("PugetSoundSub1.img")
>> Centroids <- readShapePoints("PSCentroidPointShape")
>>
>> len = length([EMAIL PROTECTED])
>> LatLongs = [EMAIL PROTECTED]
>> dim(LatLongs) = c(len/2,2)
>> #
>> # spplot 'sp.layout' list entries (demote polygons to spatial lines).
>> #
>> points <- list("sp.points", Centroids,  pch = 21,col="green")
>> Counties_lines <- as(Counties, "SpatialLines")
>> polys <- list("sp.lines", Counties_lines, col="white")
>> greys <- grey(0:256 / 256)
>> #
>> # Assume: ss[] is a char vector of point labels, one per Centroid element..
>> # display list entries for first two points
>> #
>> pt1 = list("sp.text",c(LatLongs[1,1],LatLongs[1,2]),ss[1],col="white",pos=2)
>> pt2 = list("sp.text",c(LatLongs[2,1],LatLongs[2,2]),ss[2],col="white",pos=2)
>> #
>> # I could create these for all 'n' list elements I suppose, but then the
>> code is not general.
>> #
>> grob2 = spplot(psImg, "band1", col.regions=greys,
>> sp.layout=list(points,pl1,pl2,polys),cuts=length(greys),
>> colorkey=FALSE,scales=list(draw=TRUE))
>> #
>> plot(grob2)
>>
>> Something tells me Im doing this the hard way...
>> I could construct the arguments to list() dynamically with string building
>> code, and then call() or eval() the command, but isnt there a much simpler
>> way to 1) tell sp.layout to add the point labels or 2) add the labels to
>> the
>> plot in a separate command? I have tried separate text() and
>> update(trellis.last.object()) commands to no avail.
>>
>> Suggestions?
>>
>> Regards, Rick Reeves / NCEAS
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo@stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>>     
>
>
>   
begin:vcard
fn:Rick  Reeves
n:Reeves;Rick 
org:UC Santa Barbara;National Center For Ecological Analysis and Synthesis
adr:Suite 300;;735 State Street;Santa Barbara;CA;93101;USA
email;internet:[EMAIL PROTECTED]
title:Rick Reeves,  Scientific Programmer/Analyst
tel;work:805 892 2533
url:http://www.nceas.ucsb.edu
version:2.1
end:vcard

_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to