从landsat、sentinel或其他aws托管的光栅获取mercator tile

rio-tiler的Python项目详细描述


里约热内卢瓷砖

从云优化geotiff数据集读取墨卡托瓷砖的光栅插件。

Packaging statusCircleCIcodecov

aws公共数据集上托管的以下卫星任务提供了额外支持

rio tiler支持python 2.7和3.3-3.7。

安装

您可以使用pip安装rio tiler

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

或从源安装:

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

概述

使用其中一个rio_tiler模块创建tiles:mainsentinel2landsat8cbers

main模块可以从rasterio支持的任何光栅源(即本地文件、http、s3、gcs等)创建mercator平铺。特定于任务的模块使从aws s3存储桶中提取分片变得更加容易(即只需要一个场景id);它们还可以用于返回元数据。

每个tilling模块都有一个返回图像元数据的方法(例如边界)。

用法

通过Internet从文件中读取磁贴

fromrio_tilerimportmaintile,mask=main.tile('http://oin-hotosm.s3.amazonaws.com/5a95f32c2553e6000ce5ad2e/0/10edab38-1bdd-4c06-b83d-6e10ac532b7d.tif',691559,956905,21,tilesize=256)print(tile.shape)>(3,256,256)print(mask.shape)>(256,256)

从平铺创建图像

fromrio_tiler.utilsimportarray_to_imagebuffer=array_to_img(tile,mask=mask)# this returns a buffer (PNG by default)

使用创建选项匹配mapnik默认值

fromrio_tiler.utilsimportarray_to_imagefromrio_tiler.profilesimportimg_profilesoptions=img_profiles["webp"]buffer=array_to_img(tile,mask=mask,img_format="webp",**options)

将图像写入文件

withopen("my.png","wb")asf:f.write(buffer)

获取sentinel2磁贴及其nodata掩码。

fromrio_tilerimportsentinel2tile,mask=sentinel2.tile('S2A_tile_20170729_19UDP_0',77,89,8)print(tile.shape)>(3,256,256)

获取陆地卫星场景的边界(WGS84)。

fromrio_tilerimportlandsat8landsat8.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'}

获取陆地卫星场景的元数据(即WGS84中的百分比(PC)最小/最大值、直方图和边界)。

fromrio_tilerimportlandsat8landsat8.metadata('LC08_L1TP_016037_20170813_20170814_01_RT',pmin=5,pmax=95){'sceneid':'LC08_L1TP_016037_20170813_20170814_01_RT','bounds':{'value':(-81.30844102941015,32.105321365706104,-78.82036599673634,34.22863519772504),'crs':'+init=EPSG:4326'},'statistics':{'1':{'pc':[1251.297607421875,5142.0126953125],'min':-1114.7020263671875,'max':11930.634765625,'std':1346.6463388957156,'histogram':[[1716,257951,174296,36184,20828,11783,6862,2941,635,99],[-1114.7020263671875,189.83164978027344,1494.3653564453125,2798.89892578125,4103.4326171875,5407.96630859375,6712.5,8017.03369140625,9321.5673828125,10626.1015625,11930.634765625]]},......'11':{'pc':[278.3393859863281,293.4466247558594],'min':147.27650451660156,'max':297.4621276855469,'std':7.660112832018338,'histogram':[[207,201,204,271,350,944,1268,2383,43085,453084],[147.27650451660156,162.29507446289062,177.31362915039062,192.33218383789062,207.3507537841797,222.36932373046875,237.38787841796875,252.40643310546875,267.42498779296875,282.4435729980469,297.4621276855469]]}}}
计算图像的最小值和最大值的主要目的是通过线性变换将像素值从其原始范围(例如0到65535)重新调整到计算机屏幕(即0和255)所使用的范围。 这将使图像在显示时看起来很好。

云托管数据集的部分读取

rio tiler在本地或远程数据集上执行部分读取,这就是它在云优化geotiff(cog)上性能最佳的原因。 需要注意的是,sentinel-2在aws上托管的场景不是云优化格式,而是jpeg2000格式。 执行JPEG2000数据集部分读取时,GDAL(光栅后端库)将需要发出大量get请求并传输大量数据。

警告 aws sentinel-2 bucket处于requester pays模式,这意味着每个用户将为get/list请求和数据传输付费。虽然这看起来是可以接受的,但是使用rio tiler访问jpeg2000数据集(作为sentinel-2)可能会导致一个巨大的aws账单。

参考:Do you really want people using your data博客文章。

贡献与发展

问题和拉取请求非常受欢迎。

dev安装

$ git clone https://github.com/cogeotiff/rio-tiler.git
$ cd rio-tiler
$ pip install -e .[dev]

仅限python3.6

此repo设置为在提交新代码时使用pre-commit运行flake8pydocstringblack(“不妥协的python代码格式化程序”)。

$ pre-commit install

许可证

LICENSE.txt

作者

里约热内卢瓦勒项目始于Mapbox,已于2019年1月移交。

有关各个贡献者的列表,请参见AUTHORS.txt

更改

CHANGES.txt

创建aws lambda包

确保软件包在aws上运行的最简单方法是使用docker

FROM lambci/lambda:build-python3.6ENVLANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

RUN pip3 install rio-tiler --no-binary numpy -t /tmp/python -U

RUNcd /tmp/python && zip -r9q /tmp/package.zip *

参考号:https://github.com/vincentsarago/simple-rio-lambda

插件

实施

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
playframework Play Framework 2.5表单对象bean(Java)中的依赖项注入   java从javascript触发小程序按钮   JavaGWT:如何创建我自己的异步方法?   对于JTA事务类型,java JPA更改不会持久化   java如何使用预定义的甲板类制作Black Jack游戏   带有数组的java HashMap find()   从Java中的另一个类接收对象数组的参数?   java IntelliJ错误:Scala 145,错误:scalac:找不到Scala编译器JAR   java Eclipse 404请求的资源不可用   java Chuck没有界限   java阅读行每隔一行跳过一行   java如何访问我的EAR部署信息   Java中的正则表达式,其中执行搜索的文本是动态变化的   java我需要优化BigInteger的toString()方法   java Google Map Api V2,自定义路线标记   java如何在Java8中与LocalDate实现更少的需求和更高的质量   EclipseUML插件生成Java源代码   将数据库列绑定到java jComboBox和JList   java如何将两个图像合并为PDF