NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

[visad] Polar Representation Radar Data

Hi VisAD people,

I am using the visad.bom.Radar2DCoordinateSystem to resample and
visualize some radar data.

As we can see in the picture "radar_Linear2DSet.png", the data are not in polar 
representation.

This is happening because I might be using the method Linear2DSet.

What is the correct way to make the representation in polar coordinates?

The Application Unidata IDV (see picture "radar_polar_IDV.png") is the 
representation of data from radars in polar coordinates equal to I want to do. 
How?

Following excerpt from my source code:


/*********************************/

setRadar = new Linear2DSet(domain_tuple, radarlimites[2], radarlimites[3],
                    800, radarlimites[0], radarlimites[1],
                    360);

latMap.setRange(radarlimites[2], radarlimites[3]);
lonMap.setRange(radarlimites[0], radarlimites[1]);

vals_ff = getFieldPolar((int) srf.getNumero_BINS_ou_Linhas(),
                        (int) srf.getNumero_Raios_ou_Colunas(),
                        (float) srf.getLatitude(), (float) srf.getLongitude(),
                        srf.getTamanho_Bin_ou_celula(), srf.getDados());

vals_ff = (FlatField) vals_ff.resample(setRadar, visad.Data.NEAREST_NEIGHBOR,
                        visad.Data.NO_ERRORS);

radarMap.setRange(0, 72);

ColorAlphaControl rgbControl = (ColorAlphaControl) radarMap.getControl();

cores = new float[][]{{0f, 0.98f, 0f}, {0f, 0.81f, 0f}, {0f, 0.7f, 0f}, {0f, 
0.59f, 0f}, {0f, 0.47f, 0f}, {0f, 0.33f, 0f}, {0f, 0.22f, 0f}, {0.98f, 0.95f, 
0f}, {0.96f, 0.88f, 0f}, {0.96f, 0.82f, 0f}, {0.95f, 0.76f, 0f}, {0.91f, 0.55f, 
0f}, {0.9f, 0.48f, 0f}, {0.98f, 0f, 0f}, {0.87f, 0f, 0f}, {0.78f, 0f, 0f}, 
{0.72f, 0f, 0f}, {0.65f, 0f, 0f}, {1f, 0.62f, 1f}, {0.98f, 0.13f, 0.98f}, 
{0.88f, 0.13f, 0.88f}, {0.80f, 0.13f, 0.92f}, {0.69f, 0.16f, 0.86f}, {0.63f, 
0.17f, 0.84f}, {0.57f, 0.17f, 0.80f}};

//Seta a escala de cores
rgbControl.setTable(RadarCalculos.getCoresVisad(cores));

//Toca plotar
if (radarRef == null) {
        radarRef = new DataReferenceImpl("radarref");
        displayImpl.addReference(radarRef);
}
radarRef.setData(vals_ff);


/*********************************/

        method getFieldPolar

/*********************************/

private FlatField getFieldPolar(int beans, int rays, final float lat,
            final float lon, final float dist, final float[][] data) {
        try {
            reflection1 = RealType.getRealType("reflection");
            azimuth = RealType.getRealType("azimuth", CommonUnit.degree, null);
            range = RealType.getRealType("range", CommonUnit.meter, null);

            polarCoords = new Radar2DCoordinateSystem(lat, lon, dist, dist, 0f, 
1.003f);

            polarTuple = new RealTupleType(new RealType[]{range, azimuth}, 
polarCoords, null);
            polarFunc = new FunctionType(polarTuple, reflection);

            latLonTuple = new RealTupleType(RealType.Latitude, 
RealType.Longitude);
            latLonFunc = new FunctionType(latLonTuple, reflection);

            //Copia os dados para uma matriz com um raio a mais (361 - rays + 1)
            //O Visad exige que o último raio seja igual ao primeiro
            float[][] dados = new float[1][(rays + 1) * beans];
            for (int i = 0; i < rays + 1; i++) {
                for (int j = 0; j < beans; j++) {
                    if (i != rays) {
                        dados[0][i * beans + j] = data[0][i * beans + j];
                    } else {
                        dados[0][i * beans + j] = data[0][0 * beans + j];
                    }
                    if (Float.isNaN(dados[0][i * beans + j])) {
                        dados[0][i * beans + j] = -999.9f;
                    }
                }
            }

            Set set = new Integer2DSet(polarTuple, beans, rays + 1);//rays+1 
para termos 361 raios

            FlatField flatField = new FlatField(polarFunc, set);

            flatField.setSamples(dados, true);
            return flatField;
        } catch (RemoteException ex) {
            Logger.getLogger(DisplayVisad.class.getName()).log(Level.SEVERE, 
null, ex);
        } catch (VisADException ex) {
            Logger.getLogger(DisplayVisad.class.getName()).log(Level.SEVERE, 
null, ex);
        }
        return null;
    }


/*********************************/



Thanks
Marco Aurélio Silva Neto 


      
____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

Attachment: radar_Linear2DSet.png
Description: PNG image

Attachment: radar_polar_IDV.png
Description: PNG image

  • 2009 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: