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
... 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.
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 torgba
If all your images use the same indexed palette you can set this to false and get a large performance gain
Levels
: list of resolutionsFormat
: level_0_x_resolution, level_0_y_resolution, level_1_x_resolution, level_1_y_resolutionThis 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 aboveGeneralBounds
: bounds in the CRS specified in the.prj
fileFormat
:minX,minY maxX,maxY
NumFiles
: should be the same as the number of features in your shapefile
Reference