Skip to main content

Custom map grid utilities

Project description

Morecantile

Construct and use map tile grids in different projection.

Packaging status CircleCI codecov

The name is an homage to mercantile, a great tools to work with Web Mercator tile indexes. This module aims to mimic mercatile features but for other projections.

Install

$ pip install -U pip
$ pip install morecantile

# Or install from source:

$ pip install git+https://github.com/developmentseed/morecantile.git

How To

    +-------------+-------------+  ymax
    |             |             |
    |    x: 0     |    x: 1     |
    |    y: 0     |    y: 0     |
    |    z: 1     |    z: 1     |
    |             |             |
    +-------------+-------------+ 
    |             |             |
    |    x: 0     |    x: 1     |
    |    y: 1     |    y: 1     |
    |    z: 1     |    z: 1     |
    |             |             |
    +-------------+-------------+  ymin

xmin                            xmax

Define custom grid

import morecantile
from rasterio.crs import CRS

epsg = 3031
extent = [-948.75, -543592.47, 5817.41, -3333128.95]  # From https:///epsg.io/3031
ts = morecantile.TileSchema(CRS.from_epsg(epsg), extent)

# Or

# "NSIDCAntarcticPolarQuad" (EPSG:3031) is one of the default grids available in morecantile
# see https://github.com/developmentseed/morecantile/blob/master/__init__.py#L94-L99
grid_info = morecantile.default_grids.get("NSIDCAntarcticPolarQuad")
ts = morecantile.TileSchema(**grid_info)

Defaults Grids

  • WorldCRS84Quad: WGS84 - EPGS:4326
  • WorldMercatorWGS84Quad: Elliptical Mercator projection - EPGS:3395
  • WebMercatorQuad: Spherical Mercator - EPGS:3857 (default grid for Web Mercator based maps)
  • NSIDCSeaIcePolarQuad: WGS 84 / NSIDC Sea Ice Polar Stereographic North - EPGS:3413
  • NSIDCAntarcticPolarQuad: WGS 84 / Antarctic Polar Stereographic - EPGS:3031
  • EuropeanETRS89_LAEAQuad: ETRS89-extended / LAEA Europe - EPGS:3035

ref: http://schemas.opengis.net/tms/1.0/xml/examples/

Create tile and get bounds

# Get the bounds for tile Z=4, X=10, Y=10 in the input projection
ts.xy_bounds(morecantile.Tile(10, 10, 4))
>> CoordsBbox(xmin=1742511.5500000003, ymin=-5250935.28, xmax=1916857.5800000003, ymax=-5076589.25)

# Get the bounds for tile Z=4, X=10, Y=10 in LatLon (WGS84)
ts.bounds(morecantile.Tile(10, 10, 4))  
>> CoordsBbox(xmin=161.0554963794693, ymin=-41.54639259511877, xmax=159.94535469608172, ymax=-43.27127363762563)

Find tile for lat/lon

ts.tile(159.31, -42, 4) 
>> Tile(x=11, y=10, z=4)

# Or using coordinates in input CRS
x, y = ts.point_fromwgs84(159.31, -42)
ts._tile(x, y, z)
>> Tile(x=11, y=10, z=4)

Get Geojson Feature

ts.feature(morecantile.Tile(10, 10, 4))

>> {
    'type': 'Feature',
    'bbox': [
        159.94535469608172,
        -43.27127363762563,
        161.0554963794693,
        -41.54639259511877
    ],
    'id': 'Tile(x=10, y=10, z=4)',
    'geometry': {
        'type': 'Polygon',
        'coordinates': [[
            [161.0554963794693, -41.54639259511877],
            [161.0554963794693, -43.27127363762563],
            [159.94535469608172, -43.27127363762563],
            [159.94535469608172, -41.54639259511877],
            [161.0554963794693, -41.54639259511877]
        ]]
    },
    'properties': {
        'title': 'XYZ tile Tile(x=10, y=10, z=4)',
        'grid_crs': 'EPSG:3031'
    }
}

Contribution & Development

Issues and pull requests are more than welcome.

dev install

$ git clone https://github.com/developmentseed/morecantile.git
$ cd rio-cogeo
$ pip install -e .[dev]

Python3.7 only

This repo is set to use pre-commit to run flake8, pydocstring and black ("uncompromising Python code formatter") when commiting new code.

$ pre-commit install

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

morecantile-0.1.0.tar.gz (6.4 kB view details)

Uploaded Source

File details

Details for the file morecantile-0.1.0.tar.gz.

File metadata

  • Download URL: morecantile-0.1.0.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.7.2

File hashes

Hashes for morecantile-0.1.0.tar.gz
Algorithm Hash digest
SHA256 989bc49e6a2bce6cd4b4486d37411a4668a9646809f080c8d22edbd1ee285d68
MD5 47d172edee2de473c76d8c8c631af10e
BLAKE2b-256 c371fede44873dba960874aca9a010637e8aeb3e3bed4011ab48e2e20133d2e0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page