mapbox / cbers-tiler

A serverless CBERS-4 tiles server using AWS Lambda
BSD 3-Clause "New" or "Revised" License
10 stars 5 forks source link

cbers-tiler

Description

Create a highly customizable serverless tile server for CBERS-4 AWS Public Dataset. This project is based on rio-tiler python library.

CBERS-4 data on AWS

Hosted since late 2017, CBERS-4 data on AWS offers an alternative to cbers and Sentinel data (https://aws.amazon.com/fr/blogs/publicsector/the-china-brazil-earth-resources-satellite-mission/).

China–Brazil Earth Resources Satellite 4 (CBERS-4), also known as Ziyuan I-04 or Ziyuan 1E, is a remote sensing satellite intended for operation as part of the China–Brazil Earth Resources Satellite programme between the China Centre for Resources Satellite Data and Application and Brazil's National Institute for Space Research. The fifth CBERS satellite to fly, it was successfully launched on 7 December 2014. It replaces CBERS-3 which was lost in a launch failure in December 2013.

source: https://en.wikipedia.org/wiki/CBERS-4


Installation

Requirement

Create the package

# Build Amazon linux AMI docker container + Install Python modules + create package
git clone https://github.com/mapbox/cbers-tiler.git
cd cbers-tiler/
make all

Deploy to AWS

One of the easiest way to Build and Deploy a Lambda function is to use Serverless toolkit. We took care of the building part with docker so we will just ask Serverless to only upload our package file to AWS S3, to setup AWS Lambda and AWS API Gateway.

#configure serverless (https://serverless.com/framework/docs/providers/aws/guide/credentials/)
npm install
sls deploy
sls deploy

:tada: You should be all set there.


Use it: cbers-viewer

cbers-tiler + Mapbox GL + Satellite API

The viewer/ directory contains a UI example to use with your new Lambda cbers tiler endpoint. It combine the power of mapbox-gl and the nice developmentseed sat-api to create a simple and fast cbers-viewer.

To be able to run it, edit those two lines in viewer/js/app.js

// viewer/js/app.js
3  mapboxgl.accessToken = '{YOUR-MAPBOX-TOKEN}';
4  const cbers_tiler_url = "{YOUR-API-GATEWAY-URL}";

Workflow

  1. One AWS ƛ call to get min/max percent cut value for all the bands and bounds

    Path: /cbers/metdata/{cbers scene id}

    Inputs:

    • sceneid: CBERS product id

    Options:

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

    Output: (dict)

    • bounds: (minX, minY, maxX, maxY) (list)
    • sceneid: scene id (string)
    • rgbMinMax: Min/Max DN values for the linear rescaling (dict)

    Example: <api-gateway-url>/cbers/metadata/CBERS_4_MUX_20170915_166_105_L4?pmin=5&pmax=95

  2. Parallel AWS ƛ calls (one per mercator tile) to retrieve corresponding cbers data

    Path: /cbers/tiles/{cbers scene id}/{z}/{x}/{y}.{ext}

    Inputs:

    • sceneid: CBERS product id
    • x: Mercator tile X index
    • y: Mercator tile Y index
    • z: Mercator tile ZOOM level
    • ext: Image format to return ("jpg" or "png")

    Options:

    • rgb: Bands index for the RGB combination (default: (4, 3, 2))
    • histo: - delimited rgb histogram min/max (default: 0,16000-0,16000-0,16000 )
    • tile: Output image size (default: 256)

    Output:

    • base64 encoded image PNG or JPEG (string)

    Example:

    • <api-gateway-url>/cbers/tiles/CBERS_4_MUX_20170915_166_105_L4/8/71/102.png
    • <api-gateway-url>/cbers/tiles/CBERS_4_MUX_20170915_166_105_L4/8/71/102.png?rgb=5,4,3&histo=100,3000-130,2700-500,4500&tile=1024

Live Demo: https://viewer.remotepixel.ca

Infos & links