Thank you, Andrea.

From what I've read, LERC can be interesting because it combines strong compression ratios with relatively fast decompression (reading).

For now, I would be interested to hear other people's opinion on whether LERC could be useful to them. Then maybe at some point I can ask to support this in GeoServer.

Thanks,
Jeroen


On 20-Dec-22 15:13, Andrea Aime wrote:
GeoServer does not, indeed, support the LERC compression.
If you'd like to see support for this compression implemented, see this guide:
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-fixes,-improvements-and-new-features-in-GeoServer

Cheers
Andrea




Cheers
Andrea


On Tue, Dec 20, 2022 at 12:58 PM Jeroen van Gent <jeroen.vang...@aeronomie.be> wrote:

    Dear all,

    I am serving a set of Geotiff raster files as single-file stores in
    GeoServer and so far everything went fine with GeoTiff files
    compressed
    with the DEFLATE or ZSTD algorithms.

    This week I have been testing LERC compression (with different values
    for the gdal MAX_Z_ERROR option) and when serving those in
    GeoServer any
    WMS request results in a NullPointer Exception message instead of the
    requested PNG tile.

    Does GeoServer not read LERC-compressed files? Or is the cause
    somewhere
    else?

    I can open the LERC-compressed GeoTiff files just fine in QQIS.

    Details:

    GeoServer version: 2.20.2

    WMS request:

    
https://my.geoserver.be/geoserver/SACS/wms?&service=WMS&request=GetMap&layers=SACS%3As5p_tropomi_psg4326_20221206_res0p02_compLERC&styles=&format=image%2Fpng&transparent=true&version=1.1.1&interpolations=nearest%20neighbor&width=256&height=256&srs=EPSG%3A3857&bbox=-15028131.257091936,5009377.085697314,-10018754.171394622,10018754.171394628
    
<https://my.geoserver.be/geoserver/SACS/wms?&service=WMS&request=GetMap&layers=SACS%3As5p_tropomi_psg4326_20221206_res0p02_compLERC&styles=&format=image%2Fpng&transparent=true&version=1.1.1&interpolations=nearest%20neighbor&width=256&height=256&srs=EPSG%3A3857&bbox=-15028131.257091936,5009377.085697314,-10018754.171394622,10018754.171394628>


    GeoServer Log (VERBOSE_LOGGING level):

    Request: getMap
         Angle = 0.0
         BaseUrl = https://geoserver-dev.aeronomie.be/geoserver/
         Bbox = SRSEnvelope[-1.5028131257091936E7 :
    -1.0018754171394622E7,
    5009377.085697314 : 1.0018754171394628E7]
         BgColor = java.awt.Color[r=255,g=255,b=255]
         Buffer = 0
         Clip = null
         CQLFilter = null
         Crs = PROJCS["WGS 84 / Pseudo-Mercator",
       GEOGCS["WGS 84",
         DATUM["World Geodetic System 1984",
           SPHEROID["WGS 84", 6378137.0, 298.257223563,
    AUTHORITY["EPSG","7030"]],
           AUTHORITY["EPSG","6326"]],
         PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
         UNIT["degree", 0.017453292519943295],
         AXIS["Geodetic longitude", EAST],
         AXIS["Geodetic latitude", NORTH],
         AUTHORITY["EPSG","4326"]],
       PROJECTION["Popular Visualisation Pseudo Mercator",
    AUTHORITY["EPSG","1024"]],
       PARAMETER["semi_minor", 6378137.0],
       PARAMETER["latitude_of_origin", 0.0],
       PARAMETER["central_meridian", 0.0],
       PARAMETER["scale_factor", 1.0],
       PARAMETER["false_easting", 0.0],
       PARAMETER["false_northing", 0.0],
       UNIT["m", 1.0],
       AXIS["Easting", EAST],
       AXIS["Northing", NORTH],
       AUTHORITY["EPSG","3857"]]
         Elevation = []
         Env = {}
         Exceptions = SE_XML
         FeatureId = null
         FeatureVersion = null
         Filter = null
         Format = image/png
         FormatOptions = {}
         Get = true
         Height = 256
         Interpolations = [javax.media.jai.InterpolationNearest@4620bf84]
         Layers = [org.geoserver.wms.MapLayerInfo@81053a8a]
         MaxFeatures = null
         Palette = null
         RawKvp = {REQUEST=GetMap, FORMAT=image/png, SRS=EPSG:3857,
    
BBOX=-15028131.257091936,5009377.085697314,-10018754.171394622,10018754.171394628,

    VERSION=1.1.1, STYLES=, SERVICE=WMS, INTERPOLATIONS=nearest neighbor,
    WIDTH=256, HEIGHT=256, TRANSPARENT=true,
    LAYERS=SACS:s5p_tropomi_psg4326_20221206_res0p02_compLERC}
         RemoteOwsType = null
         RemoteOwsURL = null
         Request = GetMap
         RequestCharset = UTF-8
         ScaleMethod = null
         Sld = null
         SldBody = null
         SldVersion = null
         SortBy = null
         SortByArrays = null
         SRS = EPSG:3857
         StartIndex = null
         StyleBody = null
         StyleFormat = sld
         Styles = [StyleImpl[ name=so2vcd]]
         StyleUrl = null
         StyleVersion = null
         Tiled = false
         TilesOrigin = null
         Time = []
         Transparent = true
         ValidateSchema = false
         Version = 1.1.1
         ViewParams = null
         Width = 256
    2022-12-20 12:00:46,225 DEBUG [wms.map] - Writing png image ...
    2022-12-20 12:00:46,225 DEBUG [config.impl] - Could not locate
    service
    of type interface org.geoserver.wms.WMSInfo in workspace
    WorkspaceInfoImpl[SACS], available services were [WMSInfoImpl[WMS],
    WFSInfoImpl[WFS], WCSInfoImpl[WCS], WMTSInfoImpl[WMTS]]
    2022-12-20 12:00:46,268 INFO [geoserver.servlets] - OutputStream was
    successfully aborted.
    2022-12-20 12:00:46,268 ERROR [geoserver.ows] -
    java.lang.NullPointerException
    2022-12-20 12:00:46,269 DEBUG [geoserver.filters] - Compressing
    output
    for mimetype: application/vnd.ogc.se_xml;charset=UTF-8
    2022-12-20 12:00:46,270 DEBUG
    [filter.GeoServerSecurityContextPersistenceFilter$1] -
    SecurityContextHolder now cleared, as request processing completed
    2022-12-20 12:01:07,257 DEBUG
    [security.IncludeQueryStringAntPathRequestMatcher] - Checking
    match of
    request : 'Path:
    /web/wicket/bookmarkable/org.geoserver.web.admin.logpage,
    QueryString:
    34-1.IFormSubmitListener-form&lines=1000'; against '/web/**'
    2022-12-20 12:01:07,257 DEBUG
    [security.IncludeQueryStringAntPathRequestMatcher] - Matched Path:
    /web/wicket/bookmarkable/org.geoserver.web.admin.logpage,
    QueryString:
    34-1.IFormSubmitListener-form&lines=1000 with /web/**
    2022-12-20 12:01:07,260 DEBUG [org.geoserver] - Thread 80 locking in
    mode READ
    2022-12-20 12:01:07,260 DEBUG [org.geoserver] - Thread 80 got the
    lock
    in mode READ
    2022-12-20 12:01:07,261 DEBUG [org.geoserver] - Thread 80 locking in
    mode READ
    2022-12-20 12:01:07,261 DEBUG [org.geoserver] - Thread 80
    releasing the
    lock in mode READ
    2022-12-20 12:01:07,264 DEBUG
    [filter.GeoServerSecurityContextPersistenceFilter$1] -
    SecurityContextHolder now cleared, as request processing completed
    2022-12-20 12:01:07,269 DEBUG
    [security.IncludeQueryStringAntPathRequestMatcher] - Checking
    match of
    request : 'Path:
    /web/wicket/bookmarkable/org.geoserver.web.admin.logpage,
    QueryString:
    lines=1000'; against '/web/**'
    2022-12-20 12:01:07,269 DEBUG
    [security.IncludeQueryStringAntPathRequestMatcher] - Matched Path:
    /web/wicket/bookmarkable/org.geoserver.web.admin.logpage,
    QueryString:
    lines=1000 with /web/**
    2022-12-20 12:01:07,273 DEBUG [org.geoserver] - Thread 6554
    locking in
    mode READ
    2022-12-20 12:01:07,273 DEBUG [org.geoserver] - Thread 6554 got
    the lock
    in mode READ


    Output from gdalinfo on the LERC-compressed file:

    Driver: GTiff/GeoTIFF
    Files: testfiles/s5p_tropomi_psg4326_20221206_res0p02_compLERC.tif
    Size is 18000, 8616
    Coordinate System is:
    GEOGCRS["WGS 84",
         DATUM["World Geodetic System 1984",
             ELLIPSOID["WGS 84",6378137,298.257223563,
                 LENGTHUNIT["metre",1]]],
         PRIMEM["Greenwich",0,
             ANGLEUNIT["degree",0.0174532925199433]],
         CS[ellipsoidal,2],
             AXIS["geodetic latitude (Lat)",north,
                 ORDER[1],
                 ANGLEUNIT["degree",0.0174532925199433]],
             AXIS["geodetic longitude (Lon)",east,
                 ORDER[2],
                 ANGLEUNIT["degree",0.0174532925199433]],
         ID["EPSG",4326]]
    Data axis to CRS axis mapping: 2,1
    Origin = (-180.000000000000000,82.340000000000018)
    Pixel Size = (0.020000000000000,-0.020000000000000)
    Metadata:
       AREA_OR_POINT=Area
    Image Structure Metadata:
       COMPRESSION=LERC
       INTERLEAVE=BAND
       LAYOUT=COG
       LERC_VERSION=2.4
    Corner Coordinates:
    Upper Left  (-180.0000000,  82.3400000) (180d 0' 0.00"W,
    82d20'24.00"N)
    Lower Left  (-180.0000000, -89.9800000) (180d 0' 0.00"W,
    89d58'48.00"S)
    Upper Right ( 180.0000000,  82.3400000) (180d 0' 0.00"E,
    82d20'24.00"N)
    Lower Right ( 180.0000000, -89.9800000) (180d 0' 0.00"E,
    89d58'48.00"S)
    Center      (   0.0000000,  -3.8200000) (  0d 0' 0.00"E, 3d49'12.00"S)
    Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
       NoData Value=-9999
       Overviews: 9000x4308, 4500x2154, 2250x1077, 1125x539, 563x270,
    282x135, 141x68
    jeroenv@ada6:
    /scratch/jeroenv/sacstest/geotiff_compression/geotiff-benchmark>
    gdalinfo testfiles/s5p_tropomi_psg4326_20221206_res0p02_compLERC.tif
    Driver: GTiff/GeoTIFF
    Files: testfiles/s5p_tropomi_psg4326_20221206_res0p02_compLERC.tif
    Size is 18000, 8616
    Coordinate System is:
    GEOGCRS["WGS 84",
         DATUM["World Geodetic System 1984",
             ELLIPSOID["WGS 84",6378137,298.257223563,
                 LENGTHUNIT["metre",1]]],
         PRIMEM["Greenwich",0,
             ANGLEUNIT["degree",0.0174532925199433]],
         CS[ellipsoidal,2],
             AXIS["geodetic latitude (Lat)",north,
                 ORDER[1],
                 ANGLEUNIT["degree",0.0174532925199433]],
             AXIS["geodetic longitude (Lon)",east,
                 ORDER[2],
                 ANGLEUNIT["degree",0.0174532925199433]],
         ID["EPSG",4326]]
    Data axis to CRS axis mapping: 2,1
    Origin = (-180.000000000000000,82.340000000000018)
    Pixel Size = (0.020000000000000,-0.020000000000000)
    Metadata:
       AREA_OR_POINT=Area
    Image Structure Metadata:
       COMPRESSION=LERC
       INTERLEAVE=BAND
       LAYOUT=COG
       LERC_VERSION=2.4
    Corner Coordinates:
    Upper Left  (-180.0000000,  82.3400000) (180d 0' 0.00"W,
    82d20'24.00"N)
    Lower Left  (-180.0000000, -89.9800000) (180d 0' 0.00"W,
    89d58'48.00"S)
    Upper Right ( 180.0000000,  82.3400000) (180d 0' 0.00"E,
    82d20'24.00"N)
    Lower Right ( 180.0000000, -89.9800000) (180d 0' 0.00"E,
    89d58'48.00"S)
    Center      (   0.0000000,  -3.8200000) (  0d 0' 0.00"E, 3d49'12.00"S)
    Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
       NoData Value=-9999
       Overviews: 9000x4308, 4500x2154, 2250x1077, 1125x539, 563x270,
    282x135, 141x68








    _______________________________________________
    Geoserver-users mailing list

    Please make sure you read the following two resources before
    posting to this list:
    - Earning your support instead of buying it, but Ian Turton:
    http://www.ianturton.com/talks/foss4g.html#/
    - The GeoServer user list posting guidelines:
    http://geoserver.org/comm/userlist-guidelines.html

    If you want to request a feature or an improvement, also see this:
    
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


    Geoserver-users@lists.sourceforge.net
    https://lists.sourceforge.net/lists/listinfo/geoserver-users



--

Regards,

Andrea Aime

==GeoServer Professional Services from the experts!

Visit http://bit.ly/gs-services-us <http://bit.ly/gs-services-us>for more information.==Ing. Andrea Aime @geowolfTechnical Lead

GeoSolutions Groupphone: +39 0584 962313

fax:     +39 0584 1660272

mob:   +39  339 8844549


https://www.geosolutionsgroup.com/ <https://www.geosolutionsgroup.com/>

http://twitter.com/geosolutions_it <http://twitter.com/geosolutions_it>

-------------------------------------------------------


Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia.This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail

_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this 
list:
- Earning your support instead of buying it, but Ian Turton: 
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: 
http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: 
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to