The majority of formats require the same two steps for visualization on a Lightspeed view. To visualize GeospatialPDF data:

  1. Decode the data into an ILcdModel using an ILcdModelDecoder.

  2. Create an ILspLayer for the ILcdModel and add it to the ILspView.

//First create the model
ILcdModelDecoder decoder =
    new TLcdCompositeModelDecoder(TLcdServiceLoader.getInstance(ILcdModelDecoder.class));
ILcdModel model = decoder.decode("Data/GeospatialPDF/AZ_Bright Angel_314414_1962_62500_geo.pdf");

//Create a layer for the model
ILspLayer layer = createGeospatialPDFLayer(model);

//Add the layer to the Lightspeed view (an ILspView)
view.addLayer(layer);
/**
 * The model decoder can return a single ILcdModel or an ILcdModelTreeNode,
 * depending on the data set.
 *
 * This method can deal with both scenarios
 */
static ILspLayer createGeospatialPDFLayer(ILcdModel model) {
  //The model decoder returns a model tree node when the PDF contains multiple map frames
  //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(createGeospatialPDFLayer(childModel));
    }
    return node;
  } else if (TLcdGeospatialPDFModelDescriptor.TYPE_NAME.equals(model.getModelDescriptor().getTypeName())) {
    return TLspRasterLayerBuilder.newBuilder()
                                 .model(model)
                                 .build();
  }
  throw new IllegalArgumentException("Cannot create layer for model " + model);
}

This results in a GeospatialPDF layer with default styling. See Visualizing Raster Data for more information about visualizing and styling raster data.

This code snippet uses the TLcdCompositeModelDecoder, initialized with all model decoders available in the service registry.

The model decoder class that is actually responsible for decoding GeospatialPDF data is the TLcdGeospatialPDFModelDecoder.