搜索、下载和预处理 Landsat 图像
项目描述
描述
pylandsat是一个 Python 包,可让您从托管在Google Cloud上的公共数据集中搜索和下载 Landsat 场景 。此外,它还包括一组类和方法来访问和预处理下载的场景。
仅支持 Landsat Collection 1,即来自以下传感器和卫星任务的 1 级数据产品:
- Landsat 8 OLI/TIRS
- 陆地卫星 7 ETM+
- 陆地卫星 4-5 TM
- 陆地卫星 1-5 MSS
安装
pip install pylandsat
命令行界面
下载一个或多个场景
用法
Usage: pylandsat download [OPTIONS] [PRODUCTS]...
Download a Landsat product according to its identifier.
Options:
-d, --output-dir PATH Output directory.
-f, --files TEXT Comma-separated list of files to download.
--help Show this message and exit.
例子
# Download an entire product in the current directory
pylandsat download LE07_L1TP_205050_19991104_20170216_01_T1
# Download multiple products
pylandsat download \
LE07_L1TP_205050_19991104_20170216_01_T1 \
LE07_L1TP_206050_19991111_20170216_01_T1
# Download only the blue, green and red bands
pylandsat download --files B1.TIF,B2.TIF,B3.TIF \
LE07_L1TP_205050_19991104_20170216_01_T1
# Download only quality band
pylandsat download --files BQA.TIF \
LE07_L1TP_205050_19991104_20170216_01_T1
搜索场景
为了允许大而快速的查询,pylandsat使用托管在 Google Cloud 上的 Landsat 目录的本地转储。因此,需要初始同步:
# Sync local Landsat catalog
pylandsat sync-database
# Force update
pylandsat sync-database -f
数据库存储在可以使用以下命令显示的本地目录中:
pylandsat print-datadir
一旦创建了数据库,就可以查询本地目录。
用法
Usage: pylandsat search [OPTIONS]
Search for scenes in the Google Landsat Public Dataset catalog.
Options:
-b, --begin TEXT Begin search date (YYYY-MM-DD).
-e, --end TEXT End search date (YYYY-MM-DD).
-g, --geojson PATH Area of interest (GeoJSON file).
-l, --latlon FLOAT... Point of interest (decimal lat/lon).
-p, --path INTEGER WRS2 path.
-r, --row INTEGER WRS2 row.
-c, --clouds FLOAT Max. cloud cover percentage.
-s, --sensors TEXT Comma-separated list of possible sensors.
-t, --tiers TEXT Comma-separated list of possible collection tiers.
--slcoff Include SLC-off LE7 scenes.
-o, --output PATH Output CSV file.
--help Show this message and exit.
必须提供至少三个选项:--begin和--end(即感兴趣的时期)和地理范围(和--path、、--row或--latlon)。默认情况下,pylandsat 会列出与查询匹配的所有产品 ID。可以使用该选项将完整响应导出到 CSV 文件。请注意,空间范围是作为 GeoJSON 文件提供的,因此只会考虑第一个要素。--address--geojson--output
例子
# If only the year is provided, date is set to January 1st
pylandsat search \
--begin 1999 --end 2000 \
--path 206 --row 50 \
--clouds 0
# Using latitude and longitude
pylandsat search \
--begin 2000 --end 2010 \
--latlon 50.85 4.34
# Using a polygon in a GeoJSON file
pylandsat search \
--begin 2000 --end 2010 \
--geojson brussels.geojson
# Using an address that will be geocoded
pylandsat search \
--begin 2000 --end 2010 \
--address 'Brussels, Belgium'
# Limit to TM and ETM sensors
pylandsat search \
--begin 1990 --end 2010 \
--address 'Brussels, Belgium' \
--sensors LT04,LT05,LE07
# Export results into a CSV file
pylandsat search \
--begin 1990 --end 2010 \
--address 'Brussels, Belgium' \
--sensors LT04,LT05,LE07 \
--output scenes.csv
# List available sensors, i.e. possible values
# for the `--sensors` option
pylandsat list-sensors
# List available files for a given sensor
pylandsat list-available-files LT05
Python API
搜索目录
from datetime import datetime
from shapely.geometry import Point
from pylandsat import Catalog, Product
catalog = Catalog()
begin = datetime(2010, 1, 1)
end = datetime(2020, 1, 1)
geom = Point(4.34, 50.85)
# Results are returned as a list
scenes = catalog.search(
begin=begin,
end=end,
geom=geom,
sensors=['LE07', 'LC08']
)
# Get the product ID of the first scene
product_id = scenes[0].get("product_id")
# Download the scene
product = Product(product_id)
product.download(out_dir='data')
# The output of catalog.search() can be converted to a DataFrame
# for further processing. For instance:
# Get the product ID of the scene with the lowest cloud cover
import pandas as pd
df = pd.DataFrame.from_dict(scenes)
df.set_index(["product_id"], inplace=True)
df = df.sort_values(by='cloud_cover', ascending=True)
product_id = df.index[0]
加载和预处理数据
import numpy as np
import rasterio
import matplotlib.pyplot as plt
from pylandsat import Scene
# Access data
scene = Scene('data/LE07_L1TP_205050_19991104_20170216_01_T1')
print(scene.available_bands())
print(scene.product_id)
print(scene.sensor)
print(scene.date)
# Access MTL metadata
print(scene.mtl['IMAGE_ATTRIBUTES']['CLOUD_COVER_LAND'])
# Quality band
plt.imshow(scene.quality.read())
# Access band data
nir = scene.nir.read(1)
red = scene.red.read(1)
ndvi = (nir + red) / (nir - red)
# Access band metadata
print(scene.nir.bname)
print(scene.nir.fname)
print(scene.nir.profile)
print(scene.nir.width, scene.nir.height)
print(scene.nir.crs)
# Use reflectance values instead of DN
nir = scene.nir.to_reflectance()
# ..or brightness temperature
tirs = scene.tirs.to_brightness_temperature()
# Save file to disk
with rasterio.open('temperature.tif', 'w', **scene.tirs.profile) as dst:
dst.write(tirs, 1)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
pylandsat-0.6.0.tar.gz
(18.4 kB
查看哈希)
内置分布
pylandsat-0.6.0-py3-none-any.whl
(19.1 kB
查看哈希)