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.
Hi Ugo, > . . . > I'd like to have L "surfaces" (here NOT the Earth's surface > only, but rather to be understood as layers, that is, soil > layers, for example). Each of these surfaces has an attribute, > so that's what I meant with the "2": for every layer there > is a depth and a correspondig attribute. These layers are > not at some constant depth level. > . . . Thanks for the information - now I understand and it should be possible to solve your problem. I am posting this to the list since there are others with similar data and (I hope) this email has useful information for working with such data. Here are four choices for MathType and mappings depending on how you want your data displayed. 1. Use a MathType like: (level -> ( (X-Axis, Y-Axis) -> (Elevation, Overlay) ) ) with the mappings: X-Axis -> XAxis Y-Axis -> YAxis Elevation -> ZAxis Overlay -> RGB level -> SelectRange (or level -> SelectValue) plus maybe a ConstantMap to Display.Alpha. This would display each layer as a colored surface, and allow you to select which layers are displayed. If you map layer to SelectValue, you can only see one layer at a time. If you map layer to SelectRange, you can see a range of layers at once. You might also want a ConstantMap to Display.Alpha to make the layers semi-transparent. Note that the data object with MathType: (level -> ( (X-Axis, Y-Axis) -> (Elevation, Overlay) ) ) would be a FieldImpl, and each sample would be a FlatField with MathType ( (X-Axis, Y-Axis) -> (Elevation, Overlay) ), just like the 'ff' data object in DEMViewer. 2. Modify the above approach, by putting the surface data in a separate data objectw with MathType: ( (X-Axis, Y-Axis) -> (Elevation, Overlay) ) This would allow the surface data to be independently selected for display in combination with a selected underground layer, or with a selected range of underground layers. You would probably implement selection of the surface with a JButton, making the surface disappear by a setData(null) on the surface DataReference, and make the surface re-appear by a setData(ff) on the surface DataReference. 3. If you want to see 3-D iso-surfaces of underground attribute values, then you'd use the MathType: ( (X-Axis, Y-Axis, level) -> Overlay ) This is a FlatField, but you would use a Gridded3DSet for its domain Set, rather than a Linear3DSet. The Gridded3DSet constructor takes an array samples[3][number_of_grid_points] of grid point locations. The samples[0][*] values are the X-Axis coordinates and the samples[1][*] values are the Y-Axis coordinates - these would probably just be a regular lattice. But the samples[2][*] values would be the heights of the layers. The samples values for row = x, column = y and layer = z would be: samples[0][x + LengthX * (y + LengthY * z)] = x samples[1][x + LengthX * (y + LengthY * z)] = y samples[2][x + LengthX * (y + LengthY * z)] Elevation of layer z at row = x and column = y This will make a 'curvy' 3-D grid. Hopefully, because the grid follows your layers, you don't need too many grid levels. By the way, how many layers do you have (in a typical data set)? Then you would look at iso-surfaces with the following mappings: X-Axis -> XAxis Y-Axis -> YAxis level -> ZAxis Overlay -> IsoContour If you do have a large number of layers, you may run out of memory. Just to make sure you've got it right, you could resample to a smaller LengthX, LengthY and number of layers. Or you can add swap space and increase -mxNNNm. We will try to find ways to reduce memory use soon. Given a FlatField with MathType: ( (X-Axis, Y-Axis, level) -> Overlay ) you could also use the FlatField.resample() to extract planar slices for visualization. The Set argument to resample would be a rectangular array of sample locations lying on the plane and resample would return a FlatField whose visualization should be a colored plane (with proper mappings). 4. If iso-surfaces just cannot work because of memory use, another approach is to use the MathType: (level -> ( (X-Axis, Y-Axis) -> (Elevation, Overlay) ) ) described in 1. above, but to use the mappings: X-Axis -> XAxis Y-Axis -> YAxis Elevation -> ZAxis Overlay -> IsoContour This will display a set of contour lines on each layer. You might also add the mapping 'Overlay -> RGB' to color the contours so it is easier to associate contours on different layers. This approach has the advantage of showing where the layers are, as well as the contours. I think this is a very interesting problem and am sure we can find a way for VisAD to work well for you. So please keep me posted on your progress and any problems you have. Cheers, Bill ---------------------------------------------------------- Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI 53706 whibbard@xxxxxxxxxxxxx 608-263-4427 fax: 608-263-6738 http://www.ssec.wisc.edu/~billh/vis.html
visad
archives: