Thanks Daniele! I have raised the problem as well to the Sentinel-Hub
team. I sent your analysis and their answer is at the bottom of this email.
The image is a satellite image (true color), here is the json that
represents the info:
{
"id": "TRUE-COLOR-S2L2A",
"title": "TRUE COLOR S2L2A",
"description": "Based on bands 4,3,2",
"styles": [
{
"name": "default",
"description": "Default layer style",
"dataProduct": {
"@id":
"https://services.sentinel-hub.com/configuration/v1/datasets/S2L2A/dataproducts/752",
"id": 752,
"name": "TRUE_COLOR.RGB",
"description": "True color image by mapping the red,
green and blue input bands. Value = B04,B03,B02 - RGB visualization.",
"evalScript": "//VERSION=3\n\nlet minVal = 0.0;\nlet
maxVal = 0.4;\n\nlet viz = new HighlightCompressVisualizer(minVal,
maxVal);\n\nfunction evaluatePixel(samples) {\n let val =
[samples.B04, samples.B03, samples.B02];\n val =
viz.processList(val);\n val.push(samples.dataMask);\n return
val;\n}\n\nfunction setup() {\n return {\n input: [{\n bands:
[\n \"B02\",\n \"B03\",\n \"B04\",\n \"dataMask\"\n
]\n }],\n output: {\n bands: 4\n }\n }\n}\n\n",
"dataset": {
"@id":
"https://services.sentinel-hub.com/configuration/v1/datasets/S2L2A"
},
"baseProduct": "TRUE_COLOR",
"visualization": "RGB",
"scriptVersion": 3,
"listed": true,
"additionalData": {
"preV3EquivalentId": 85
}
}
}
],
"orderHint": 8,
"dataset": {
"@id":
"https://services.sentinel-hub.com/configuration/v1/datasets/S2L2A"
},
"datasetSource": {
"@id":
"https://services.sentinel-hub.com/configuration/v1/datasets/S2L2A/sources/2"
},
"defaultStyleName": "default",
"datasourceDefaults": {
"upsampling": "BICUBIC",
"mosaickingOrder": "mostRecent",
"temporal": false,
"maxCloudCoverage": 2,
"previewMode": "PREVIEW",
"type": "S2L2A"
},
"userData": {}
}
------- Their answer: ----------
Yeah, that pretty much confirms what I was saying.
Unfortunately, SentinelHub service cannot know if you are requesting
back a true RGB(+A) image, or is it something else (e.g. B05,B06,B8a,B11
from Sentinel-2). So the decision that 8-bit 4channel image /has/ to be
RGBA generally does not hold true.
Could you please share the WMS call with me (with last half of
instanceId masked)? (you can also DM me)
------------------------------------
Thanks,
Juan
On 9/9/2021 10:28 AM, Daniele Romagnoli wrote:
Hi Juan,
As reported by Jody, your TIFF data seems not properly formed.
In the past years, any RGB+4TH band (ie. RGB-IR, RGB-NIR) has been
handled as RGBAlpha which obviously isn't right.
So the GT imageio-ext TIFF is nowadays properly parsing additional
TIFF Tags to make sure that IR isn't handled as a transparent band and
so on.
The TIFF Specifications reports some info about
SamplesPerPixels,Extrasamples and their relationship, i.e:
SamplesPerPixel
Tag = 277 (115.H) Type = SHORT
The number of components per pixel.
This number is 3 for RGB images, unless extra samples are present.
See the ExtraSamples field for further information.
ExtraSamples Description of extra components.
Tag = 338 (152.H) Type = SHORT N = m
Specifies that each pixel has m extra components whose interpretation
is defined by one of the values listed below. When this field is used,
the SamplesPerPixel field has a value greater than the
PhotometricInterpretation field suggests. For example, full-color RGB
data normally has SamplesPerPixel=3. If SamplesPerPixel is greater
than 3, then the ExtraSamples field describes the meaning of the extra
samples. If SamplesPerPixel is, say, 5 then ExtraSamples will contain
2 values, one for each extra sample. ExtraSamples is typically used to
include non-color information, such as opacity, in an image. The
possible values for each item in the field's value are: 0 =
Unspecified data 1 = Associated alpha data (with pre-multiplied color)
2 = Unassociated alpha data
It might be the case that the sample TIFF doesn't respect some of
these considerations.
Whilst GDAL might be fail-tolerant reporting that warning (Warning 1:
TIFFReadDirectory:Sum of Photometric type-related color channels and
ExtraSamples doesn't match SamplesPerPixel. Defining non-color
channels as ExtraSamples),
the GeoTools TIFF Reader (actually the Imageio-ext-tiff reader) isn't.
Checking your data, the TIFF Tags report:
Photometric = 0 (MinIsBlack) so it seems like a GrayScale image
BitsPerSample = 8,8,8,8 so it's actually a 4 bands image.
SamplesPerPixel = 4 (4 bands indeed)
but no extraSamples are provided
So I think that it's struggling with having a gray image with 3
additional unknown samples per pixel.
Do you have any additional knowledge about what is the content of this
data and what do their bands represent?
Please, let us know.
Regards,
Daniele Romagnoli
==GeoServer Professional Services from the experts!
Visit http://bit.ly/gs-services-us <http://bit.ly/gs-services-us>for
more information.==Daniele RomagnoliSenior Software
EngineerGeoSolutions Groupphone: +39 0584 962313fax: +39 0584
1660272https://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.
On Thu, Sep 9, 2021 at 3:52 PM Juan Felipe Arjona
<jfarj...@jfarjona.com <mailto:jfarj...@jfarjona.com>> wrote:
I added the imageio-ext-tiff plugin in my dependencies, and Java
ImageIO can open and read the TIFF images, but when using
GeoTools, the application throws the same Exception.
Juan
On 9/9/2021 8:45 AM, Juan Felipe Arjona wrote:
Thanks Jody!
Yes you are right, the uDig I am running uses GT v. 14.1. I
tried to downgrade my dependencies but I am using classes that
were not present at that release, so difficult to test.
On the other hand, I think that uDig has its own tiff reader,
from their pom.xml:
...
<groupId>it.geosolutions.imageio-ext</groupId>
<artifactId>imageio-ext-tiff</artifactId>
<version>1.1.13</version>
...
See their website:
https://github.com/geosolutions-it/imageio-ext/wiki/Available-Components
<https://github.com/geosolutions-it/imageio-ext/wiki/Available-Components>
My guess is that they are not using GeoTools Tiff reader
implementation. Maybe GT could borrow their plugins to be more
universal?
Thanks,
Juan
On 9/9/2021 12:59 AM, Jody Garnett wrote:
It looks like gdalinfo is also indicating there is a problem:
Warning 1: TIFFReadDirectory:Sum of Photometric type-related
color
channels and ExtraSamples doesn't match SamplesPerPixel.
Defining
non-color channels as ExtraSamples.
You could try processing the file with gdal2gdal address issue.
You also indicated the image worked with uDig, do you know what
version? uDig uses geotools so you may be able to try your
sample code with an older version of the library.
--
Jody Garnett
On Tue, 7 Sept 2021 at 21:11, Juan Felipe Arjona
<jfarj...@jfarjona.com <mailto:jfarj...@jfarjona.com>> wrote:
Hello:
I am trying to display GeoTiff files obtained from the
Sentinel-Hub WMS
service (https://apps.sentinel-hub.com
<https://apps.sentinel-hub.com>) using Geotools. The service
responds with GeoTIFF files, that I can easily open with
QGIS 3.20, but
Geotools (25.2) complains with:
org.geotools.data.DataSourceException: bandOffsets.length is
wrong!
at
org.geotools.gce.geotiff.GeoTiffReader.<init>(GeoTiffReader.java:279)
~[gt-geotiff-25.2.jar:na]
at
org.geotools.gce.geotiff.GeoTiffFormat.getReader(GeoTiffFormat.java:331)
~[gt-geotiff-25.2.jar:na]
at
org.geotools.gce.geotiff.GeoTiffFormat.getReader(GeoTiffFormat.java:77)
~[gt-geotiff-25.2.jar:na]
...
Caused by: org.geotools.data.DataSourceException:
bandOffsets.length is
wrong!
at
org.geotools.gce.geotiff.GeoTiffReader.getHRInfo(GeoTiffReader.java:539)
~[gt-geotiff-25.2.jar:na]
at
org.geotools.gce.geotiff.GeoTiffReader.<init>(GeoTiffReader.java:265)
~[gt-geotiff-25.2.jar:na]
... 20 common frames omitted
Caused by: java.lang.IllegalArgumentException:
bandOffsets.length is wrong!
at
java.desktop/javax.imageio.ImageTypeSpecifier$Interleaved.<init>(ImageTypeSpecifier.java:286)
~[na:na]
at
java.desktop/javax.imageio.ImageTypeSpecifier.createInterleaved(ImageTypeSpecifier.java:399)
~[na:na]
at
it.geosolutions.imageio.plugins.tiff.TIFFDecompressor.getRawImageTypeSpecifier(TIFFDecompressor.java:1027)
~[imageio-ext-tiff-1.3.9.jar:na]
at
it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader.getImageTypes(TIFFImageReader.java:1359)
~[imageio-ext-tiff-1.3.9.jar:na]
at
org.geotools.coverage.grid.io
<http://org.geotools.coverage.grid.io>.AbstractGridCoverage2DReader.setLayout(AbstractGridCoverage2DReader.java:1164)
~[gt-coverage-25.2.jar:na]
at
org.geotools.gce.geotiff.GeoTiffReader.getHRInfo(GeoTiffReader.java:373)
~[gt-geotiff-25.2.jar:na]
... 21 common frames omitted
Gdal says about the file:
gdalinfo img-pierrenet-2b9.tif
Warning 1: img-pierrenet-2b9.tif: TIFFReadDirectory:Sum of
Photometric
type-related color channels and ExtraSamples doesn't match
SamplesPerPixel. Defining non-color channels as ExtraSamples.
Driver: GTiff/GeoTIFF
Files: img-pierrenet-2b9.tif
Size is 199, 200
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 = (31.163993000000001,51.090416070349242)
Pixel Size = (0.000143449691988,-0.000089870351746)
Metadata:
AREA_OR_POINT=Area
TIFFTAG_RESOLUTIONUNIT=1 (unitless)
TIFFTAG_XRESOLUTION=1
TIFFTAG_YRESOLUTION=1
Image Structure Metadata:
COMPRESSION=DEFLATE
INTERLEAVE=PIXEL
Warning 1: TIFFReadDirectory:Sum of Photometric type-related
color
channels and ExtraSamples doesn't match SamplesPerPixel.
Defining
non-color channels as ExtraSamples.
Corner Coordinates:
Upper Left ( 31.1639930, 51.0904161) ( 31d 9'50.37"E, 51d
5'25.50"N)
Lower Left ( 31.1639930, 51.0724420) ( 31d 9'50.37"E, 51d
4'20.79"N)
Upper Right ( 31.1925395, 51.0904161) ( 31d11'33.14"E, 51d
5'25.50"N)
Lower Right ( 31.1925395, 51.0724420) ( 31d11'33.14"E, 51d
4'20.79"N)
Center ( 31.1782662, 51.0814290) ( 31d10'41.76"E, 51d
4'53.14"N)
Band 1 Block=199x10 Type=Byte, ColorInterp=Gray
Band 2 Block=199x10 Type=Byte, ColorInterp=Undefined
Band 3 Block=199x10 Type=Byte, ColorInterp=Undefined
Band 4 Block=199x10 Type=Byte, ColorInterp=Undefined
The file can be found at:
https://www.dropbox.com/s/xgro5jw35uw59i4/img-pierrenet-2b9.tif?dl=0
<https://www.dropbox.com/s/xgro5jw35uw59i4/img-pierrenet-2b9.tif?dl=0>
My code (mostly a copy/paste from ImageLab.java):
...
Path img = Path.of("img-pierrenet-2b9.tif");
AbstractGridFormat format =
GridFormatFinder.findFormat(img.toFile());
Hints hints = new Hints();
if (format instanceof GeoTiffFormat) {
hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER,
Boolean.TRUE);
}
reader = format.getReader(img.toFile(), hints); //
Exception is
thrown here
Style rgbStyle = createRGBStyle();
mapContent.setTitle("Satellite Images");
Layer layer = new GridReaderLayer(reader, rgbStyle);
mapContent.addLayer(layer);
mapPane.repaint();
...
Is there a way to get around this problem ?
Thanks in advance,
Juan
_______________________________________________
GeoTools-GT2-Users mailing list
GeoTools-GT2-Users@lists.sourceforge.net
<mailto:GeoTools-GT2-Users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
<https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users>
_______________________________________________
GeoTools-GT2-Users mailing list
GeoTools-GT2-Users@lists.sourceforge.net
<mailto:GeoTools-GT2-Users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
<https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users>
_______________________________________________
GeoTools-GT2-Users mailing list
GeoTools-GT2-Users@lists.sourceforge.net
<mailto:GeoTools-GT2-Users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
<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