- 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.