[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Map image with a sparse array



whdaffer@my-deja.com wrote:

>   I have the following problem. I have an array of geographically
> colocated data (0.5 by 0.5 degree grid) that is the result of averaging
> all 253 swaths of one cycle of Topex data into this grid. Topex data has
> a small (3 or maybe 10km) swath, so the majority of the grid location
> (65%) are 'bad' in the sense that those grid elements contain no
> averaged data.
>
>   I want to display this by mapping it using map_set/map_image. The old
> method simply 'tv'd the image to the screen and then finessed applying
> the continents/grid lines to the image. A bit of a boondogle, and not
> very upgradeable.
>
>   The problem is that there seems to be no way to tell map_image (and
> map_patch too) that certain data (the 'bad' data value) should be
> excluded from whatever
> averaging/bilinear-interpolation/nearest-neighbor-chosing method is used
> and the 'mapped' image has places that are clearly corrupted by the
> presence of the bad data. The problem is ameliorated by use nearest
> neighbor rather than bilinear interpolation (i.e. bilinear=0) and I am
> setting compress=0, so that the inverse transformation is done on each
> pixel. Also, I've started out with a window set to the size of the input
> data array and with map_set,position=[0.,0,1,1] so that the mapping
> coordinate system occupies the entire window. These remedies I hit upon
> thinking that they would minimize the damage, and they have done that,
> but when I compare my results with the older, more 'pristine' but vastly
> less portible, upgradeable, maintainable method, there are big
> differences.
>
>   The 'missing' keyword just sets elements outside the range input via
> the 'min' and 'max' keywords and those  outside of the mapping
> coordinates to the bad value, it doesn't allow one to exclude data from
> the averaging/interpolation/chosing method.

Assuming
(1) Your data ('grid') is already on a 0.5 x 0.5 degree grid,
(2) The data range is 0.0 to 100.0 (adjust to taste),
(3) The missing value is -999.0 (adjust to taste),

image = bytscl(grid, min=0.0, max=100.0, top=!d.table_size-2) + 1B
index = where(grid eq -999.0, count)
if (count gt 0) then image[index] = 0B

map_set, /aitoff, /isotropic
mapped = map_image(image, startx, starty, xsize, ysize, $
  latmin=-90.0, latmax=90.0, lonmin=-180.0, lonmax=180.0, $
  compress=1, missing=0B, scale=0.05)

loadct, 13, bottom=1
tv, mapped, startx, starty, xsize=xsize, ysize=ysize

Cheers,
Liam.
http://cimss.ssec.wisc.edu/~gumley