Turns out the best idea was Barry's......Simply co-opt some existing kml
code and make it do what you want with your image

http://www.ceoe.udel.edu/cms/moliver/EDA_20090619.170.1758.n18.kml



On Mon, Jul 13, 2009 at 12:12 PM, Roger Bivand <[email protected]> wrote:

> On Mon, 13 Jul 2009, Barry Rowlingson wrote:
>
>  On Mon, Jul 13, 2009 at 3:26 PM, Matt Oliver<[email protected]> wrote:
>>
>>> Dear r-sig-geo,
>>>
>>> I am trying to generate a kml for an image I am producing using image().
>>> After reading about kml generation, I'm unsure if I sould be using
>>> kmlOverlay() or writeOGR, or some other function.
>>>
>>> This is the data
>>>
>>> http://www.ceoe.udel.edu/cms/moliver/20071003.276.0237.n17.nc
>>>
>>> require(ncdf)
>>> require(fields)
>>> f <- open.ncdf("20071003.276.0237.n17.nc")
>>>
>>> lon <- get.var.ncdf(f, "lon")
>>> lat <- get.var.ncdf(f, "lat")
>>> mcsst <- get.var.ncdf(f, "mcsst")
>>> plot(diff(lon)) #####notice decreasing
>>> par(mar=c(0, 0, 0, 0))
>>> par(bty="n")
>>>
>>> image(lon, lat, mcsst, col = tim.colors(64)) #####image I want to make
>>> kml
>>> for
>>>
>>> I don't seem to be able to make a proper "Spatial" object because of the
>>> unequally spaced geographic coordinates.This seems to be necessary to to
>>> proceed with a kml generation.
>>>
>>> I'm probably missing something simple so any help or example code would
>>> be
>>> wonderful
>>>
>>>
>> KML does this kind of image overlay by taking an image file (PNG,
>> jpeg etc) and it's bounding box in lat-long. It can't cope with
>> irregular grids.
>>
>> My first thought as a workaround was to turn every pixel into a
>> rectangular polygon. But then I got the data and saw we were dealing
>> with 1445626 pixels and that google earth would probably crawl...
>>
>> So I think you'll need to resample your data onto a regular lat-long
>> grid, then save it as an image, and then write the relevant KML with
>> the bounds. The KML is quite simple:
>>
>> http://code.google.com/apis/kml/documentation/kml_tut.html#ground_overlays
>>
>> but the resampling might not be. I think I've written some resampling
>> code somewhere, it just works out where in the old array a bunch of
>> regularly spaced points are that will make the new array are, and
>> samples. There may be R code for doing interpolation - maybe the
>> rimage or RImageJ packages...
>>
>> But no, I don't think anything existing can do it [waits for Roger to
>> prove him wrong again...].
>>
>
> Maybe ... ?
>
> Something like (not yet ideal, some stripey artefacts caused by the cell
> steppings interfering with each other):
>
> require(ncdf)
> f <- open.ncdf("20071003.276.0237.n17.nc")
> lon <- get.var.ncdf(f, "lon")
> lat <- get.var.ncdf(f, "lat")
> mcsst <- get.var.ncdf(f, "mcsst")
> require(fields)
> image(lon, lat, mcsst, col = tim.colors(64))
> obj <- list(x=lon, y=lat, z=mcsst)
> library(sp)
> crds <- expand.grid(lon, lat)
> SPDF <- SpatialPointsDataFrame(SpatialPoints(crds,
> proj4string=CRS("+proj=longlat +datum=WGS84")),
> data=data.frame(mcsst=c(mcsst)))
> summary(SPDF)
> bb <- bbox(SPDF)
> grd <- GridTopology(bb[,1], c(diff(bb[1,])/1200, diff(bb[2,])/1200),
>  c(1200,1200))
> SG <- SpatialGrid(grd, CRS("+proj=longlat +datum=WGS84"))
> o <- overlay(SG, SPDF)
> oo <- tapply(SPDF$mcsst, o, mean, na.rm=TRUE)
> df <- data.frame(mcsst=rep(NA, 1200*1200))
> df$mcsst[as.integer(names(oo))] <- oo
> summary(df)
> SGDF <- SpatialGridDataFrame(grd, CRS("+proj=longlat +datum=WGS84"),
>  data=df)
> x11()
> image(SGDF, col = tim.colors(64), axes=TRUE)
>
>
> from there follow ?kmlOverlay, using the example as a template, with
> image() instead of plot(). At least it's something.
>
> Roger
>
>
>
>> Barry
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> [email protected]
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>>
> --
> Roger Bivand
> Economic Geography Section, Department of Economics, Norwegian School of
> Economics and Business Administration, Helleveien 30, N-5045 Bergen,
> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
> e-mail: [email protected]
>
>


-- 
Matthew J. Oliver
Assistant Professor
School of Marine Science and Policy
College of Earth, Ocean and Environment
University of Delaware
700 Pilottown Rd.
Lewes, DE, 19958
302-645-4079
http://www.ceoe.udel.edu/people/profile.aspx?moliver

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to