我是靠谱客的博主 疯狂老鼠,最近开发中收集的这篇文章主要介绍java通过gdal把单波段tiff文件转换为shp矢量文件并压缩,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


import cn.hutool.core.util.ZipUtil;
import org.gdal.gdal.Band;
import org.gdal.gdal.Dataset;
import org.gdal.gdal.Driver;
import org.gdal.gdal.gdal;
import org.gdal.gdalconst.gdalconst;
import org.gdal.gdalconst.gdalconstConstants;
import org.gdal.ogr.Feature;
import org.gdal.ogr.FieldDefn;
import org.gdal.ogr.Layer;
import org.gdal.ogr.ogr;
import org.gdal.osr.SpatialReference;
import java.io.File;
/**
* tiff文件转矢量文件
* @return 默认返回shp矢量文件
隐藏的会生成shp文件同名的zip压缩文件
*/
public static String tiffConvertShp(String inRaster) {
String outShp = inRaster.replace(".tif",".shp");
//载入栅格,读取相关信息
Dataset dataset = gdal.Open(inRaster, gdalconstConstants.GA_ReadOnly);
Band band = dataset.GetRasterBand(1);//栅格转矢量需要的波段信息
SpatialReference prj = new SpatialReference();
if (!dataset.GetProjectionRef().isEmpty()) {
prj.ImportFromWkt(dataset.GetProjectionRef());//栅格数据的坐标系作为矢量化后的坐标系
}
//创建输出矢量
String fileName = outShp.substring(outShp.lastIndexOf("\") + 1);//带后缀的文件名
String name = fileName.substring(0, fileName.lastIndexOf("."));//不带后缀
Driver driver = gdal.GetDriverByName("ESRI Shapefile");
Dataset create = driver.Create(outShp, dataset.getRasterXSize(), dataset.getRasterYSize(), 1, gdalconst.GDT_Byte);
Layer layer = create.CreateLayer(name, prj);
FieldDefn field = new FieldDefn("value", ogr.OFTReal);//创建一个字段用来存储栅格的像素值
layer.CreateField(field);
//矢量化
gdal.Polygonize(band, null, layer, 0);
Feature feature = layer.GetNextFeature();
//删除无用要素
while (null!=feature){
int value = feature.GetFieldAsInteger("value");
if(value<1||value>4){
layer.DeleteFeature(feature.GetFID());
}
feature=layer.GetNextFeature();
}
layer.SyncToDisk();
File[] strings = new File[4];
strings[0]=new File(outShp);
strings[1]=new File(outShp.replace(".shp",".dbf"));
strings[2]=new File(outShp.replace(".shp",".prj"));
strings[3]=new File(outShp.replace(".shp",".shx"));
ZipUtil.zip(new File(outShp.replace(".shp", ".zip")), false, strings);
dataset.delete();
create.delete();
return outShp;
}

最后

以上就是疯狂老鼠为你收集整理的java通过gdal把单波段tiff文件转换为shp矢量文件并压缩的全部内容,希望文章能够帮你解决java通过gdal把单波段tiff文件转换为shp矢量文件并压缩所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部