
1. 打开影像文件
public static GeoTiffReader getImageReader(String iamge){
Hints tiffHints = new Hints();
tiffHints.add(new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE));
tiffHints.add(new Hints(Hints.DEFAULT_COORDINATE_REFERENCE_SYSTEM, DefaultGeographicCRS.WGS84));
try{
File file = new File(iamge);
GeoTiffReader tmpTif = new GeoTiffReader(file,tiffHints);
return tmpTif;
}catch (Exception e){
e.printStackTrace();
return null;
}
} 2. 写入快数据
//noData获取
double nodata = reader.read(null).getSampleDimension(0).getNoDataValues()[0];
//scalex,scaley 像元获取
AffineTransform trs = (AffineTransform)reader.read(null).getGridGeometry().getGridToCRS();
metaInfo.setScaleX(trs.getScaleX());
metaInfo.setScaleY(trs.getScaleY());
float[] tmpDatas = new float[widthX*heightY];
metaInfo.getSplitGrid().getPixels(metaInfo.getSplitIdxX(),metaInfo.getSplitIdxY(),widthX,heightY,tmpDatas);
for(int row=0; row <heightY; row++){
for(int col= 0; col<widthX; col++){
if(tmpDatas[row*widthX+col] != metaInfo.getNoData()){
newGrid[row+startY][col+startX] = tmpDatas[row*widthX+col];
}
}
}3. 保存影像文件
GridSampleDimension[] dimensions = metaImages.get(0).getReader().read(null).getSampleDimensions();
Envelope2D mergedEnvelope = new Envelope2D(metaImages.get(0).getReader().getCoordinateReferenceSystem(),minX,minY,maxX - minX,maxY - minY);
GridCoverage2D outputCoverage = ImageUtils.customCreate("merge",newGrid,mergedEnvelope,dimensions);
GeoTiffWriter writer = new GeoTiffWriter(new File(dstFile));
writer.write(outputCoverage, null);
writer.dispose();