-
add python 3.10 support
-
add
apply_expression
method inrio_tiler.models.ImageData
class -
update
rio-tiler.reader.read/part
to avoid using WarpedVRT when no reprojection or nodata override is needed -
add
rio_tiler.io.rasterio.ImageReader
to work either with Non-geo or Geo images in a Non-geo manner (a.k.a: in the pixel coordinates system)with ImageReader("image.jpg") as src: im = src.part((0, 100, 100, 0)) with ImageReader("image.jpg") as src: im = src.tile(0, 0, src.maxzoom) print(im.bounds) >>> BoundingBox(left=0.0, bottom=256.0, right=256.0, top=0.0)
-
add
rio_tiler.io.xarray.XarrayReader
to work withxarray.DataArray
import xarray from rio_tiler.io import XarrayReader with xarray.open_dataset( "https://ncsa.osn.xsede.org/Pangeo/pangeo-forge/noaa-coastwatch-geopolar-sst-feedstock/noaa-coastwatch-geopolar-sst.zarr", engine="zarr", decode_coords="all" ) as src: ds = src["analysed_sst"][:1] ds.rio.write_crs("epsg:4326", inplace=True) with XarrayReader(ds) as dst: img = dst.tile(1, 1, 2)
note:
xarray
andrioxarray
optional dependencies are needed for the reader
breaking changes
-
remove python 3.7 support
-
update rasterio requirement to
>=1.3
to allow python 3.10 support -
rename
rio_tiler.io.cogeo
torio_tiler.io.rasterio
-
rename
COGReader
toReader
. We addedrio_tiler.io.COGReader
alias torio_tiler.io.Reader
backwards compatibility# before from rio_tiler.io import COGReader from rio_tiler.io.cogeo import COGReader # now from rio_tiler.io import Reader from rio_tiler.io.rasterio import Reader
-
rio_tiler.readers.read()
,rio_tiler.readers.part()
,rio_tiler.readers.preview()
now return a ImageData object -
remove
minzoom
andmaxzoom
attribute inrio_tiler.io.SpatialMixin
base class -
remove
minzoom
andmaxzoom
attribute inrio_tiler.io.Reader
(now defined as properties) -
use
b
prefix for band names inrio_tiler.models.ImageData
class (and in rio-tiler's readers)# before with COGReader("cog.tif") as cog: img = cog.read() print(cog.band_names) >>> ["1", "2", "3"] print(cog.info().band_metadata) >>> [("1", {}), ("2", {}), ("3", {})] print(cog.info().band_descriptions) >>> [("1", ""), ("2", ""), ("3", "")] print(list(cog.statistics())) >>> ["1", "2", "3"] # now with Reader("cog.tif") as cog: img = cog.read() print(img.band_names) >>> ["b1", "b2", "b3"] print(cog.info().band_metadata) >>> [("b1", {}), ("b2", {}), ("b3", {})] print(cog.info().band_descriptions) >>> [("b1", ""), ("b2", ""), ("b3", "")] print(list(cog.statistics())) >>> ["b1", "b2", "b3"] with STACReader("stac.json") as stac: print(stac.tile(701, 102, 8, assets=("green", "red")).band_names) >>> ["green_b1", "red_b1"]
-
depreciate
asset_expression
in MultiBaseReader. Use of expression is now possible -
expression
for MultiBaseReader must be in form of{asset}_b{index}
# before with STACReader("stac.json") as stac: stac.tile(701, 102, 8, expression="green/red") # now with STACReader("stac.json") as stac: stac.tile(701, 102, 8, expression="green_b1/red_b1")
-
rio_tiler.reader.point()
(and all Reader's point methods) now return a rio_tiler.models.PointData object# before with rasterio.open("cog.tif") as src:: v = rio_tiler.reader.point(10.20, -42.0) print(v) >>> [0, 0, 0] with COGReader("cog.tif") as cog: print(cog.point(10.20, -42.0)) >>> [0, 0, 0] # now with rasterio.open("cog.tif") as src:: v = rio_tiler.reader.point(src, (10.20, -42)) print(v) >>> PointData( data=array([3744], dtype=uint16), mask=array([255], dtype=uint8), band_names=['b1'], coordinates=(10.20, -42), crs=CRS.from_epsg(4326), assets=['cog.tif'], metadata={} ) with Reader("cog.tif") as cog: print(cog.point(10.20, -42.0)) >>> PointData( data=array([3744], dtype=uint16), mask=array([255], dtype=uint8), band_names=['b1'], coordinates=(10.20, -42), crs=CRS.from_epsg(4326), assets=['cog.tif'], metadata={} )
-
deleted
rio_tiler.reader.preview
function and updatedrio_tiler.reader.read
to allow width/height/max_size options -
reordered keyword options in all
rio_tiler.reader
function for consistency -
removed
AlphaBandWarning
warning when automatically excluding alpha band from data -
remove
nodata
,unscale
,resampling_method
,vrt_options
andpost_process
options toReader
init method and replaced withoptions
# before with COGReader("cog.tif", nodata=1, resampling_method="bilinear") as cog: data = cog.preview() # now with Reader(COGEO, options={"nodata": 1, "resampling_method": "bilinear"}) as cog: data = cog.preview()
- Hide
NotGeoreferencedWarning
warnings inutils.render
andutils.resize_array
- update
MultiBaseReader
andMultiBandReader
points
method to prepare for numpy changes.
- Deprecate
rio_tiler.io.GCPCOGReader
and allow GPCS dataset to be opened byrio_tiler.io.COGReader
# before
with GCPCOGReader("my.tif") as cog:
...
# now, COGReader will find the gcps and create an internal WarpedVRT using the gpcs and crs
with COGReader("my.tif") as cog:
...
- add
ImageData.rescale
to rescale the array in place - add
ImageData.apply_color_formula
to apply color formula in place
- Fix cutline creation for MultiPolygon (author @Fernigithub, cogeotiff#493)
- Switch to
pyproject.toml
andflit
for packaging (cogeotiff#490) - Catch discrete colormap with negative values (cogeotiff#492)
- avoid calculating statistics for non-finite values (cogeotiff#489)
- forward
band names
to ImageData output inmosaic_reader
(cogeotiff#486)
- add support for setting the S3 endpoint url scheme via the
AWS_HTTPS
environment variables inaws_get_object
function using boto3 (cogeotiff#476) - Add semicolon
;
support for multi-blocks expression (cogeotiff#479) - add
rio_tiler.expression.get_expression_blocks
method to split expression (cogeotiff#479) - add
merged_statistics
method forMultiBaseReader
to get statistics using between assets expression (cogeotiff#478)
future deprecation
- using a comma
,
in an expression to define multiple blocks will be replaced by semicolon;
# before
expression = "b1+b2,b2"
# new
expression = "b1+b2;b2"
breaking changes
- update morecantile requirement to
>=3.1,<4.0
. WebMercatorQuad TMS is now aligned with GDAL and Mercantile TMS definition.
- make sure we raise an HTTP exception when using an invalid STAC url (cogeotiff#475)
- switch from
functools.lru_cache
tocachetools.LRUCache
to allow unashable options inrio_tiler.io.stac.fetch
function (cogeotiff#471)
- avoid useless call to
transform_bounds
if input/output CRS are equals (cogeotiff#466) - make sure
geographic_bounds
don't return inf or nan values (cogeotiff#467)
- no change since
3.0.0a6
- add
rio_tiler.utils.resize_array
to resize array to a given width/height (cogeotiff#463) - use
resize_array
inImageData.create_from_list
to avoid trying merging array of different sizes (cogeotiff#463)
breaking changes
- update
MultiBaseReader
andMultiBandReader
to be their own abstract classes instead of being subclass ofBaseReader
. - put
reader
attribute outside of the__init__
method forMultiBaseReader
andMultiBandReader
.
- allow the definition of
geographic_crs
used in thegeographic_bounds
property (cogeotiff#458) - use
contextlib.ExitStack
to better manager opening/closing rasterio dataset (cogeotiff#459) - moves
BBox, ColorTuple, Indexes, NoData, NumType
type definitions inrio_tiler.types
(cogeotiff#460) - better types definition for ColorMap objects (cogeotiff#460)
- fix some types issues (cogeotiff#460)
- refactor
SpatialMixin.tile_exists
to compare the bounds in the dataset's coordinate system to avoid coordinates overflow (a TMS CRS bounds can be smaller than the dataset CRS bounds) (cogeotiff#455)
- Reader's
info
andstatistics
methods to default to availablebands
orassets
if not provided (cogeotiff#451)
- Allow
rio_tiler.utils.get_array_statistics
to return0
for unfound category, instead of raising an error (cogeotiff#443)
breaking changes
-
add
input
in BaseReader class definition to avoid type mismatch (cogeotiff#450)Note:
input
replacesfilepath
attribute in STACReader and COGReader.
removed
-
rio_tiler.models.ImageStatistics
model
- add
crs
property inrio_tiler.io.base.SpatialMixin
(cogeotiff#429) - add
geographic_bounds
inrio_tiler.io.base.SpatialMixin
to return bounds in WGS84 (cogeotiff#429)
from rio_tiler.io import COGReader
with COGReader("https://rio-tiler-dev.s3.amazonaws.com/data/fixtures/cog.tif") as cog:
print(cog.bounds)
>> (373185.0, 8019284.949381611, 639014.9492102272, 8286015.0)
print(cog.crs)
>> "EPSG:32621"
print(cog.geographic_bounds)
>> (-61.28762442711404, 72.22979795551834, -52.301598718454485, 74.66298001264106)
- Allow errors to be ignored when trying to find
zooms
for dataset inrio_tiler.io.COGReader
. If we're not able to find the zooms in selected TMS, COGReader will defaults to the min/max zooms of the TMS (cogeotiff#429)
from pyproj import CRS
from morecantile import TileMatrixSet
from rio_tiler.io import COGReader
# For a non-earth dataset there is no available transformation from its own CRS and the default WebMercator TMS CRS.
with COGReader("https://rio-tiler-dev.s3.amazonaws.com/data/fixtures/cog_nonearth.tif") as cog:
>> UserWarning: Cannot determine min/max zoom based on dataset information, will default to TMS min/max zoom.
print(cog.minzoom)
>> 0
print(cog.maxzoom)
>> 24
# if we use a `compatible TMS` then we don't get warnings
europa_crs = CRS.from_authority("ESRI", 104915)
europa_tms = TileMatrixSet.custom(
crs=europa_crs,
extent=europa_crs.area_of_use.bounds,
matrix_scale=[2, 1],
)
with COGReader(
"https://rio-tiler-dev.s3.amazonaws.com/data/fixtures/cog_nonearth.tif",
tms=europa_tms,
) as cog:
print(cog.minzoom)
>> 4
print(cog.maxzoom)
>> 6
- compare dataset bounds and tile bounds in TMS crs in
rio_tiler.io.base.SpatialMixin.tile_exists
method to allow dataset and TMS not compatible with WGS84 crs (cogeotiff#429) - use
httpx
package instead of requests (author @rodrigoalmeida94, cogeotiff#431) - allow half pixel
tile_buffer
around the tile (e.g 0.5 -> 257x257, 1.5 -> 259x259) (author @bstadlbauer, cogeotiff#405) - add support for intervals colormap (cogeotiff#439))
from rio_tiler.colormap import apply_cmap, apply_intervals_cmap
data = numpy.random.randint(0, 255, size=(1, 256, 256))
cmap = [
# ([min, max], [r, g, b, a])
([0, 1], [0, 0, 0, 0]),
([1, 10], [255, 255, 255, 255]),
([10, 100], [255, 0, 0, 255]),
([100, 256], [255, 255, 0, 255]),
]
data, mask = apply_intervals_cmap(data, cmap)
# or
data, mask = apply_cmap(data, cmap)
breaking changes
- update morecantile requirement to version >=3.0 (cogeotiff#418)
- remove python 3.6 support (cogeotiff#418)
- remove
max_size
defaults forCOGReader.part
andCOGReader.feature
, which will now default to full resolution reading.
# before
with COGReader("my.tif") as cog:
img = cog.part(*cog.dataset.bounds, dst_crs=cog.dataset.crs, bounds_crs=cog.dataset.crs)
# by default image should be max 1024x1024
assert max(img.width, 1024) # by default image should be max 1024x1024
assert max(img.height, 1024)
# now (there is no more max_size default)
with COGReader("my.tif") as cog:
img = cog.part(*cog.dataset.bounds, dst_crs=cog.dataset.crs, bounds_crs=cog.dataset.crs)
assert img.width == cog.dataset.width
assert img.height == cog.dataset.height
-
add
.statistics
method in base classes (cogeotiff#427) -
remove
rio_tiler.io.base.SpatialMixin.spatial_info
andrio_tiler.io.base.SpatialMixin.center
properties (cogeotiff#429) -
Reader's
.bounds
property should now be in dataset's CRS, not inWGS84
(cogeotiff#429)
# before
with COGReader("my.tif") as cog:
print(cog.bounds)
>>> (-61.287001876638215, 15.537756794450583, -61.27877967704677, 15.542486503997608)
# now
with COGReader("my.tif") as cog:
print(cog.bounds)
>>> (683715.3266400001, 1718548.5702, 684593.2680000002, 1719064.90736)
print(cog.crs)
>>> EPSG:32620
print(cog.geographic_bounds)
>>> (-61.287001876638215, 15.537756794450583, -61.27877967704677, 15.542486503997608)
- Use
RIO_TILER_MAX_THREADS
environment variable instead ofMAX_THREADS
(author @rodrigoalmeida94, cogeotiff#432) - remove
band_expression
inrio_tiler.io.base.MultiBandReader
(https://github.com/cogeotiff/rio-tiler/pull/433) - change
asset_expression
input type fromstr
toDict[str, str]
inrio_tiler.io.base.MultiBaseReader
(cogeotiff#434)
# before
with STACReader("mystac.json") as stac:
img = stac.preview(
assets=("data1", "data2"),
asset_expression="b1*2", # expression was applied to each asset
)
# now
with STACReader("mystac.json") as stac:
img = stac.preview(
assets=("data1", "data2"),
asset_expression={"data1": "b1*2", "data2": "b2*100"}, # we can now pass per asset expression
)
- add
asset_indexes
inrio_tiler.io.base.MultiBaseReader
, which replacesindexes
. (cogeotiff#434)
# before
with STACReader("mystac.json") as stac:
img = stac.preview(
assets=("data1", "data2"),
indexes=(1,), # indexes was applied to each asset
)
# now
with STACReader("mystac.json") as stac:
img = stac.preview(
assets=("data1", "data2"),
asset_indexes={"data1": 1, "data2": 2}, # we can now pass per asset indexes
)
removed
rio_tiler.io.BaseReader.metadata
andrio_tiler.io.BaseReader.stats
base class methods (cogeotiff#425)rio_tiler.reader.stats
function (cogeotiff#440)rio_tiler.reader.metadata
function (cogeotiff#440)rio_tiler.utils._stats
function (cogeotiff#440)
- Make sure output data is of type
Uint8
when applying a colormap (cogeotiff#423) - Do not auto-rescale data if there is a colormap (cogeotiff#423)
- update type information for mosaics functions (cogeotiff#409)
-
add support for setting the S3 endpoint url via the
AWS_S3_ENDPOINT
environment variables inaws_get_object
function using boto3 (cogeotiff#394) -
make
ImageStatistics.valid_percent
a value between 0 and 100 (instead of 0 and 1) (author @param-thakker, cogeotiff#400) -
add
fetch_options
toSTACReader
to allow custom configuration to the fetch client (cogeotiff#404)with STACReader("s3://...", fetch_options={"request_pays": True}): pass
-
Fix alpha band values when storing
Uint16
data in PNG. (cogeotiff#407)
- add auto-rescaling in
ImageData.render
method to avoid error when datatype is not supported by the output driver (cogeotiff#391)
# before - exit with error
with open("img.png", "wb") as f:
f.write(ImageData(numpy.zeros((3, 256, 256), dtype="float32")).render())
>>> (ERROR) CPLE_NotSupportedError: "PNG driver doesn't support data type Float32. Only eight bit (Byte) and sixteen bit (UInt16) bands supported".
# now - print a warning
with open("img.png", "wb") as f:
f.write(ImageData(numpy.zeros((3, 256, 256), dtype="float32")).render())
>>> (WARNING) InvalidDatatypeWarning: "Invalid type: `float32` for the `PNG` driver. Data will be rescaled using min/max type bounds".
breaking changes
- change type of
in_range
option inImageData.render
toSequence[Tuple[NumType, NumType]]
(cogeotiff#391)
img = ImageData(numpy.zeros((3, 256, 256), dtype="uint16"))
# before - Tuple[NumType, NumType]
buff = img.render(in_range=(0, 1000, 0, 1000, 0, 1000))
# now - Sequence[Tuple[NumType, NumType]]
buff = img.render(in_range=((0, 1000), (0, 1000), (0, 1000)))
- add warning when dataset doesn't have overviews (cogeotiff#386)
- add
width
,height
,count
andoverviews
infos inCOGReader.info()
(cogeotiff#387) - add
driver
inCOGReader.info()
output (cogeotiff#388) - add
valid_percent
instats
output (cogeotiff#389)
- use importlib.resources
.files
method to resolve the package directory (cogeotiff#379)
- add
read()
method in COGReader (cogeotiff#366) - add
tile_buffer
option toCOGReader.tile()
method to add pixels around a tile request (cogeotiff#365) - use
importlib.resources.path
to find rio-tilercmap_data
directory (cogeotiff#370) - re-use type definitions (cogeotiff#337)
- make sure
py.typed
is included in the package (cogeotiff#363) - add
jpg
alias inimg_profiles
(cogeotiff#364)
from rio_tiler.profiles import img_profiles
jpeg = img_profiles.get("jpeg")
jpg = img_profiles.get("jpg")
assert jpeg == jpg
- Added pystac.MediaType.COG in supported types by STAC reader
- fix bad type definition in
rio_tiler.colormap.ColorMaps
data (cogeotiff#359) - add
rio_tiler.colormap.parse_color
function to parse HEX color (cogeotiff#361)
- Reduce the number of
.read()
calls for dataset without nodata value (cogeotiff#355) - replace deprecated
numpy.float
bynumpy.float64
- fix bad mask datatype returned by mosaic methods (cogeotiff#353)
- align WarpedVRT with internal blocks when needed. This is to reduce the number of GET requests need for VSI files (cogeotiff#345)
- fix arguments names conflicts between mosaic_reader/tasks and STACReader options (cogeotiff#343)
- update rio-tiler pypi description.
- add MultiPolygon support in
rio_tiler.utils.create_cutline
(cogeotiff#323) - support discrete colormap by default in
apply_cmap
(cogeotiff#321) - delete deprecated
rio_tiler.mercator
submodule - added default factory in
rio_tiler.colormap.ColorMaps
. - fix missing
metadata
forwarding inImageData.post_process
method. - refactor
rio_tiler.io.GCPCOGReader
for better inheritance from COGReader.
breaking change
- renamed input parameter
tile
todata
inrio_tiler.utils.render
. - renamed input parameter
arr
todata
inrio_tiler.utils.mapzen_elevation_rgb
- made
rio_tiler.io.stac.to_pystac_item
private (renamed to_to_pystac_item
) - renamed
rio_tiler.colormap.DEFAULTS_CMAPS
torio_tiler.colormap.DEFAULT_CMAPS_FILES
- made
rio_tiler.reader._read
public (renamed to rio_tiler.reader.read) (ref: cogeotiff#332)
- add
NPZ
output format (cogeotiff#308) - add pystac for STAC item reader (author @emmanuelmathot, cogeotiff#212)
- delete deprecated function:
rio_tiler.reader.tile
,rio_tiler.utils.tile_exits
andrio_tiler.utils.geotiff_options
- deprecated
rio_tiler.mercator
submodule (cogeotiff#315) - update morecantile version to 2.1, which has better
tms.zoom_for_res
definition.
- add
feature
method to reader classes (cogeotiff#306)
- add
data
validation inrio_tiler.models.ImageData
model. Data MUST be a 3 dimensions array in form of (count, height, width). mask
is now optional forrio_tiler.models.ImageData
model, but will be initialized to a default full valid (255
) array.
import numpy
from rio_tiler.models import ImageData
data = numpy.random.rand(3, 10, 10)
img = ImageData(data)
assert img.mask.all()
- add
metadata
property torio_tiler.models.ImageData
model
img.metadata
>>> {}
breaking change
rio_tiler.mosaic.reader.mosaic_reader
now raisesEmptyMosaicError
instead of returning an emptyImageData
- Remove
Uint8
data casting before applyingcolor_formula
in ImageData.render (cogeotiff#302)
- added
ImageData
output class for allrio_tiler.io
classes returning numpy array-like types (tile, mask = method()
)
from rio_tiler.io import COGReader
from rio_tiler.models import ImageData
with COGReader("/Users/vincentsarago/S-2_20200422_COG.tif") as cog:
r = cog.preview()
assert isinstance(r, ImageData)
data, mask = r
assert data.shape == (3, 892, 1024)
Note: the class keeps the compatibility with previous notation: tile, mask = ImageData
-
add pydantic models for IO outputs (Metadata, Info, ...)
-
change output form for
band_metadata
,band_descriptions
and do not add band description when not found.
# Before
with COGReader("/Users/vincentsarago/S-2_20200422_COG.tif") as cog:
i = cog.info()
print(i["band_metadata"])
print(i["band_descriptions"])
[(1, {}), (2, {}), (2, {})]
[(1, 'band1'), (2, 'band2'), (2, 'band3')]
# Now
with COGReader("/Users/vincentsarago/S-2_20200422_COG.tif") as cog:
i = cog.info()
print(i.band_metadata)
print(i.band_descriptions)
[('1', {}), ('2', {}), ('3', {})]
[('1', ''), ('2', ''), ('3', '')]
- change output form for
stats
# Before
with COGReader("/Users/vincentsarago/S-2_20200422_COG.tif") as cog:
print(cog.stats())
{
1: {...},
2: {...},
3: {...}
}
# Now
with COGReader("/Users/vincentsarago/S-2_20200422_COG.tif") as cog:
print(cog.stats())
{
"1": {...},
"2": {...},
"3": {...}
}
- updated
rio_tiler.utils._stats
function to replacepc
bypercentiles
with COGReader("/Users/vincentsarago/S-2_20200422_COG.tif") as cog:
print(cog.stats()["1"].json())
{"percentiles": [19.0, 168.0], "min": 0.0, "max": 255.0, ...}
- make
rio_tiler.colormap.ColorMap
object immutable. Registering a new colormap will new returns a now instance of ColorMap(cogeotiff#289). - changed the
rio_tiler.colormap.ColorMap.register()
method to take a dictionary as input (instead of name + dict).
from rio_tiler.colormap import cmap # default cmap
# previous
cmap.register("acmap", {0: [0, 0, 0, 0], ...})
# Now
cmap = cmap.register({"acmap": {0: [0, 0, 0, 0], ...}})
-
added the possibility to automatically register colormaps stored as
.npy
file in a directory, ifCOLORMAP_DIRECTORY
environment variable is set with the name of the directory. -
Update to morecantile 2.0.0
- surface
allowed_exceptions
options inrio_tiler.mosaic.reader.mosaic_reader
(cogeotiff#293) - add SpatialInfoMixin base class to reduce code duplication (co-author with @geospatial-jeff, cogeotiff#295)
- add
AsyncBaseReader
to support async readers (author @geospatial-jeff, cogeotiff#265)
- surface dataset.nodata in COGReader.nodata property (cogeotiff#292)
- fix non-threaded tasks scheduler/filter (cogeotiff#291)
- switch to morecantile for TMS definition (ref: cogeotiff#283)
- add tms options in Readers (breaking change if you create custom Reader from BaseReader)
- add tile_bounds vs bounds check in tile methods for MultiBands and MultiBase classes
- add tile_exists method in BaseReader (take tms in account)
- adapt zooms calculation in COGReader
- add
LastBandHigh
andLastBandLow
pixel selection (ref: cogeotiff#270)
Deprecated function
- rio_tiler.reader.tile
- rio_tiler.utils.geotiff_options
- rio_tiler.utils.tile_exists
- rio_tiler.io.multi_*
- remove
pkg_resources
(pypa/setuptools#510) - refactor default colormap lookup to use pathlib instead of pkg_resources.
Note: We changed the versioning scheme to {major}.{minor}.{path}{pre}{prenum}
- Fix missing Exception catching when running task outside threads (ref: developmentseed/titiler#130).
- add rio-tiler logger (cogeotiff#277).
- Fix bug in
MultiBandReader
(ref: cogeotiff#275) and add tests.
- add
MultiBandReader
andGCPCOGReader
inrio_tiler.io
init.
- Added back the Conctext Manager methods in
rio_tiler.io.base.BaseReader
but not as@abc.abstractmethod
(ref: cogeotiff#273 (comment)) - Move
rio_tiler_pds.reader.MultiBandReader
andrio_tiler_pds.reader.GCPCOGReader
to rio-tiler (cogeotiff#273)
- remove ContextManager requirement for
rio_tiler.io.base.BaseReader
andrio_tiler.io.base.MultiBaseReader
base classes. - move ContextManager properties definition to
__attrs_post_init__
method inrio_tiler.io.STACReader
andrio_tiler.io.COGReader
(ref: cogeotiff/rio-tiler-pds#21)
- Make sure Alpha band isn't considered as an internal mask by
utils.has_mask_band
- reduce verbosity in
rio_tiler.tasks.filter_tasks
exception logging (#266).
- add
post_process
callback torio_tiler.render._read
andrio_tiler.render.point
to apply specific operation ouput arrays.
- restore Mkdocs search bar (#255)
- Allow class (not just instance) to be passed to pixel_selection (#250)
- Add Binder link/badge to README (#254)
- Add mkdocs-jupyter to show notebooks in website (#253)
- Remove deprecated functions (#247)
- Export modules from top-level package (#246)
- Allow overwriting colormap with force=True (#249)
- Pin black version (#251)
- Add contributing.md (#242)
- Add mkdocs config (#240)
- Add
NPY
support inrio_tiler.utils.render
to save tile in numpy binary format (#256) - Remove bare
Exception
and add more detailed errors (#248)
- raise specific
PointOutsideBounds
in rio_tiler.reader.point (#236)
- allow setting default kwargs in COGReader init (#227)
- allow
vrt_options
in COGReader.point - add
rio_tiler.io.base.MultiBaseReader
class (#225) - refactor
rio_tiler.io.stac.STACReader
to use MultiBaseReader (#225) - add
rio_tiler.task
submodule to share tools for handling rio-tiler's future tasks. - fix regex parsing for rio-tiler expression
- add warnings when assets/indexes is passed with expression option (#233)
Breaking Changes:
- replace dataclass wiht attr to support more flexible class definition (see #225)
- add
utils.create_cutline
helper (#218) - remove any mutable default argument
depreciation
warp_vrt_option
is replaced byvrt_options
in rio_tiler.reader.part (#221)
- add more verbosity to mosaic error (#214)
Breaking Changes:
rio_tiler.mosaic.reader.mosaic_reader
return((tile, mask), assets_used)
COGReader.info
is now a method instead of a property to align with other reader (#211)
- add rio_tiler.io.base.BaseReader abstract class for COGReader and STACReader to inherit from
- STACReader raises
InvalidAssetName
for invalid asset name orMissingAssets
when no assets is passed (#208) - update rio_tiler.mosaic.reader.mosaic_reader to not use threadPool if threads <= 1 (#207)
Breaking Changes:
- Reader.spatial_info is a property (#203)
- assets is a keyword argument in STACReader stats/info/metadata
- add
rio_tiler.mosaic
submodule (ref: cogeotiff/rio-tiler-mosaic#16)
- add boto3 in the dependency (#201)
- switch to ContextManager for COG and STAC (rio_cogeo.io.COGReader, rio_cogeo.io.STACReader).
- COGReader.part and STACReader.part return data in BBOX CRS by default.
- STACReader now accept URL (https, s3).
- add more method for STAC (prewiew/point/part/info/stats).
- add expression for COG/STAC preview/point/part.
- add
masked
option inrio_tiler.reader.point
to control weither or not it should return None or a value. - remove mission specific tilers (#195).
- remove
rio_tiler.reader.multi_*
functions (replaced by rio_tiler.io.cogeo.multi_*). - remove
rio_tiler.utils.expression
(replaced by expression options in tilers).
- refactor
rio_tiler.utils.tile_exists
to allow raster bounds latitude == -90,90
- Change default resampling to nearest for
_read
(#187) - add
rio_tiler.reader.stats
(return only array statistics) - remove default
dst_crs
inrio_tiler.reader.part
to to fallback to dataset CRS.
- Refactor colormap and add method to register custom colormap
- add
preview
method torio_tiler.io.cogeo
- allow reading high resolution part of a raster (by making height, width args optional)
- add
max_size
option inrio_tiler.reader.part
to set a maximum output size when height and width are not set - add point and area function in rio_tiler.io.cogeo
- fix width-height height-widht bug in
rio_tiler.reader.part
depreciation
- deprecated
out_window
option in favor ofwindow
in rio_tiler.reader._read
- fix unwanted breacking change with
img_profiles.get
not allowing default values
- make
rio_tiler.io.landsat8.tile
return Uint16 data and not float32 (#173) rio_tiler.profiles.img_profiles
item access returncopy
of the items (#177)- better colormap docs (#176, author @kylebarron)
- add
rio_tiler.io.cogeo.info
to retrieve simple file metadata (no image statistics) - add band metadata tag info in
rio_tiler.render.metadata
output - add
rio_tiler.io.stac
STAC compliant rio_tiler.colormap.apply_discrete_cmap
- only use
transform_bounds
when needed in rio_tiler.reader.part
Breaking Changes:
- switch back to gdal/rasterio calculate_default_transform (#164). Thanks to Terracotta core developper @dionhaefner.
- refactor
rio_tiler.utils.get_vrt_transform
to get width and height input.
- Fall back to gdal/rasterio calculate_default_transform for dateline separation crossing dataset (ref #164)
- added
reader.preview
,reader.point
methods - added multi_* functions to rio_tiler.reader to support multiple assets addresses
- added
rio_tiler.utils.has_mask_band
function - added
rio_tiler.utils.get_overview_level
to calculate the overview level needed for partial reading. - added type hints
- added scale, offsets, colormap, datatype and colorinterp in reader.metadata output (#158)
- new
rio_tiler.colormap
submodule - added
unscale
options to rio_tiler.reader._read function apply internal scale/offset (#157)
Breaking Changes:
- removed python 2 support
- new package architecture (.io submodule)
- introduced new rio_tiler.reader functions (part, preview, metadata...)
- renamed rio_tiler.main to rio_tiler.io.cogeo
- bucket and prefixes are defined in rio_tiler.io.dataset.
{dataset}_parse
function from AWS supported Public Dataset - renamed
minimum_tile_cover
tominimum_overlap
- renamed
tile_edge_padding
topadding
- padding is set to 0 by default.
- use terracotta calculate_default_transform (see cogeotiff#56 (comment))
- colormaps are now have an alpha value
rio_tiler.utils.get_colormap
replaced byrio_tiler.colormap.get_colormap
- new
rio_tiler.colormap.get_colormap
supports only GDAL like colormap - replaced
rio_tiler.utils.array_to_image
byrio_tiler.utils.render
- replaced
rio_tiler.utils.apply_cmap
byrio_tiler.colormap.apply_cmap
- replaced
rio_tiler.utils._apply_discrete_colormap
byrio_tiler.colormap.apply_discrete_cmap
- removed
histogram_bins
andhistogram_range
in options in metadata reader. Should now be passed inhist_options
(e.g: hist_options={bins=10, range=(0, 10)}) - remove alpha band value from output data array in tile/preview/metadata #127
- Add Sentinel2-L2A support (#137)
- Update Sentinel-2 sceneid schema (S2A_tile_20170323_07SNC_0 -> S2A_L1C_20170323_07SNC_0)
- Add
warp_vrt_option
option forutils.raster_get_stats
andutils.tile_read
to allow more custom VRT Warping. (ref: OSGeo/gdal#1989 (comment)) - Add
rio_tiler.utils.non_alpha_indexes
to find non-alpha band indexes (ref #127)
- Allow
DatasetReader
,DatasetWriter
,WarpedVRT
input forutils.raster_get_stats
andutils.tile_read
- add
minimum_tile_cover
option to filter dataset not covering a certain amount of the tile. - add Sentinel-1 submodule
Breaking Changes:
- need rasterio>=1.1
- reduce memory footprint of expression tiler
- fix wrong calculation for overview size in
raster_get_stats
(#116) - Add Landsat 8 QA Band (#117).
- add more colormap options (from matplotlib) and switch from txt files to numpy binaries (#115)
- fix issue #113, adds depreciation warning for
bounds_crs
in favor ofdst_crs
inrio_tiler.utils.get_vrt_transform
- Add kwargs options in landsat8.tile, sentinel2.tile and cbers.tile functions to
allow
resampling_method
andtile_edge_padding
options forwarding to utils._tile_read. - Add Input (bounds_crs) and Output (dst_crs) option to
utils._tile_read
function (#108)
- Revert changes introduced in #106 (see #105)
- Refactor tests
- Use same resampling method for mask and for data (#105)
- add tile_edge_padding option to be passed to rio_tiler.utils._tile_read to reduce sharp edges that occur due to resampling (#104)
- add histogram_range options to be passed to rio_tiler.{module}.metadata function (#102)
- add histogram_bins options to be passed to rio_tiler.{module}.metadata function (#98)
Bug fixes:
- return index number with band descriptions (#99)
- add mercator min/max zoom info in metadata output from rio_tiler.utils.raster_get_stats (#96)
- add band description (band name) in metadata output from rio_tiler.utils.raster_get_stats (#96)
- Replace rio-pansharpen dependency with a fork of the brovey function directly
into
rio_tiler.utils
(rio-pansharpen is unmaintened and not compatible with rasterio>=1) (#94).
rio_tiler.utils.array_to_image
's color_map arg can be a dictionary of discrete values (#91)
Breaking Changes:
expr
argument is now a required option inrio_tiler.utils.expression
. (#88)
- Add 'rplumbo' colormap (#90 by @DanSchoppe)
Bug fixes:
- Fix casting to integer for MAX_THREADS environment variable.
- Minor typo correction and harmonization of the use of src/src_dst/src_path in
rio_tiler.utils
Bug fixes:
- Fix nodata handling in
utils.raster_get_stats
- Allow options forwarding to
tile_read
frommain.tile
function (#86) - Add
resampling_method
options inrio_tiler.utils.tile_read
to allow user set resampling. Default is now bilinear (#85)
Bug fixes:
- Fix nodata option forwarding to tile_read when source is a path (#83)
Refactoring:
- Refactor
rio_tiler.utils.tile_read
to reduce code complexity (#84)
Breaking Changes:
indexes
options is now set to None inrio_tiler.utils.tile_read
. Default will now be the dataset indexes.
- Fix mask datatype bug in
rio_tiler.utils.array_to_image
(#79) - Fix nodata handling and better test for the nodata/mask main module (#81)
- add missing Landsat panchromatic band (08) min/max fetch in
rio_tiler.landsat8.metadata
(#58) - add pre-commit for commit validation (#64)
- code formatting using Black (the uncompromising Python code formatter) (#64)
- update documentation (Sentinel-2 cost) (#68)
- add
utils.raster_get_stats
andutils._get_stats
to replacemin_max*
function and to return more statistics (#66) - add overview level selection to statistical functions to reduce the data download (#59)
- add pure GDAL
array_to_image
function to replace PIL tools (#29) - add GDAL format output from
utils.get_colormap
to be used inarray_to_image
(#29) - add GDAL compatible Image creation profile (#29)
- add max threads number settings via "MAX_THREADS" environment variable (#71)
Breaking Changes:
- update
metadata
structure returned bylandsat8.metadata
,sentinel2.metadata
,cbers.metadata
- force sentinel, landsat and cbers band names to be string and add validation (#65)
- moved landsat utility functions from
rio_tiler.utils
torio_tiler.landsat8
- rio_tiler.utils.landsat_get_mtl -> rio_tiler.landsat8._landsat_get_mtl
- rio_tiler.utils.landsat_parse_scene_id -> rio_tiler.landsat8._landsat_parse_scene_id
- rio_tiler.utils.landsat_get_stats -> rio_tiler.landsat8._landsat_stats
- moved cbers utility functions from
rio_tiler.utils
torio_tiler.cbers
- rio_tiler.utils.cbers_parse_scene_id -> rio_tiler.cbers._cbers_parse_scene_id
- moved sentinel-2 utility functions from
rio_tiler.utils
torio_tiler.sentinel2
- rio_tiler.utils.sentinel_parse_scene_id -> rio_tiler.sentinel2._sentinel_parse_scene_id
- removed deprecated PIL support as well as base64 encoding function in rio_tiler.utils
- rio_tiler.utils.img_to_buffer
- rio_tiler.utils.array_to_img
- rio_tiler.utils.b64_encode_img
- removed deprecated min_max* functions (landsat_min_max_worker and band_min_max_worker)
- add test case for pix4d nodata+alpha band data
- rasterio 1.0.0
- add schwarzwald color palette
- fix nodata (#48)
- adapt to rasterio 1.0b4
- fix mask (internal/external) fetching 🙏
- fix boundless read with new rasterio 1.0b2
- fix custom nodata handling
- fix performances issue
Breaking Changes:
- removed alpha band options to select a custom alpha band number
- Fix rasterio version to 1.0b1 (#46 and #44)
- Support for additional CBERS instruments (fredliporace)
- Fixes sentinel-2 band 8A regex bug in
rio_tiler.utils.expression
- adds DatasetReader input option for utils.tile_read (do not close the dataset on each read)
Breaking Changes:
utils.tile_band_worker
renamed toutils.tile_read
main.tile
rgb option renamed indexessentinel2.tile
,landsat8.tile
,cbers.tile
rgb option renamed bandsmain.tile
default nodata mask is handled by rasterio
- adds utils.b64_encode_img function to encode an image object into a base64 string
- add tiles profiles (jpeg, png, webp) based on https://github.com/mapnik/mapnik/wiki/Image-IO#default-output-details
Breaking Changes:
- Refactor
rio_tiler.utils.array_to_img
to return PIL image object
- only using
read_masks
for mask creation when it's needed.
- add "expression" utility function
- better nodata/mask/alpha band definition and support
Breaking Changes:
- tile functions now return an associated mask (Landsat, Sentinel, CBERS, main)
- remove nodata support in utils.image_to_array function
- add mask support in utils.image_to_array function
- utils.tile_band_worker will always return a (Band, Width, Height) array (e.g 1x256x256 or 3x256x256)
- remove aws.py sub-module (replaced by main.py)
- no default bands value for main.py tiles.
- add colormap option in
utils.array_to_img
- add TIR (brightness temps) support
- add CBERS support
- add global file support
- add elevation encoding for mapzen
- removing internal caching
- update to rasterio 1.0a12
Breaking Changes:
- remove data value rescaling in
landsat8.tile
andsentinel2.tile
- fix wrong lat/grid_square value in
utils.sentinel_parse_scene_id
- rename
utils.sentinel_min_max_worker
toutils.band_min_max_worker
- Fix Sentinel-2 bad AWS url
- Fix python 2/3 compatibilities in rio_tiler.utils.landsat_get_mtl
- Initial release. Requires Rasterio >= 1.0a10.