R:使用包“rgdal”和“raster”裁剪 GeoTiff 栅格

2023-12-20

我想使用提到的两个包“rgdal”和“raster”裁剪 GeoTiff 光栅文件。一切工作正常,除了生成的输出 tif 的质量非常差并且是灰度而不是彩色。原始数据是来自瑞士联邦地形局的高质量栅格地图,示例文件可以下载here http://www.swisstopo.admin.ch/internet/swisstopo/de/home/products/maps/national/digital/national/pk_25.html.

这是我的代码:

## install.packages("rgdal")
## install.packages("raster")
library("rgdal")
library("raster")

tobecroped <- raster("C:/files/krel_1129_2012_254dpi_LZW.tif")
ex  <- raster(xmn=648000, xmx=649000, ymn=224000, ymx=225000)
projection(ex) <- proj4string(tobecroped)
output <- "c:/files/output.tif"

crop(x = tobecroped, y = ex, filename = output)

为了重现此示例,请下载样本数据 http://www.swisstopo.admin.ch/internet/swisstopo/de/home/products/maps/national/digital/national/pk_25.parsys.60351.downloadList.20035.DownloadFile.tmp/krel11292012254dpilzw.zip并将其解压到文件夹“c:/files/”。奇怪的是,使用样本数据,裁剪后的图像质量还不错,但仍然是灰度的。

我尝试使用“数据类型”、“格式”选项,但没有得到任何结果。有人能指出解决方案吗?我应该提供输入数据的更多信息吗?

编辑: 乔希的示例对于示例数据效果非常好2 http://www.swisstopo.admin.ch/internet/swisstopo/de/home/products/maps/national/digital/national/pk_25.parsys.60351.downloadList.20035.DownloadFile.tmp/krel11292012254dpilzw.zip。不幸的是,我拥有的数据似乎更旧并且有些不同。如果您阅读以下 GDALinfo,您能告诉我我选择什么选项吗:

# packages same as above
OldInFile = "C:/files/krel1111.tif"
dataType(raster(OldInFile)
[1] "INT1U"

GDALinfo(OldInFile)

rows        4800 
columns     7000 
bands       1 
lower left origin.x        672500 
lower left origin.y        230000 
res.x       2.5 
res.y       2.5 
ysign       -1 
oblique.x   0 
oblique.y   0 
driver      GTiff 
projection  +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333+k_0=1 +x_0=600000+y_0=200000 +ellps=bessel +units=m+no_defs 
file        C:/files/krel1111.tif 
apparent band summary:
  GDType hasNoDataValue NoDataValue blockSize1 blockSize2
1   Byte          FALSE           0          1       7000
apparent band statistics:
  Bmin Bmax Bmean Bsd
1    0  255    NA  NA
Metadata:
AREA_OR_POINT=Area 
TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) 
TIFFTAG_XRESOLUTION=254 
TIFFTAG_YRESOLUTION=254 
Warning message:
statistics not supported by this driver

编辑(2015-03-10):

如果只是想裁剪掉现有 GeoTIFF 的子集并将裁剪后的部分保存到新的*.tif文件,使用gdalUtils::gdal_translate()可能是最直接的解决方案:

library(raster)    # For extent(), xmin(), ymax(), et al.
library(gdalUtils) # For gdal_translate()

inFile <- "C:/files/krel_1129_2012_254dpi_LZW.tif"
outFile <- "subset.tif"
ex <- extent(c(686040.1, 689715.9, 238156.3, 241774.2))

gdal_translate(inFile, outFile,
               projwin=c(xmin(ex), ymax(ex), xmax(ex), ymin(ex)))

看来您需要更改两个细节。

首先,*.tif您正在读取的文件有三个波段,因此应该使用以下方式读取stack()。 (使用raster()它只会读取单个波段(默认情况下是第一个波段),产生单色或“灰度”输出。

Second (由于这里提到的原因 https://stat.ethz.ch/pipermail/r-sig-geo/2014-August/021624.html) writeRaster()默认情况下会将值写为实数(Float64在我的机器上)。要明确告诉它您想使用字节,请给它参数datatype='INT1U'.

library("rgdal")
library("raster")
inFile <- "C:/files/krel_1129_2012_254dpi_LZW.tif"
outFile <- "out.tif"

## Have a look at the format of your input file to:
## (1) Learn that it contains three bands (so should be read in as a RasterStack)
## (2) Contains values written as Bytes (so you should write output with datatype='INT1U')
GDALinfo(inFile)

## Read in as three separate layers (red, green, blue)
s <- stack(inFile)

## Crop the RasterStack to the desired extent
ex  <- raster(xmn=648000, xmx=649000, ymn=224000, ymx=225000)
projection(ex) <- proj4string(s)
s2 <- crop(s, ex)

## Write it out as a GTiff, using Bytes
writeRaster(s2, outFile, format="GTiff", datatype='INT1U', overwrite=TRUE)

所有这些都输出以下 tiff 文件:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:使用包“rgdal”和“raster”裁剪 GeoTiff 栅格 的相关文章

随机推荐

  • 每秒闪烁更新一次 BitmapImage

    我试图通过每秒设置源属性来更新图像 这有效 但更新时会导致闪烁 CurrentAlbumArt new BitmapImage CurrentAlbumArt BeginInit CurrentAlbumArt UriSource new
  • @SQL 每堂课一次

    我正在使用 spring 框架编写一些集成测试 我对不同的集成测试类有不同的 SQL 脚本 像这样的事情 ContextConfiguration classes Sql classpath sportCenter test sql pub
  • Android Nougat:TextureView 不支持显示背景可绘制对象

    我一直在我的Android应用程序中使用TextureView 并且它工作得很好 最近 我在使用 Android API 25 7 1 2 的 Android 设备上测试了我的代码 相同的代码现在不起作用并抛出错误 java lang Un
  • 使用 Asp.Net Core 强制区域设置

    我在使用 Asp Net Core 1 1 和完整的 Net Framework v4 6 2 编写的 Web 应用程序时遇到一些奇怪的问题 我想强制应用程序使用瑞典语言环境 sv SE 这在开发计算机上运行得很好 当然 但在它应该运行的服
  • 如何使用未知 CA 自签名的证书让 Android Volley 执行 HTTPS 请求?

    在提出问题之前 我找到了一些链接 我逐一检查了这些链接 但没有一个链接给我提供了解决方案 知名CA 使用 Volley 的 HTTPS 请求 https stackoverflow com questions 21555404 https
  • Testflight 上出现无效的 IPA 错误:embedded.mobileprovision 中的 APS 环境与二进制文件不匹配

    我很抱歉发布了这么多问题 但是让这个工作变得非常痛苦 尽管 Testflight 让它变得更容易 Invalid IPA error The APS environment in your embedded mobileprovision
  • 从位于 boot2docker 虚拟机内的 Docker 容器作为本地主机访问主机

    假设我有一台服务器在 OSX 上的端口 8000 上运行 我的 Docker 容器如何通过以下方式访问它localhost 8000 我也无法更改主机名 因为容器中的应用程序不在我的控制范围内 我读过之前关于使用的讨论 net host 用
  • 基于模型类型的 ember 组件

    我知道这有点重复 但我创建动态组件渲染器的所有努力都失败了 可能是由于我缺乏对 ember 概念的了解 我的场景是一个多用途搜索栏 它将搜索缓存中的模型 我希望根据模型的类型键在搜索输入下方呈现每个搜索结果 车把文件将根据模型类型和语法命名
  • 字符串到二进制文件

    我的问题是这样的 我有一个名为 Register 的课程 它有一个名为 trainName 的字符串属性及其设置器 class Register private string trainName public string getTrain
  • Excel 多行条件格式

    我试图突出显示超出预期值范围 仅较高或较低 的单元格 每行对应一个不同的行 该行有两个带有最大值和最小值的单元格 有没有办法让 Excel 计算出来 例如 第 7 行的单元格仅当其值超出 B31 的最小值或 B32 的最大值时才应突出显示
  • 角度异步事件的问题

    我的代码循环遍历数组中的 10 个项目 对每个项目发出请求 然后将返回的数据推送到数组中 一切都运行良好 直到 q all line details getDetails function idSet pageNum var page id
  • python 2.7小写

    当我使用 lower 在Python 2 7中 字符串不会将字母转换为小写 我从字典中读取数据 我尝试使用str tt code lower tt code lower 有什么建议 使用 unicode 字符串 drostie signy
  • 如何通过 Python 使用 GeckoDriver 和 Selenium 启动使用默认 Firefox 到 68.9.0esr 的 Tor 浏览器 9.5

    我正在尝试通过以下方式启动 Tor 浏览会话托尔浏览器 9 5它使用默认的火狐浏览器 v68 9 0esr using Gecko驱动程序 https stackoverflow com questions 43660195 why fir
  • 什么时候应该将translatesAutoresizingMaskIntoConstraints设置为true?

    我读过文档 https developer apple com documentation uikit uiview 1622572 translatesautoresizingmaskintoco 但我仍然不确定什么时候不需要将其设置为f
  • 获取SD卡路径

    请在投反对票和 或将其标记为重复之前阅读整篇文章 我正在开发一款应用程序 它可以从用户手机上的特定文件夹中读取文件 从 SD 卡 如果有的话 或从内置存储中读取 是的 清单中提到了 READ EXTERNAL STORAGE 我还在处理 A
  • android(单点触控)绘图应用程序撤消方法无法正常工作

    我正在开发一个绘图应用程序 但面临一些撤消问题 编码如下 public class DoodleView extends View Context context new private static final float TOUCH T
  • 有没有办法使用 ODI 场景重新创建 ODI 包?

    我错误地从我的项目中删除了一个非常大的 ODI 包 如果我之前为同一项目导出过场景 是否可以重新创建相同的包 不幸的是 没有任何方法可以直接从场景中生成已删除的包 您可以将其视为包的编译版本 以下是一些需要检查的事项 以确定您是否可以检索某
  • 该进程无法访问文件“ ”,因为该文件正在被另一个进程使用

    我正在尝试删除使用文件对话框上传的图像文件的本地副本 在计算机上 它抛出进程无法访问文件 C Documents and Settings 用户名 我的文档 我的图片 1220 bmp 因为它正在被另一个进程使用 private void
  • mvc3编辑表单中的下拉菜单

    这可能很简单 但我似乎无法自己解决 我创建了一个简单的数据库和实体模式 如下所示 我正在尝试创建一个创建表单 该表单允许我添加新订单 我总共有 3 个表 所以我想要做的是拥有一个允许用户输入订单日期的表单 并且还有一个下拉列表 允许我从产品
  • R:使用包“rgdal”和“raster”裁剪 GeoTiff 栅格

    我想使用提到的两个包 rgdal 和 raster 裁剪 GeoTiff 光栅文件 一切工作正常 除了生成的输出 tif 的质量非常差并且是灰度而不是彩色 原始数据是来自瑞士联邦地形局的高质量栅格地图 示例文件可以下载here http w