R结合GDAL批量矢量裁剪栅格

R结合GDAL批量矢量裁剪栅格


 ##使用R批量裁剪modis的tif, 
## inFilePath和outFilePath不能一样

bacth_mask_modis <- function( inFilePath, outFilePath, shpFile )
{
	if(outFilePath == inFilePath)
	{
		return
	}

	##'H:/data/Mod09A1/tif/Mod09_b2_b4_b6'
	##'H:/data/Mod09A1/tif/Poyang_lake'
	tif_files <- list.files( inFilePath, pattern='*.tif', full.names=T )
 
	onlyFileName <- basename( tif_files )

	cmd_part1 <- 'D:/software/open_source/release-1600-x64-gdal-1-11-0-mapserver-6-4-1/bin/gdalwarp.exe -co COMPRESS=DEFLATE -co TILED=YES -of GTiff -r lanczos  -crop_to_cutline -cutline '
	
	shpFile <- shpFile #### ' D:/document/Papers-2015/Dought_PoYang_Lake/01_Data/Poyang_County.shp '
	
	cmd_part2 <- paste(cmd_part1, ' ', shpFile, ' ', sep='')

	for( i in 1:length(tif_files))
	{
	##system('D:/software/open_source/release-1600-x64-gdal-1-11-0-mapserver-6-4-1/bin/gdalwarp.exe -co COMPRESS=DEFLATE -co TILED=YES -of GTiff -r lanczos  -crop_to_cutline -cutline D:/document/Papers-2015/Dought_PoYang_Lake/01_Data/Poyang_County.shp D:/document/Paper_fresh/Dry_PoYang_Lake/Data/2012273.sur_refl_b02.tif d:/output.tif' )

	outFile <- paste( outFilePath, '/', onlyFileName[i], sep='')

	cmd_part3 <- paste( cmd_part2, tif_files[i], sep='')

	cmd <- paste( cmd_part3, ' ', outFile, sep='')


	system( cmd )

	}


}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中使用GDAL进行矢量裁剪,你可以使用Java绑定库gdal.jar。以下是一个简单的示例代码,演示如何使用GDAL库将一个矢量文件裁剪到一个图层中: ```java import org.gdal.gdal.gdal; import org.gdal.gdal.Driver; import org.gdal.gdal.Dataset; import org.gdal.gdal.gdalconst; public class GdalClip { public static void main(String[] args) { // 注册所有GDAL驱动 gdal.AllRegister(); // 打开输入图层 Dataset input = gdal.Open(args[0], gdalconst.GA_ReadOnly); // 打开输入矢量文件 Dataset vector = gdal.OpenEx(args[1], gdalconst.GDAL_OF_VECTOR, null, null, null); // 获取矢量文件的第一个图层 int layerCount = vector.GetLayerCount(); if (layerCount == 0) { System.err.println("矢量文件中没有图层"); System.exit(1); } Layer layer = vector.GetLayer(0); // 根据输入图层创建输出图层 Driver driver = gdal.GetDriverByName("GTiff"); Dataset output = driver.Create(args[2], input.getRasterXSize(), input.getRasterYSize(), input.getRasterCount(), gdalconst.GDT_Float32); // 设置输出的地理参考 output.SetProjection(input.GetProjection()); output.SetGeoTransform(input.GetGeoTransform()); // 进行矢量裁剪 gdal.RasterizeLayer(output, new int[] { 1 }, layer, null, null, new Double[] { 1.0 }, new Double[] { 0.0 }, new int[] { 0 }); // 释放资源 input.delete(); output.delete(); vector.delete(); } } ``` 在上面的代码中,我们首先注册所有GDAL驱动程序,然后打开输入图层和输入矢量文件。接下来,我们获取矢量文件的第一个图层,并根据输入图层创建输出图层。最后,我们使用RasterizeLayer函数进行矢量裁剪,并释放所有资源。 这只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。注意,使用GDAL进行矢量裁剪需要一些基本的GIS知识和编程技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值