I am struggling to understand why I obtain different results using the same coordinates in this example:
import rasterio
#data link: https://earthexplorer.usgs.gov/download/external/options/SENTINEL_2A/3022286/INVSVC/
pathToImgFolder = ""
pathData = pathToImgFolder + "L1C_T21LXC_A001666_20170701T140052\S2B_MSIL1C_20170701T140049_N0205_R067_T21LXC_20170701T140052.SAFE\GRANULE\L1C_T21LXC_A001666_20170701T140052\IMG_DATA\T21LXC_20170701T140049_B01.jp2"
boudingBoxCoordinates = (606859.0750363453, 8241169.269917269, 607219.0750363453, 8241529.269917269)
points = [(607014.0750363453,8241374.26991727),(607024.0750363444,8241374.26991727),\
(607034.0750363453,8241374.26991727),(607044.0750363453,8241374.26991727),\
(607054.0750363442,8241374.26991727)]
with rasterio.open(pathData) as img:
bandWindow = rasterio.windows.from_bounds(*boudingBoxCoordinates, img.transform)
winTransform = rasterio.windows.transform(bandWindow,img.transform)
bandData = img.read(1, window = bandWindow)
allData = img.read(1)
for point in points:
rBand,cBand = rasterio.transform.rowcol(winTransform,point[0],point[1])
rFull,cFull = img.index(point[0],point[1])
bandVal = bandData[rBand,cBand]
fullVal = allData[rFull,cFull]
print(f"{fullVal} {'=' if bandVal == fullVal else '!='} {bandVal}")
When I execute this example i get this result:
1202 = 1202
1330 != 1202
1330 != 1202
1330 = 1330
1330 = 1330
I think it is related to the spatial resolution of the band(60m), but I am not sure and I do not know what to do.
The img.profile
is:
{'driver': 'JP2OpenJPEG', 'dtype': 'uint16', 'nodata': None, 'width': 1830, 'height': 1830, 'count': 1, 'crs': CRS.from_epsg(32721), 'transform': Affine(60.0, 0.0, 600000.0, 0.0, -60.0, 8300020.0), 'blockxsize': 192, 'blockysize': 192, 'tiled': True}