Mosaic Plugin

This format make use of a shapefile to act as a kind of index, the features in this shapefile list the filename of the “images” to display and the location in which they should be displayed.

Maven:

<dependency>
  <groupId>org.geotools</groupId>
  <artifactId>gt-imagemosaic</artifactId>
  <version>${geotools.version}</version>
</dependency>

To create the shapefile you simply provide the location of a folder with “images” to the constructor of ImageMosaicReader. Those image files must conatin it’s own world-file to be a part of the image mosaic.

To display the mosaic within a map, you will use a GridReaderLayer.

            ImageMosaicReader reader = new ImageMosaicReader(new File(pathMosaic));
            layer = new GridReaderLayer(reader, style);

The simplest style to provide would be like this:

        Style style = styleFactory.createStyle();

        FeatureTypeStyle type = styleFactory.createFeatureTypeStyle();
        style.featureTypeStyles().add(type);

        Rule rule = styleFactory.createRule();
        rule.symbolizers().add(styleFactory.createRasterSymbolizer());

        type.rules().add(rule);

To use mulitthreading you must provide a threading pool to the mosaic reader, and also tell the grid reader layer to allow multithreading.

            ExecutorService executor = Executors.newFixedThreadPool(numThreads);

            ImageMosaicReader reader =
                    new ImageMosaicReader(
                            new File(pathMosaic), new Hints(Hints.EXECUTOR_SERVICE, executor));

            ParameterValue<Boolean> multithreadParam =
                    ImageMosaicFormat.ALLOW_MULTITHREADING.createValue();
            multithreadParam.setValue(true);

            layer =
                    new GridReaderLayer(
                            reader, style, new GeneralParameterValue[] {multithreadParam});

Example Image Mosaic files

An example data set looks something like:

bluemarble.shp
bluemarble.prj
bluemarble.properties
sample_image.dat
... a bunch of raster files ...
  • Shapefile file

    The schema of your shapefile is important:

    You MUST have a attribute called “location”, this will be used to look up the raster files

  • PRJ file

    The usual projection file associated with a shapefile, using the WKT format for a CoordinateReferenceSystem.

  • Sample image file

    The sample_image.dat (legacy sample_image) is a sample image used to determine color model upfront without requiring a full scan.

    By default the sample image file is limited to built-in image formats and color models. This restriction may be relaxed using the system property org.geotools.gce.imagemosaic.sampleimage.allowlist:

    org.geotools.gce.imagemosaic.sampleimage.allowlist=^some\.package\.MyCustomColorModel$
    
  • Properties File

    The property file is REQUIRED and use to provide a bunch of settings:

    Example bluemarble.properties:

    #
    #Thu Jan 11 14:53:30 CET 2007
    Name=modis
    ExpandToRGB=true
    Levels=10000.0,10000.0
    LevelsNum=1
    GeneralBounds=-3637013.0,-1158091.0 1019969.0,4092819.0
    NumFiles=3
    

    Where the following are required:

    • Name

    • ExpandToRGB: true if we need to expand the color model from indexed to rgba

      • If all your images use the same indexed palette you can set this to false and get a large performance gain

    • Levels: list of resolutions

      • Format: level_0_x_resolution, level_0_y_resolution, level_1_x_resolution, level_1_y_resolution

      • This measure of resolution describes how big each pixel is in real world units

      • Sample calculation: envelope.getLength(0) / image.getWidth()

      • You can define several levels in order to capture overview files if you have them

    • LevelsNum: the number of levels mentioned above

    • GeneralBounds: bounds in the CRS specified in the .prj file

    • Format: minX,minY maxX,maxY

    • NumFiles: should be the same as the number of features in your shapefile

Reference