一个用于创建镶嵌瓦片的rio-tiler插件。
项目描述
rio-tiler-mosaic
一个用于从多个观测中创建瓦片的rio-tiler插件。
安装
$ pip install rio-tiler-mosaic
或
$ git clone http://github.com/cogeotiff/rio-tiler-mosaic
$ cd rio-tiler-mosaic
$ pip install -e .
Rio-tiler + Mosaic
这个rio-tiler插件的目标是从多个观测中创建瓦片。
因为用户可能想要选择哪个像素位于瓦片顶部,所以这个插件包含了5种不同的 像素选择
算法
- 第一个:取收到的第一个像素
- 最高:遍历所有资源并返回最高值
- 最低:遍历所有资源并返回最低值
- 平均值:计算整个堆栈的平均值
- 中值:计算整个堆栈的中值
API
mosaic_tiler(assets, tile_x, tile_y, tile_z, tiler, pixel_selection=None, chunk_size=5, kwargs)
输入
- assets : 列表,rio-tiler兼容资源(url或sceneid)的元组
- tile_x : 摩尔瓦片X索引。
- tile_y : 摩尔瓦片Y索引。
- tile_z : 摩尔瓦片ZOOM级别。
- tiler: Rio-tiler的tiler函数(例如rio_tiler.landsat8.tile)
- pixel_selection : 可选的 像素选择 算法(默认:"first")。
- chunk_size: 可选,控制每次循环处理的资源数量。
- kwargs: Rio-tiler tiler模块特定选项。
返回
- tile, mask : 纳数组元组,返回瓦片和掩码数据。
示例
from rio_tiler.io import COGReader
from rio_tiler_mosaic.mosaic import mosaic_tiler
from rio_tiler_mosaic.methods import defaults
def tiler(src_path: str, *args, **kwargs) -> Tuple[numpy.ndarray, numpy.ndarray]:
with COGReader(src_path) as cog:
return cog.tile(*args, **kwargs)
assets = ["mytif1.tif", "mytif2.tif", "mytif3.tif"]
tile = (1000, 1000, 9)
x, y, z = tile
# Use Default First value method
mosaic_tiler(assets, x, y, z, tiler)
# Use Highest value: defaults.HighestMethod()
mosaic_tiler(
assets,
x,
y,
z,
tiler,
pixel_selection=defaults.HighestMethod()
)
# Use Lowest value: defaults.LowestMethod()
mosaic_tiler(
assets,
x,
y,
z,
tiler,
pixel_selection=defaults.LowestMethod()
)
MosaicMethod
接口
rio-tiler-mosaic.methods.base.MosaicMethodBase
类定义了一个抽象接口,用于所有由 rio-tiler-mosaic
允许的 像素选择
方法。它的方法和属性如下:
is_done
:属性,返回一个布尔值,表示是否已填充瓦片data
:属性,返回输出 瓦片 和 掩码 numpy 数组feed(tile: numpy.ma.ndarray)
:方法,更新瓦片
MosaicMethodBase 类不打算直接使用,而是作为一个抽象基类,具体实现的模板。
编写自己的像素选择方法
编写自己的 像素选择算法
类的规则如下:
- 必须继承自 MosaicMethodBase
- 必须提供上述所有方法的具体实现。
请参阅 rio_tiler_mosaic.methods.defaults 类以获取示例。
智能多线程
在处理大量图像时,您可能不希望处理整个堆栈,尤其是如果像素选择方法在填充瓦片后停止。为了允许更好的优化,rio-tiler-mosaic
并行(线程)获取瓦片,但为了限制文件数量,也将获取嵌入到循环中(创建了两级处理)
assets = ["1.tif", "2.tif", "3.tif", "4.tif", "5.tif", "6.tif"]
# 1st level loop - Creates chuncks of assets
for chunks in _chunks(assets, chunk_size):
# 2nd level loop - Uses threads for process each `chunck`
with futures.ThreadPoolExecutor(max_workers=max_threads) as executor:
future_tasks = [executor.submit(_tiler, asset) for asset in chunks]
默认情况下,块大小等于线程数(或如果无线程则等于资产数)
关于线程的更多内容
可以通过函数调用中的 threads=
选项设置使用的线程数。默认情况下,它将等于 multiprocessing.cpu_count() * 5
或 MAX_THREADS 环境变量。在某些情况下,线程可能会减慢您的应用程序。您可以设置线程为 0
以循环运行瓦片,而不使用 ThreadPool。
示例
请参阅 /example
贡献与发展
问题和拉取请求非常欢迎。
开发安装
$ git clone https://github.com/cogeotiff/rio-tiler-mosaic.git
$ cd rio-tiler-mosaic
$ pip install -e .[dev]
Python3.6 仅支持
此存储库设置为在提交新代码时使用 pre-commit
来运行 flake8、pydocstring 和 black(“无妥协的 Python 代码格式化程序”)。
$ pre-commit install