feat: Overhaul to use our geotiff package & generic TileMatrixSet support#208
Merged
kylebarron merged 38 commits intomainfrom Feb 18, 2026
Merged
feat: Overhaul to use our geotiff package & generic TileMatrixSet support#208kylebarron merged 38 commits intomainfrom
geotiff package & generic TileMatrixSet support#208kylebarron merged 38 commits intomainfrom
Conversation
geotiff package & generic TileMatrixSet support
kylebarron
commented
Feb 17, 2026
…-raster into kyle/generic-tms
This was referenced Feb 18, 2026
Merged
kylebarron
pushed a commit
that referenced
this pull request
Feb 18, 2026
🤖 I have created a release *beep* *boop* --- <details><summary>0.3.0-beta.1</summary> ## [0.3.0-beta.1](v0.2.0...v0.3.0-beta.1) (2026-02-18) ### Features * **affine:** Create new affine standalone package as port of Python affine ([ce7b73d](ce7b73d)) * Create `morecantile` subpackage ([#238](#238)) ([20b3ace](20b3ace)) * Create new `geotiff` subpackage, abstracting over `@cogeotiff/core` ([#223](#223)) ([4fa5230](4fa5230)) * **geotiff:** generate TileMatrixSet from `GeoTIFF` instance ([#235](#235)) ([cb1106e](cb1106e)) * **geotiff:** High-level CRS handling from GeoTIFF GeoKeys ([#236](#236)) ([559dc03](559dc03)) * **geotiff:** Overhaul `GeoTIFF` and `Overview` classes ([#225](#225)) ([857a8c2](857a8c2)) * **geotiff:** Support decoding JPEG and WebP-compressed COGs ([#229](#229)) ([3dc6281](3dc6281)) * Initial GeoTIFF dynamic decoder API ([#226](#226)) ([5d611f3](5d611f3)) * Overhaul to use our `geotiff` package & generic TileMatrixSet support ([#208](#208)) ([860a701](860a701)), closes [#216](#216) ### Bug Fixes * Fix shader caching ([#221](#221)) ([2a02439](2a02439)) ### Miscellaneous Chores * release 0.3.0-beta.1 ([#239](#239)) ([8ba364e](8ba364e)) </details> <details><summary>affine: 0.3.0-beta.1</summary> ## 0.3.0-beta.1 (2026-02-18) ### Features * **affine:** Create new affine standalone package as port of Python affine ([ce7b73d](ce7b73d)) * **geotiff:** generate TileMatrixSet from `GeoTIFF` instance ([#235](#235)) ([cb1106e](cb1106e)) * Overhaul to use our `geotiff` package & generic TileMatrixSet support ([#208](#208)) ([860a701](860a701)), closes [#216](#216) ### Miscellaneous Chores * release 0.3.0-beta.1 ([#239](#239)) ([8ba364e](8ba364e)) </details> <details><summary>geotiff: 0.3.0-beta.1</summary> ## 0.3.0-beta.1 (2026-02-18) ### Features * **affine:** Create new affine standalone package as port of Python affine ([ce7b73d](ce7b73d)) * Create new `geotiff` subpackage, abstracting over `@cogeotiff/core` ([#223](#223)) ([4fa5230](4fa5230)) * **geotiff:** generate TileMatrixSet from `GeoTIFF` instance ([#235](#235)) ([cb1106e](cb1106e)) * **geotiff:** High-level CRS handling from GeoTIFF GeoKeys ([#236](#236)) ([559dc03](559dc03)) * **geotiff:** Overhaul `GeoTIFF` and `Overview` classes ([#225](#225)) ([857a8c2](857a8c2)) * **geotiff:** Support decoding JPEG and WebP-compressed COGs ([#229](#229)) ([3dc6281](3dc6281)) * Initial GeoTIFF dynamic decoder API ([#226](#226)) ([5d611f3](5d611f3)) * Overhaul to use our `geotiff` package & generic TileMatrixSet support ([#208](#208)) ([860a701](860a701)), closes [#216](#216) ### Miscellaneous Chores * release 0.3.0-beta.1 ([#239](#239)) ([8ba364e](8ba364e)) </details> <details><summary>morecantile: 0.3.0-beta.1</summary> ## 0.3.0-beta.1 (2026-02-18) ### Features * Create `morecantile` subpackage ([#238](#238)) ([20b3ace](20b3ace)) * **geotiff:** generate TileMatrixSet from `GeoTIFF` instance ([#235](#235)) ([cb1106e](cb1106e)) * Overhaul to use our `geotiff` package & generic TileMatrixSet support ([#208](#208)) ([860a701](860a701)), closes [#216](#216) ### Miscellaneous Chores * release 0.3.0-beta.1 ([#239](#239)) ([8ba364e](8ba364e)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: ds-release-bot[bot] <116609932+ds-release-bot[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a really big PR, but unfortunately it really had to be a big PR because we effectively had to change our geotiff reader and our TileMatrixSet traversal at the same time.
Change list
Fully removes
geotiff.jsas a dependency. We now only use@developmentseed/geotiffand the underlying@cogeotiff/corefor reading data.The
TileMatrixSetTilesetnow accepts an arbitrary, spec-compliant, OGC TileMatrixSet instance. This will make it much more interoperable. Closes Use exact TileMatrixSet specification #216. This should make it easier for Lonboard to generate a TMS from async-geotiff, pass the TMS definition to JS, and then have it auto-fetch tiles from Python according to that tiling system.Removes
GeoTIFFLayerfrom our public API for now, since our geotiff implementation doesn't support fetching the entire full-resolution image and stitching tiles together. (And it's probably a candidate to fully remove in the future in favor ofCOGLayer)Define new projection resolver
epsgResolver. Our default implementation caches all fetched projections in ourPROJECTION_REGISTRY(closes proj4js *crs registration* workaround #185). But users can easily override this behavior by passing a customepsgResolverRemoves multiple copies of affine handling, ensuring we put all affine transformation handling into
@developmentseed/affineUpdate
cog-basicexample for latest changes. (Other examples haven't been updated yet)@cogeotiff/coreis very pleasant to use. It's nice to use Typescript Enums instead of hard-coding integer matching.Todo
Closes #216