前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Google Earth Engine(GEE)——R 语言图像可视化(内含NDWI指数计算和掩膜镶嵌后的图像展示)

Google Earth Engine(GEE)——R 语言图像可视化(内含NDWI指数计算和掩膜镶嵌后的图像展示)

作者头像
此星光明
发布2024-02-02 08:30:31
3180
发布2024-02-02 08:30:31
举报

改编自Google Earth Engine 文档

您可以使用MapaddLayer()可视化图像。如果在没有任何附加参数的情况下向地图添加图层,默认情况下rgee将前三个波段分别分配给红色、绿色和蓝色。默认拉伸基于带中数据的类型(例如,浮点数在 [0,1] 中拉伸,16 位数据被拉伸到可能值的完整范围),这可能适合也可能不适合。为了达到理想的可视化效果,您可以为MapaddLayer()提供可视化参数。具体来说,参数是:

Visualization parameters for Map$addLayer()

Parameter

Description

Type

bands

Comma-delimited list of three band names to be mapper to RGB

list

min

Value(s) to map to 0

number or list of three numbers, one for each band

max

Value(s) to map to 255

number or list of three numbers, one for each band

gain

Value(s) by which to multiply each pixel value

number or list of three numbers, one for each band

bias

Value(s) to add to each DN

number or list of three numbers, one for each band

gamma

Gamma correction factor(s)

number or list of three numbers, one for each band

palette

List of CSS-style color strings (single-band images only)

comma-separated list hex strings

opacity

The opacity of the layer (0.0 is fully transparent and 1.0 is fully opaque)

number

1. RGB 合成

下面说明了如何使用参数将 Landsat 8 图像设置为假彩色合成:

代码语言:javascript
复制
library(rgee)
ee_Initialize()

# 加载影像
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')

# 定义参数
vizParams <- list(
  bands = c('B5', 'B4', 'B3'),
  min = 0,
  max = 0.5,
  gamma = c(0.95, 1.1, 1)
)

# 设置影像中心和加载到地图中
Map$setCenter(lon = -122.1899, lat = 37.5010, zoom = 10) # San Francisco Bay
Map$addLayer(landsat, vizParams, 'false color composite')

在本例中,波段‘B5’被分配给红色,‘B4’被分配给绿色,‘B3’被分配给蓝色。结果应该类似于图 1

图 N°01:美国加利福尼亚州旧金山湾区的 Landsat 8 假彩色合成

2. 调色板

要以彩色显示图像的单个波段,请使用palette由 CSS 样式颜色字符串列表表示的色带设置参数。(有关更多信息,请参阅此参考资料)。以下示例说明了如何使用从青色 ( ‘00FFFF’) 到蓝色 ( ‘0000FF’) 的颜色来渲染归一化差值水指数 (NDWI)图像:

代码语言:javascript
复制
# 加载影像
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')

# 创建归一化水体指数NDWI 
ndwi <- landsat$normalizedDifference(c('B3', 'B5'))

# 定义视觉参数和加载影像
ndwiViz <- list(
  min = 0.5,
  max = 1,
  palette = c('00FFFF', '0000FF')
)

Map$addLayer(
  eeObject = ndwi,
  visParams = ndwiViz,
  name = 'NDWI',
  shown = FALSE
)

在此示例中,请注意minmax参数指示应应用调色板的像素值范围。中间值被线性拉伸。另请注意,如果您将shown参数定义为FALSE,这会导致图层在添加到地图时不可见。始终可以使用地图左上角的图层管理器再次打开它。结果应该类似于图 2

图 N°02:美国旧金山湾区 Landsat 8 NDWI。与图 1 相同的区域。青色是低值,蓝色是高值。

3. 掩膜

您可以使用image$updateMask()根据蒙版图像中的像素不为零的位置设置单个像素的不透明度。遮罩中等于 0 的像素被排除在计算之外,并且不透明度设置为 0 以进行显示。以下示例使用 NDWI 阈值更新先前创建的 NDWI 图层上的掩码:

代码语言:javascript
复制
# Load an image.
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')

# Create visualization layers.
imageRGB <- landsat$visualize(
  list(
    bands = list("B5", "B4", "B3"),
    max = 0.5
  )
)

ndwiRGB <- ndwiMasked$visualize(
  list(
    min = 0.5,
    max = 1,
    palette = c('00FFFF', '0000FF')
  )
)
5. 镶嵌

您可以使用遮罩和imageCollection$mosaic()来实现各种制图效果。该mosaic()方法根据输入集合中的顺序渲染输出图像中的图层。下面的示例用于mosaic()组合蒙版 NDWI 和假色合成并获得新的可视化:

代码语言:javascript
复制
# 镶嵌可视化图层并显示(或导出)。
mosaic <- ee$ImageCollection(list(imageRGB, ndwiRGB))$mosaic()
Map$addLayer(eeObject = mosaic, list(), name = 'mosaic')

在此示例中,观察向ImageCollection构造函数提供了两个可视化图像的列表。列表的顺序决定了图像在地图上呈现的顺序。结果应该类似于图 3

图 N°04: Landsat 8 假彩色合成和 NDWI 的马赛克。美国旧金山湾区。

6. 与其他 R 包的集成

MapaddLayer()创建一个带有以下额外属性的传单对象:标记、名称、不透明度、显示、最小值、最大值、调色板和图例。这些额外的数据有助于用户自定义他们的交互式地图和/或将MapaddLayer与其他 R 包(例如{mapview}、 {mapedit}和{leaflet} )集成。

代码语言:javascript
复制
library(rgee)
ee_Initialize()

# 加载影像
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')

# 定义参数
vizParams <- list(
  bands = c('B5', 'B4', 'B3'),
  min = 0,
  max = 0.5,
  gamma = c(0.95, 1.1, 1)
)

# 展示影像
Map$setCenter(lon = -122.1899, lat = 37.5010, zoom = 10) # San Francisco Bay
m1 <- Map$addLayer(landsat, vizParams, 'false color composite')
m1$rgee

#> $tokens获取权限
#> [1] "https://earthengine.googleapis.com/v1alpha/projects/earthengine-legacy/maps/6f68ea5563f0787171eef294011e5b1a-54a29dea5a564831913fb1c8c1653628/tiles/{z}/{x}/{y}"
#> 
#> $name
#> [1] "false color composite"
#> 
#> $opacity
#> [1] 1
#> 
#> $shown
#> [1] TRUE
#> 
#> $min
#> [1] NA
#> 
#> $max
#> [1] NA
#> 
#> $palette
#> $palette[[1]]
#> [1] NA
#> 
#> 
#> $legend
#> [1] FALSE

{leaflet}:是一个用于传单的 R 包绑定(由 Rstudio 开发),一个用于移动友好型交互式地图的开源 JavaScript 库。

代码语言:javascript
复制
library(leaflet)
library(rgee)
ee_Initialize()

# 加载影像
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')

# 定义视觉参数
vizParams <- list(
  bands = c('B5', 'B4', 'B3'),
  min = 0,
  max = 0.5,
  gamma = c(0.95, 1.1, 1)
)

# 设置地图中心点和展示
Map$setCenter(lon = -122.1899, lat = 37.5010, zoom = 10) # San Francisco Bay
m1 <- Map$addLayer(landsat, vizParams, 'false color composite')

# 与leaflet结合
leaflet() %>% 
  addTiles() %>% 
  setView(-122.1899, 37.5010, 9) %>% 
  addTiles(
    urlTemplate = m1$rgee$tokens,
    layerId = "leaflet_false_color",
    options = leaflet::tileOptions(opacity = 1)
  )

图 N°05: Map$addLayer 和 {leaflet} 集成

{mapview}:由 Tim Appelhans 开发的 R 包,它提供了非常快速和方便地创建 R 空间数据的交互式可视化的功能。它支持最流行的空间数据 R 包({sp}、{sf}、{stars} 和 {raster})。

代码语言:javascript
复制
library(mapview)
library(rgee)

ee_Initialize()

# 加载影像
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')

# 设置参数
vizParams <- list(
  bands = c('B5', 'B4', 'B3'),
  min = 0,
  max = 0.5,
  gamma = c(0.95, 1.1, 1)
)

# 显示图像
Map$setCenter(lon = -122.1899, lat = 37.5010, zoom = 10) # San Francisco Bay
m1 <- Map$addLayer(landsat, vizParams, 'false color composite')

# 与地图视图集成
stp <- st_sfc(st_point(c(-122.27234, 37.46941)), crs=4326)
mapview(stp, m1)

图 N°06: Map$addLayer 和 {mapview} 集成。

{mapedit}:为传单交互式地图添加空间数据编辑功能(类似于代码编辑器几何工具)。

每加载一个地物就直接应用到这个函数就好了,所以比较简单

代码语言:javascript
复制
library(mapedit)
library(rgee)

ee_Initialize()

# Load an image.
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')

# Define the visualization parameters.
vizParams <- list(
  bands = c('B5', 'B4', 'B3'),
  min = 0,
  max = 0.5,
  gamma = c(0.95, 1.1, 1)
)

# Center the map and display the image.
Map$setCenter(lon = -122.1899, lat = 37.5010, zoom = 10) # San Francisco Bay
m1 <- Map$addLayer(landsat, vizParams, 'false color composite')

# Integrate with mapedit
my_geom <- editMap(m1)$drawn
7. 地图运营商

从 1.0.5 版本开始,rgee支持两种地图操作符:

代码语言:javascript
复制
library(mapedit)
library(rgee)

ee_Initialize()

# Load an image.
landsat <- ee$Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318')
ndwi <- landsat$normalizedDifference(c('B3', 'B5'))
ndwiMasked <- ndwi$updateMask(ndwi$gte(0.4))


# Define the visualization parameters.
vizParams <- list(
  bands = c('B5', 'B4', 'B3'),
  min = 0,
  max = 0.5,
  gamma = c(0.95, 1.1, 1)
)

ndwiViz <- list(
  min = 0.5,
  max = 1,
  palette = c('00FFFF', '0000FF')
)

# Center the map and display the image.
Map$setCenter(lon = -122.1899, lat = 37.5010, zoom = 10) # San Francisco Bay
m1 <- Map$addLayer(landsat, vizParams, 'false color composite')
m2 <- Map$addLayer(ndwiMasked, ndwiViz, 'NDWI masked')
  • m1 +m2:叠加层。
代码语言:javascript
复制
m1 + m2

图 N°08:叠加地图


示例

  • m1 |m2:并排视图。
代码语言:javascript
复制
#中间这个竖条也十分直白,就告诉你分开就好
m1 | m2

图 N°08:并排示例

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. RGB 合成
  • 2. 调色板
  • 3. 掩膜
  • 5. 镶嵌
  • 6. 与其他 R 包的集成
  • 7. 地图运营商
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档