Release
Unreleased¶
- docs: add example of how to enumerate tiles for a bounding box and zoom level(s)
- use
WGS84as default CRS forTileMatrixSet.featureGeoJSON response (as per specification) - add
geographic_crsoption forTileMatrixSet.featuremethod -
update non-WGS84 CRS notation in
TileMatrixSet.featureGeoJSON response# before "properties": { "crs": { "type": "EPSG", "properties": {"code": 3857}, } } # now "properties": { "crs": { "type": "name", "properties": {"name": "http://www.opengis.net/def/crs/EPSG/0/3857"}, } # or "crs": { "type": "wkt", "properties": {"wkt": "..."}}, } } -
rename
grid_name -> tmsandgrid_crs -> tms_crsproperty names inTileMatrixSet.featureGeoJSON response breaking change -
check tile's zoom against TMS's
maxzoominTileMatrixSet.is_validand addstrict=True|Falseoptions breaking changeimport morecantile tms = morecantile.tms.get("WebMercatorQuad") # before assert tms.is_valid(0, 0, 25) >> UserWarning: TileMatrix not found for level: 25 - Creating values from TMS Scale. # now assert tms.is_valid(0, 0, 25), "Tile(0, 0, 25) is not valid" >> AssertionError: Tile(0, 0, 25) is not valid assert tms.is_valid(0, 0, 25, strict=False) >> UserWarning: TileMatrix not found for level: 25 - Creating values from TMS Scale. -
remove
truncate_lnglatfrom TileMatrixSet class breaking change - remove python 3.8, 3.9 and 3.10 support
- add
geographic_crsoption inTileMatrixSet.tilesandTileMatrixSet.tilemethods - make every
TileMatrixSet's attribute frozen - rename
morecantile.defaults.TileMatrixSets.tmsattribute totilematrixsetsbreaking change - make sure that
morecantile.defaults.TileMatrixSets.get(name)returns a copy of the TMS object - add
MORECANTILE_DEFAULT_GEOGRAPHIC_CRSenvironment variable to control the default Geographic CRS - add
TileMatrixSet.set_geographic_crs(crs: pyproj.CRS)method to overwrite the geographic CRS
6.2.0 (2024-12-19)¶
- add python 3.13 support
- update pyproj dependency version to
>=3.1,<4.0
6.1.0 (2024-10-17)¶
- add
_tile_matrices_idx: Dict[str, int]private attribute to improvematriceslookup - change
xy_bounds()andbounds()methods to avoid calculation duplication
6.0.0 (2024-10-16)¶
- remove
_geographic_crsprivate attribute inTileMatrixSetmodel breaking change - use
crs.geodetic_crsproperty asgeographic_crsbreaking change
5.4.2 (2024-08-29)¶
- better handle anti-meridian crossing bbox in
tms.tiles()(author @ljstrnadiii, developmentseed/morecantile!154)
5.4.1 (2024-08-27)¶
- ensure
TileMatrixSet._geographic_crsis a pyproj CRS object (author @AndrewAnnex, developmentseed/morecantile!152) - add
python 3.12support
5.4.0 (2024-08-20)¶
- adds --tms optional argument to the shapes and tiles cli tools (author @AndrewAnnex, developmentseed/morecantile!151)
5.3.1 (2024-07-26)¶
- handle 180th meridian case for
tms.tiles()(author @ljstrnadiii, developmentseed/morecantile!150)
5.3.0 (2024-02-09)¶
- enable custom decimation value for in
TileMatrixSet.custommethod (author @mccarthyryanc, developmentseed/morecantile!146)
5.2.3 (2024-02-02)¶
- update pydantic
Fieldusage to avoid deprecation in 3.0
5.2.2 (2024-01-25)¶
- fix
idforWGS1984QuadTileMatrixSet (fromWorldCRS84QuadtoWGS1984Quad)
5.2.1 (2024-01-18)¶
-
fix
CRSWKT type fromstringtoObject(PROJJSON) (ref: opengeospatial/2D-Tile-Matrix-Set#89).# Before wkt = pyproj.CRS.from_epsg(3857).to_wkt() TileMatrixSet( ... crs={"wkt": wkt} ) # Now wkt = pyproj.CRS.from_epsg(3857).to_json_dict() TileMatrixSet( ... crs={"wkt": wkt} )
5.2.0 (2024-01-18)¶
-
fix
CRSparsing to allowwkt ({"wkt": ...})anduri ({"uri": ...})defined CRSTileMatrixSet( ... crs="http://www.opengis.net/def/crs/EPSG/0/3857" ) TileMatrixSet( ... crs={"uri": "http://www.opengis.net/def/crs/EPSG/0/3857"} ) wkt = pyproj.CRS.from_epsg(3857).to_wkt() TileMatrixSet( ... crs={"wkt": wkt} ) -
update
TileMatrixSetrepresentation to use CRS's URI - remove default for
TileMatrixSet.pointOfOriginattribute (required) - add
topLeftdefault forTileMatrixSet.cornerOfOriginattribute - renamed
morecantile.models.CRSType->morecantile.models.CRS
5.1.0 (2024-01-08)¶
- Simplify bounds calculation by using
TileMatrix.cellSizeinstead ofTileMatrix.scaleDenominator - remove
TileMatrixSet._resolutionprivate method
5.0.2 (2023-12-01)¶
- Remove alias tiles in
.parent(),.children(),.neighbors()and.tiles()methods for Variable Matrix Width TileMatrixSets (developmentseed/morecantile!136)
5.0.1 (2023-12-01) [DELETED]¶
Remove alias tiles in.parent(),.children(),.neighbors()and.tiles()methods for Variable Matrix Width TileMatrixSets (developmentseed/morecantile!136)
5.0.0 (2023-07-24)¶
-
update pydantic requirement to
~=2.0 -
add support for TileMatrixSets with Variable Matrix Width
-
add
variableMatrixWidthsto theTileMatrixmodel -
add
TileMatrixSet._lr()(andlr()) to retrieve the lower right coordinates of a tile (instead of using upper-left of tile+1) -
switch to
functools.cached_propertyto cache properties (instead of cachetools.LRUcache) -
rename
_is_quadtreeproperty tois_quadtreeinTileMatrixSetmodel -
fix possible bug in
TileMatrixSet._tile()(and.tile()) method to make sure x or y are not greater thanmatrixWidth - 1ormatrixHeight - 1
4.3.0 (2023-07-11)¶
- add
.srsproperty toCRSType - forward arguments to
pyproj.CRSmethods forto_epsg(),to_wkt(),to_proj4()andto_json()CRSType methods
4.2.1 (2023-07-02)¶
- limit pydantic requirement to `~=1.0``
4.2.0 (2023-06-09)¶
- add
to_proj4andto_dictandto_jsonmethods toCRSType - remove
TileMatrixSet._crs(replaced withTileMatrixSet.crs._pyproj_crs)
4.1.1 (2023-06-07)¶
- add
to_epsg()andto_wkt()methods toCRSTypeto allow compatibility with4.0
import morecantile
tms = morecantile.tms.get("WebMercatorQuad")
tms.crs
>> CRSType(__root__='http://www.opengis.net/def/crs/EPSG/0/3857')
tms.crs.to_epsg()
>> 3857
tms._crs
>> <Projected CRS: EPSG:3857>
tms._crs.to_epsg()
>> 3857
4.1.0 (2023-06-06)¶
- Change CRS attribute in model to align more with the TMS spec and fix some OpenAPI schema issues (It should be a string URI or WKT, not a pyproj.CRS)
- add
TileMatrixSet._crsPrivateAttr to host thepyproj.CRSversion of the crs - update
grid_crsproperties inTileMatrixSet.feature()result to return theTileMatrixSet.CRS(uri/wkt) instead of EPSG code
4.0.2 (2023-05-31)¶
- Fix TileMatrixSet BoundingBox definition (developmentseed/morecantile!122)
4.0.1 (2023-05-31)¶
- Raise a
ValueErrorwhennanbounds are passed totiles(author @samn, developmentseed/morecantile!120)
4.0.0 (2023-05-22)¶
- no change since
4.0.0a1
4.0.0a1 (2023-05-17)¶
- Fix possible bug when a TileMatrixSet does not have
id
4.0.0a0 (2023-05-15)¶
- Remove assumption tile rows/cols are ordered in
TileMatrixSet.tiles()method (author @fsvenson, developmentseed/morecantile!104) - switch to TMS 2.0 specification (author @dchirst, developmentseed/morecantile!101). See developmentseed.org/morecantile/tms-v2/ for more info.
- remove
NZTM2000TileMatrixSet (ref: developmentseed/morecantile#103) - add
rasterio_geographic_crsto export TMS's geographic CRS to Rasterio's CRS object (author @AndrewAnnex, developmentseed/morecantile!109) - add
geographic_crsproperty in the TileMatrixSet model to return the private_geographic_crsattribute - add cache LRU layer on top of
TileMatrixSet.bboxmethod -
changed the input type in
morecantile.defaults.TileMatrixSets.register()fromSequence[TileMatrixSet]toDict[str, TileMatrixSets]my_custom_tms = ... # before defaults = morecantile.tms.register([my_custom_tms]) # now defaults = morecantile.tms.register({"MyCustomGrid": my_custom_tms}) -
made
idandtitleoptional inmorecantile.TileMatrixSet.custom()methodcrs = CRS.from_epsg(3031) extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031 # before tms = morecantile.TileMatrixSet.custom(extent, crs) print(tms.id, tms.title) >>> "Custom", "Custom TileMatrixSet" # now tms = morecantile.TileMatrixSet.custom(extent, crs) print(tms.id, tms.title) >>> None, None -
remove
boundingBoxin TileMatrixSet definition when created withmorecantile.TileMatrixSet.custom
3.4.0 (2023-05-15)¶
- [backported from 4.0] Remove assumption tile rows/cols are ordered in
TileMatrixSet.tiles()method (author @fsvenson, developmentseed/morecantile!104) - [backported from 4.0] add
rasterio_geographic_crsto export TMS's geographic CRS to Rasterio's CRS object (author @AndrewAnnex, developmentseed/morecantile!109) - [backported from 4.0] add
geographic_crsproperty in the TileMatrixSet model to return the private_geographic_crsattribute - [backported from 4.0] add cache LRU layer on top of
TileMatrixSet.bboxmethod
3.3.0 (2023-03-09)¶
- sort default TMS (author @jlaura, developmentseed/morecantile!98)
- Switch to ruff for linting and fixing linting issues
3.2.5 (2022-12-16)¶
- Do not parse TMS json files automatically but wait for the TMS to be used
3.2.4 (2022-12-14)¶
- fix
CanadianNAD83_LCC,WorldMercatorWGS84QuadandEuropeanETRS89_LAEAQuadTMS - add
titleoption inmorecantile customCLI
3.2.3 (2022-12-13)¶
- fix
utils.meters_per_unitfor non earth bodies (author @AndrewAnnex, developmentseed/morecantile!92) - fix
CRS_to_urifunction to adds ability to export non-EPSG CRSs URIs (author @AndrewAnnex, developmentseed/morecantile!93)
3.2.2 (2022-11-25)¶
- add
morecantile.defaults.TileMatrixSetsin export
3.2.1 (2022-10-25)¶
- add python 3.11 support
3.2.0 (2022-10-20)¶
- add python 3.10 support
- remove python 3.7 support
- switch to pyproject.toml
3.1.2 (2022-03-21)¶
- add support for
footandUS survey footCRS (developmentseed/morecantile!86)
3.1.1 (2022-02-25)¶
- fix issue with
zoom_for_reswhen resolution is smaller than minzoom (author @samn, developmentseed/morecantile!84)
3.1.0 (2022-02-18)¶
- add
parent,children,neighbors,minmax,is_validmethods (developmentseed/morecantile!82)
breaking changes
- update
WebMercatorQuadTMS to matchmercantileandGDALdefinition of the half-earth value
3.0.5 (2022-02-16)¶
- truncate geographic Lon/Lat inputs to the TMS geographic bbox instead of
-180., -90., 180., 90.(developmentseed/morecantile!79) - remove
utils.truncate_lnglatfunction (developmentseed/morecantile!79)
3.0.4 (2022-02-16)¶
- Allow zoom_for_res to work for a TMS with a minzoom > 0 (author @samn, developmentseed/morecantile!78)
3.0.3 (2021-12-06)¶
- add
WGS1984Quad(WGS84/epgs:4326) TileMatrixSet (developmentseed/morecantile!74)
3.0.2 (2021-11-12)¶
- add
_geographic_crsdefinition in__init__to make sure it's initialized from user input (author @davenquinn, developmentseed/morecantile!72)
3.0.1 (2021-11-10)¶
- rename
_to_wgs84and_from_wgs84private attributes to_to_geographicand_from_geographic(developmentseed/morecantile!68) - add
_geographic_crsprivate attribute tomorecantile.TileMatrixSetto define the CRS used in_to_geographicand_from_geographic(developmentseed/morecantile!68) - fix
TileMatrixSet._invert_axismethod to only check axis information (developmentseed/morecantile!71)
3.0.0 (2021-09-23)¶
- no change since 3.0.0a1
3.0.0a1 (2021-09-17)¶
- only import rasterio if needed (developmentseed/morecantile!66)
3.0.0a0 (2021-09-09)¶
- add
.rasterio_crsproperties to TMS for compatibility with rasterio (developmentseed/morecantile!58) - Use new Class-like notation for namedtuple (developmentseed/morecantile!58)
breaking changes
- switch from rasterio to PyProj for CRS definition and projection transformation (developmentseed/morecantile!58)
- remove python 3.6 supports (because of pyproj)
2.1.4 (2021-08-20)¶
- add NZTM2000Quad tile matrix set from LINZ (author @blacha, developmentseed/morecantile!57)
-
add quadkey supports (@author adrian-knauer, developmentseed/morecantile!56)
import morecantile tms = morecantile.tms.get("WebMercatorQuad") # Tile to Quadkey tms.quadkey(486, 332, 10) >>> "0313102310" # Quadkey to Tile tms.quadkey_to_tile("0313102310") >>> Tile(486, 332, 10) -
update
NZTM2000*CRS uri fromhttps://www.opengis.net/def/crs/EPSG/0/2193tourn:ogc:def:crs:EPSG:2193(developmentseed/morecantile!61)
2.1.3 - Doesn't exists¶
2.1.2 (2021-05-18)¶
- fix wrong TMS boundingBox definition when using inverted CRS (developmentseed/morecantile!53)
2.1.1 (2021-05-17)¶
- remove
mercantiledependency. - raise
PointOutsideTMSBoundswarning when user is doing operations outside TMS bounds. - fix wrong
xy_bboxwhentms.boundingBoxuse a specific CRS.
2.1.0 (2020-12-17)¶
- add
zoom_level_strategyoption forTileMatrixSet.zoom_for_resto match GDAL 3.2. By default, it is set toauto, meaning that it will select the closest zoom level. User can set the strategy tolowerorupperto select below or above zoom levels.import morecantile tms = morecantile.tms.get("WebMercatorQuad") # native resolution of zoom 7 is 1222.9924 m # native resolution of zoom 8 is 611.4962 m assert tms.zoom_for_res(612.0) == 8 assert tms.zoom_for_res(612.0, zoom_level_strategy="lower") == 7 assert tms.zoom_for_res(612.0, zoom_level_strategy="upper") == 8
2.0.1 (2020-11-05)¶
- simplify
morecantile.TileMatrixSetdefault representation
from morecantile import tms
tms.get("WorldCRS84Quad")
>>> <TileMatrixSet title='CRS84 for the World' identifier='WorldCRS84Quad'>
print(tms.get("WorldCRS84Quad").json())
>>> {
'type': 'TileMatrixSetType',
'title': 'CRS84 for the World',
'abstract': None,
'keywords': None,
'identifier': 'WorldCRS84Quad',
'supportedCRS': CRS.from_epsg(4326),
'wellKnownScaleSet': AnyHttpUrl(...),
'boundingBox': {
'type': 'BoundingBoxType',
'crs': CRS.from_epsg(4326),
'lowerCorner': (-180.0, -90.0),
'upperCorner': (180.0, 90.0)},
'tileMatrix': [...]
}
2.0.0 (2020-11-04)¶
- switch from
CoordBBoxtorasterio.coords.BoundingBox(ref: developmentseed/morecantile#38). - update
morecantile.commonsTile and Coords to match rasterio's BoundingBox. - rename
morecantile.models.BoundingBoxtomorecantile.models.TMSBoundingBoxto avoind name colision with rasterio's BoundingBox. - improve default TMS immutability by making
morecantile.tms.registerto return a new TileMatrixSets instance (ref: developmentseed/morecantile#37)
import morecantile import TileMatrixSet, tms
from rasterio.crs import CRS
crs = CRS.from_epsg(3031)
extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031
custom_tms = TileMatrixSet.custom(extent, crs, identifier="MyCustomTmsEPSG3031")
print(len(tms.list()))
>>> 10
defaults = tms.register(custom_tms)
print(len(tms.list()))
>>> 10
print(len(defaults.list()))
>>> 11
1.3.1 (2020-10-07)¶
- remove
pkg_resources(pypa/setuptools#510, developmentseed/morecantile!36) - add
TILEMATRIXSET_DIRECTORYto allow morecantile to load user's TMS
# Save custom TMS to a file
import morecantile
from rasterio.crs import CRS
crs = CRS.from_epsg(3031)
extent = [-948.75, -543592.47, 5817.41, -3333128.95] # From https:///epsg.io/3031
tms = morecantile.TileMatrixSet.custom(extent, crs, identifier="MyCustomTmsEPSG3031")
with open("/tmp/mytms/MyCustomTmsEPSG3031.json", "w") as f:
f.write(tms.json(exclude_none=True))
import os
os.environ["TILEMATRIXSET_DIRECTORY"] = "/tmp/mytms"
from morecantile import tms
assert "MyCustomTmsEPSG3031" in tms.list()
1.3.0.post1 (2020-09-30)¶
- fix TileMatrixSet's model schema bug where pydantic wasn't able to translate
Union[rasterio.crs.CRS, pydantic.AnyHttpUrl]to a valid schema (ref: developmentseed/morecantile#34)
1.3.0 (2020-09-30)¶
- Allow Custom CRS for custom TMS definition (developmentseed/morecantile#23)
- Extend TMS beyond TMS Document max zoom level (developmentseed/morecantile!28)
- Require rasterio >= 1.1.7 (sept 2020) to support inverted lat/lon TMS (ref: developmentseed/morecantile#26)
- Remove deprecated function
- Add
tms.xy_bboxandtms.bboxproperties to return TileMatrixSet boundaries. - Add
tms.intersect_tmsto check if a bbox intersect with the TileMatrixSet boundaries. - Avoid out-range tiles (e.g. negative indexes)
- Add
tms.zoom_for_resfunction to get the TMS zoom level for a specific resolution (developmentseed/morecantile#31).
1.2.0 (2020-06-01)¶
- add TileMatrixSet minzoom/maxzoom properties
- fix TileMatrixSet.tile calculation
- add TileMatrixSet.tiles function (replicat from mercantile)
- add buffer and projected options to TileMatrixSet.feature method
- removes mercantile as dependencies
- add CLI
- renamed
morecantile.TileMatrixSet.point_towgs84tomorecantile.TileMatrixSet.lnglat(matches mercantile) - renamed
morecantile.TileMatrixSet.point_fromwgs84tomorecantile.TileMatrixSet.xy(matches mercantile) - add
truncateoption inmorecantile.TileMatrixSet.tile(matches mercantile) - re-order buffer and precision options in
morecantile.TileMatrixSet.feature(matches mercantile) - uses mercantile's tests
1.1.1 (2020-05-15)¶
- Fix bad default TMS files (developmentseed/morecantile#13)
- Add regex in model for identifier validation
1.1.0 (2020-05-13)¶
- better submodule definition
- add
morecantile.tmsobject to access and register defaults TileMatrixSet - Add depreciation warning for
morecantile.TileMatrixSet.loadmethod
1.0.0 (2020-05-11)¶
Major refactor of Morecantile, which is now based on OGC TileMatrixSet JSON documents.
- use pydantic model to validate TMS JSON documents (developmentseed/morecantile!6, author @geospatial-jeff)
- morecantile methods are part of the TMS model (developmentseed/morecantile!7)
0.1.0 (2020-02-03)¶
- Rename defaults grids (developmentseed/morecantile#1)
0.0.1 (2020-01-23)¶
- Initial release