Re: Gridded2DSet

Hi again Desiree,

Desiree Hilbring wrote:
> 
> Hi Ugo,
> 
> I tried to implement your hints:
> 
> This is where the array gets created:
> 
>     public void makeArray2() {
>         double[][] coords = new double[2][east.length];
>         coords[0] = new double[east.length];
>         coords[1] = new double[north.length];
>         for (int i=0;i<coords[0].length;i++) {
>             coords[0][i]=east[i];
>             coords[1][i]=north[i];
>         }
> 
>         for (int j=0;j<coords[0].length;j++) {
>             System.out.println("e "+coords[0][j]);
>         }
>         for (int j=0;j<coords[1].length;j++) {
>             System.out.println("n "+coords[1][j]);
>         }
>     }
> 

Not quite. Samples must be double[ 2 ][ east.length * north.length ]
You've got east.length * north.length in your grid, remember.


> The arrays look similar to the one you mailed me, I even changed my north
> and east values in the RealTupleType, because GISterm looked somehow
> upside down (spiegelverkehrt?) in the screenshots to ArcView.

Yes, the fact that your're seeing the mirror image has to do with the
order of your samples.

> 
> I am getting a VisAD Exception which sais, samples are null, is this the
> coordinates array with the x and y values or the height array? And how do
> I have to specify the height array, does it include the missing values or
> not?

I can't tell. You could send in the complete error. But from above I'd
guess the problem is in the domain samples (aren't there too few of
them?).

> 
> Here is the VisAD stuff:
> 
>     public void makeSurface() {
> 
> 
>         eastValues = RealType.getRealType("eastValues");
>         northValues = RealType.getRealType("northValues");
>         heightValues = RealType.getRealType("heightValues");
> 
>         try {
>             //domain_tuple = new RealTupleType(northValues,eastValues);
>             domain_tuple = new RealTupleType(eastValues,northValues);
>             // Create a FunctionType (domain_tuple -> range_tuple);
>             func_en_h = new FunctionType(domain_tuple, heightValues);
> 
>             domain_set = new
> Gridded2DDoubleSet(domain_tuple,coords,nRows,nCols);
> 
>             // Get the Set samples to facilitate the calculations
>             float[][] set_samples = domain_set.getSamples( true );
> 
>             // We create another array, with the same number of elements
> of
>             // altitude and temperature, but organized as
>             float[][] flat_samples = new float[1][nCols * nRows];
> 
>             // ...and then we fill our 'flat' array with the generated
> values
>             // by looping over NCOLS and NROWS
>             // specifiy height
>             for(int c = 0; c < nCols; c++){
>                 for(int r = 0; r < nRows; r++){
>                     //flat_samples[0][c*nRows+r] = height[c*nRows+r];
>                     flat_samples[0][c*nRows+r] = heightNaN[c*nRows+r];
>                 }
>             }
> 
>             /*
>             for (int n=0;n<height.length;n++) {
>                 flat_samples[0][n]=height[n];
>             }
>             */
>             for(int c = 0; c < nRows; c++){
>                 for(int r = 0; r < nCols; r++){
>                     System.out.println(c*nRows+r);
>                     // ursprüngliches quadratische x.y.z grid
>                     flat_samples[0][c*nRows+r] = height[c*nRows+r];
>                     // nicht quadratische gridvisadlayer grid
>                     //flat_samples[0][c*nCols+r] = height[c*nCols+r];
>                 }
>             }
> 
>             // Create a FlatField
>             // Use FlatField(FunctionType type, Set domain_set)
>             vals_ff = new FlatField( func_en_h, domain_set);
> 
>             // ...and put the values above into it
>             // Note the argument false, meaning that the array won't be
> copied
>             vals_ff.setSamples( flat_samples , false );
> 
>             // Create Display and its maps
>             // A 2D display
>             display = new DisplayImplJ3D("display1");
> 
>             // Create the ScalarMaps: latitude to XAxis, longitude to
> YAxis and
>             // altitude to RGB and temperature to IsoContour
>             // Use ScalarMap(ScalarType scalar, DisplayRealType
> display_scalar)
>             eastMap = new ScalarMap( eastValues, Display.YAxis );
>             northMap = new ScalarMap( northValues, Display.XAxis );
>             heightMap = new ScalarMap(heightValues,Display.ZAxis);
> 
>             eastMap.setRange(-1.0, 1.0);
>             northMap.setRange(-1.0, 1.0);
>             heightMap.setRange(-1.0, 1.0);
> 
> 
>             // Add maps to display
>             display.addMap( eastMap );
>             display.addMap( northMap );
>             display.addMap( heightMap );
> 
>             // Create a data reference and set the FlatField as our data
>             data_ref = new DataReferenceImpl("data_ref");
>             data_ref.setData( vals_ff );
>             renderer = new DefaultRendererJ3D();
> 
>             // Add reference to display
>             display.addReferences(renderer,data_ref);
>             //display.addReference( data_ref );
>             display.addDisplayListener(listener);
> 
>         }
>         catch (VisADException ve) {
>             System.out.println("VisADException");
>             System.out.println(ve.getMessage());
>         }
>         catch (RemoteException re) {
>             System.out.println("RemoteExcpetion");
>             System.out.println(re.getMessage());
>         }
>     }
> 
> Thanks for your help Desiree
> 

I think you're getting "null" from coords, which have the wrong size.

Cheers,

Ugo


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