The majority of formats require the same two steps for visualization on a Lightspeed view. To visualize AIXM 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("Data/AIXM/4.5/airspace_1.xml");
//Create a layer for the model
ILspLayer layer = createAIXMLayer(model);
//Add the layer to the Lightspeed view (an ILspView)
view.addLayer(layer);
A decoded AIXM 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 AIXM 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 createAIXMLayer(ILcdModel model) {
//The model decoder can return a model tree node.
//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);
//Use recursion to create layers for the child models
node.addLayer(createAIXMLayer(childModel));
}
return node;
} else if ("AIXM".equals(model.getModelDescriptor().getTypeName())) {
return TLspAIXMLayerBuilder.newBuilder()
.model(model)
.build();
}
throw new IllegalArgumentException("Cannot create layer for model " + model);
}
The resulting layer(s) use the default styling. See the Visualizing AIXM data on a Lightspeed view reference guide for more information on how to customize the styling.
This code snippet uses the The model decoder class that is actually responsible for decoding AIXM data is the
|