Tobias you may need to go and ask on the ImageIO-Ext project which provides the data format sink pulling all the raster content through the tile cache.
I am not sure if parallel processing is used when writing out a single image (it would depend on the format). In geoserver there end up being multiple requests each one writing out a different area of the raster content. -- Jody Garnett On Mon, 23 May 2022 at 08:16, Tobias Gerdin <tobias.ger...@havochvatten.se> wrote: > Hello! > > > > I brought up this question before but basically I am still unsure of how > multithreading fits into Geotools when it comes to raster processing > (making it a JAI question, I guess). JAI being a lazy "pull”-based API I > would expect the terminal operations (such as encoding a raster into a > format for export, such as GeoTIFF) having some sort of multiprocessing > ability, but that does not seem to be the case? > > > > Last time I posed this question I was pointed to this code: > > > https://github.com/geosolutions-it/soil_sealing/blob/96a8c86e9ac891a273e7bc61b910416a0dbe1582/src/extension/wps-soil-sealing/wps-changematrix/src/main/java/org/geoserver/wps/gs/soilsealing/ChangeMatrixProcess.java#L669 > > > > Similar to the above I currently I do this: > > > > private void triggerActualCalculation(RenderedImage renderedImage) { > final int numTileY = renderedImage.getNumYTiles(), > numTileX = renderedImage.getNumXTiles(), > minTileX = renderedImage.getMinTileX(), > minTileY = renderedImage.getMinTileY(); > > final List<Point> tiles = new ArrayList<Point>(numTileX * numTileY); > for (int i = minTileX; i < minTileX + numTileX; i++) { > for (int j = minTileY; j < minTileY + numTileY; j++) { > tiles.add(new Point(i, j)); > } > } > > tiles.stream() > .parallel() > .forEach(tileIndex -> renderedImage.getTile(tileIndex.x, > tileIndex.y)); > } > > > > This seems to cause the rendering chain to be performed in parallel, but > now it looks like I need to make sure that all computed tiles fit into the > tile cache, or else I guess tiles will be thrown out and recomputed again > when invoking the GeoTiffWriter to actually serialize the raster. So it > seems like I need to choose between doing things in parallel or having > enough memory for all the tiles to fit into the tile cache. While the > resulting image is just a single band (as opposed to the 100 something > bands used as inputs), it seems like there must a better way to do this, > having tiles computed in parallel but all of them not necessarily fitting > into the tile cache (the raster grid can potentially be very large and we > would like to be able to deploy this system on machines without huge > amounts of RAM). As I understand it Geotools was designed to cope with > these constraints, but how is it to be done? > > > > *Regards,* > > *Tobias Gerdin* > Havs- och vattenmyndigheten behandlar dina personuppgifter i enlighet med > dataskyddsförordningen och myndighetens dataskyddspolicy, läs mer på > www.havochvatten.se/sa-behandlar-hav-dina-personuppgifter > SwAM processes your personal data in accordance with the General Data > Protection Regulation (GDPR) and our Data Protection Policy, see > www.havochvatten.se/sa-behandlar-hav-dina-personuppgifter > _______________________________________________ > GeoTools-GT2-Users mailing list > GeoTools-GT2-Users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users >
_______________________________________________ GeoTools-GT2-Users mailing list GeoTools-GT2-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users