Skip to main content

Get mercator tile from landsat, sentinel or other AWS hosted raster

Project description

Rasterio plugin to serve tiles from AWS S3 hosted files.

https://circleci.com/gh/mapbox/rio-tiler.svg?style=svg&circle-token=b78bc1a238c21046a855a9c80b441a8f2f9a4478 https://codecov.io/gh/mapbox/rio-tiler/branch/master/graph/badge.svg?token=zuHupC20cG

Get mercator tile from Landsat, sentinel or other AWS hosted rasters.

Rio-tiler supports Python 2.7 and 3.3-3.6.

Install

$ pip install -U pip
$ pip install rio-tiler

Or install from source:

$ git clone https://github.com/mapbox/rio-tiler.git
$ cd rio-tiler
$ pip install -U pip
$ pip install -e .

Or if you want to create an AWS Lambda package using rasterio wheels:

# On a centos machine
$ pip install rio-tiler --no-binary numpy -t /tmp/vendored -U
$ zip -r9q package.zip vendored/*

API Overview

rio_tiler.landsat8

The landsat8 module processes data hosted on the Landsat 8 AWS Public Dataset.

  • landsat8.bounds

    Get WGS84 bounds for a Landsat scene.

    Input:
    • sceneid: Landsat product id (or scene id for scene < 1st May 2017)

    Output:
    • dictionary:
      • bounds: (minX, minY, maxX, maxY) (list)

      • sceneid: scene id (string)

    >>> from rio_tiler import landsat8
    >>> landsat8.bounds('LC08_L1TP_016037_20170813_20170814_01_RT')
    {'bounds': [-81.30836, 32.10539, -78.82045, 34.22818],
    'sceneid': 'LC08_L1TP_016037_20170813_20170814_01_RT'}
  • landsat8.metadata

    Get WGS84 bounds and cumulative histogram cuts for each bands for a Landsat scene.

    Input:
    • sceneid: Landsat product id (or scene id for scene < 1st May 2017)

    • pmin: Histogram cut minimum value in percent (default: 2)

    • pmax: Histogram cut maximum value in percent (default: 98)

    Output:
    • dictionary:
      • bounds: (minX, minY, maxX, maxY) (list)

      • sceneid: scene id (string)

      • rgbMinMax: Min/Max DN values for the linear rescaling (dictionary)

      >>> from rio_tiler import landsat8
      >>> landsat8.metadata('LC08_L1TP_016037_20170813_20170814_01_RT', pmin=5, pmax=95)
      {'bounds': [-81.30836, 32.10539, -78.82045, 34.22818],
       'rgbMinMax': {'1': [1245, 5396],
        '2': [983, 5384],
        '3': [718, 5162],
        '4': [470, 5273],
        '5': [403, 6440],
        '6': [258, 4257],
        '7': [151, 2984]},
       'sceneid': 'LC08_L1TP_016037_20170813_20170814_01_RT'}
  • landsat8.tile

    Return base64 encoded image corresponding to a mercator tile

    Input:
    • sceneid : Landsat product id (or scene id for scene < 1st May 2017)

    • x: Mercator tile X index

    • y: Mercator tile Y index

    • z: Mercator tile ZOOM level

    • rgb: Bands index for the RGB combination (default: (4, 3, 2))

    • tilesize: Output image size (default: 256)

    • pan: If True, apply pan-sharpening (default: False)

    Output:
    • numpy ndarray of the image data

    >>> from rio_tiler import landsat8
    >>> tile = landsat8.tile('LC08_L1TP_016037_20170813_20170814_01_RT', 71, 102, 8)
    >>> tile.shape
    (3, 256, 256)

rio_tiler.sentinel2

The sentinel2 module processes data hosted on the Sentinel 2 AWS Public Dataset.

  • sentinel2.bounds

    Get WGS84 bounds for a Landsat scene.

    Input:
    • sceneid: Sentinel scene id (S2{A|B}_tile_{YYYYMMDD}_{utm_zone}{latitude_band}{grid_square}_{img_number})

    Output:
    • dictionary:
      • bounds: (minX, minY, maxX, maxY) (list)

      • sceneid: scene id (string)

    >>> from rio_tiler import sentinel2
    >>> sentinel2.bounds('S2A_tile_20170729_19UDP_0')
    {'bounds': [-70.36082319774495, 47.75776333620836, -68.8677615795376, 48.75301295078041],
     'sceneid': 'S2A_tile_20170729_19UDP_0'}
  • sentinel2.metadata

    Get WGS84 bounds and cumulative histogram cuts for each bands for a Sentinel scene.

    Input:
    • sceneid: Sentinel scene id (S2{A|B}_tile_{YYYYMMDD}_{utm_zone}{latitude_band}{grid_square}_{img_number})

    • pmin: Histogram cut minimum value in percent (default: 2)

    • pmax: Histogram cut maximum value in percent (default: 98)

    Output:
    • dictionary:
      • bounds: (minX, minY, maxX, maxY) (list)

      • sceneid: scene id (string)

      • rgbMinMax: Min/Max DN values for the linear rescaling (dictionary)

    >>> from rio_tiler import sentinel2
    >>> sentinel2.metadata('S2A_tile_20170729_19UDP_0', pmin=5, pmax=95)
    {'sceneid': 'S2A_tile_20170729_19UDP_0',
    'bounds': [-70.36082319774495, 47.75776333620836, -68.8677615795376, 48.75301295078041],
    'rgbMinMax': {
        '01': [1088, 8237],
        '02': [740, 8288],
        '03': [488, 7977],
        '04': [255, 8626],
        '05': [210, 8877],
        '06': [172, 9079],
        '07': [150, 9263],
        '08': [122, 9163],
        '8A': [107, 9360],
        '09': [53, 5926],
        '10': [6, 546],
        '11': [15, 5658],
        '12': [8, 4009]}}
  • sentinel2.tile

    Return base64 encoded image corresponding to a mercator tile

    Input:
    • sceneid : Sentinel scene id (S2{A|B}_tile_{YYYYMMDD}_{utm_zone}{latitude_band}{grid_square}_{img_number})

    • x: Mercator tile X index

    • y: Mercator tile Y index

    • z: Mercator tile ZOOM level

    • rgb: Bands index for the RGB combination (default: (04, 03, 02))

    • tilesize: Output image size (default: 256)

    Output:
    • numpy ndarray of the image data

    >>> from rio_tiler import sentinel2
    >>> sentinel2.tile('S2A_tile_20170729_19UDP_0', 77, 89, 8, 'png')
    >>> tile.shape
    (3, 256, 256)

rio_tiler.aws

The aws module can process any raster hosted on AWS S3.

  • aws.bounds

    Get WGS84 bounds for a scene.

    Input:
    • bucket: AWS S3 bucket name where the raster is stored

    • key: AWS S3 key

    Output:
    • dictionary:
      • bounds: (minX, minY, maxX, maxY) (list)

      • bucket: bucket name

      • key: AWS key

    >>> from rio_tiler import aws
    >>> aws.bounds('my-bucket', 'data/my-raster.tif')
    {'bounds': [-104.77532797841498, 38.95344940972065, -104.77466477631017, 38.95376633047638],
     'bucket': 'my-bucket'
     'key': 'data/my-raster.tif'}
  • aws.tile

    Return base64 encoded image corresponding to a mercator tile

    Input:
    • bucket: bucket name

    • key: AWS key

    • x: Mercator tile X index

    • y: Mercator tile Y index

    • z: Mercator tile ZOOM level

    • rgb: Band index to read (default: (1, 2, 3))

    • tilesize: Output image size (default: 256)

    Output:
    • numpy ndarray of the image data

    >>> from rio_tiler import aws
    >>> aws.tile('my-bucket', 'data/my-raster.tif', 77, 89, 8)
    >>> tile.shape
    (3, 256, 256)

Convert tile output to image

rio_tiler.utils.array_to_img

Input:
  • numpy nuint8 ndarray

  • mask nuint8 array

Output:
  • Pillow Image object

>>> from rio_tiler import landsat8
>>> from rio_tiler.utils import array_to_img, b64_encode_img
>>> tile, mask = landsat8.tile('LC08_L1TP_016037_20170813_20170814_01_RT', 71, 102, 8)
>>> # convert the data to an image object
>>> img = array_to_img(tile, mask=mask) # this returns a pillow image

rio_tiler.utils.b64_encode_img

Input:
  • img Pillow image

  • tileformat: Image format to return (“jpg” or “png”)

Output:
  • base64 encoded image PNG or JPEG (string)

>>> from rio_tiler import landsat8
>>> from rio_tiler.utils import array_to_img, b64_encode_img
>>> tile, mask = landsat8.tile('LC08_L1TP_016037_20170813_20170814_01_RT', 71, 102, 8)
>>> img = array_to_img(tile, mask=mask) # this returns a pillow image
>>> str_img = b64_encode_img(img, 'jpeg')
'iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAEAAElEQVR4AQAggN9/AAAAAAA....

License

See LICENSE.txt.

Authors

See AUTHORS.txt.

Changes

See CHANGES.txt.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

rio_tiler-1.0a5.tar.gz (14.8 kB view details)

Uploaded Source

File details

Details for the file rio_tiler-1.0a5.tar.gz.

File metadata

  • Download URL: rio_tiler-1.0a5.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for rio_tiler-1.0a5.tar.gz
Algorithm Hash digest
SHA256 404aa22953a71ebf2e26a11502af1674a0f8e5561378b908474c1556a23d60c2
MD5 2659321852ec1d9569fe111425a16db5
BLAKE2b-256 cdd5562f39c442466ea5b056b5c4a3e83f23616a8c9f0b0e881edbe0cb67a7e7

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