The majority of formats require the same two steps for visualization on a Lightspeed view. To visualize BUFR data:
-
Decode the data into an
ILcdModel
using anILcdModelDecoder
. -
Create an
ILspLayer
for theILcdModel
and add it to theILspView
.
//First create the model ILcdModelDecoder decoder = new TLcdCompositeModelDecoder(TLcdServiceLoader.getInstance(ILcdModelDecoder.class)); ILcdModel model = decoder.decode(sourceName); ILspLayer layer = createBUFRLayer(model); //Add the layer to the Lightspeed view (an ILspView) view.addLayer(layer);
A decoded BUFR model can be:
-
A single
ILcdModel
-
A model tree structure composed of
ILcdModelContainer
andILcdModel
instances.
The code to create a layer for the decoded model should deal with both scenarios:
/** * The BUFR model decoder can return a single model or a model tree structure, depending on the file that gets decoded. * This method uses recursion to deal with both scenarios. */ static ILspLayer createBUFRLayer(ILcdModel model) { //The model decoder returns a model tree node when the file contains multiple messages //The node itself is just an empty container. We create an empty layer node for that container. //Then we loop over the child models (=the actual data), and create layers for those as well if (model instanceof ILcdModelContainer) { TLspLayerTreeNode node = new TLspLayerTreeNode(model); for (int i = 0; i < ((ILcdModelContainer) model).modelCount(); i++) { ILcdModel childModel = ((ILcdModelContainer) model).getModel(i); node.addLayer(createBUFRLayer(childModel)); } return node; } else { return TLspBUFRLayerBuilder.newBuilder().model(model).build(); } }
This results in a BUFR layer with default styling.
This code snippet uses the The model decoder class that is actually responsible for decoding BUFR data is the
|