• 大小: 10.83MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-06
  • 语言: Java
  • 标签: .nc  tiff  

资源简介

基于netcdfAll-4.2.jar 读取气象科学数据(.nc格式)文件,解析数据内容后,通过GDAL解析生成tiff文件,tiff文件的灰度值就是对于气象科学数据的监测值,基于tiff数据,结合gis软件,可以生产在b/s浏览的地图图层,可实现基于地图,展示气象科学数据。

资源截图

代码片段和文件信息

import java.io.IOException;

import org.gdal.gdal.Dataset;
import org.gdal.gdal.gdal;
import org.gdal.osr.osr;

import ucar.ma2.ArrayDouble;
import ucar.ma2.ArrayFloat;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import util.GdalUtil;

public class NcData {

public static void main(String args[]) throws Exception {

String filename = “E://项目/36国家山洪灾害/气象nc数据展示/小时雨量/Z_SURF_C_BABJ_20170809044642_P_CMPA_RT_CHN_0P05_HOR-PRE-2017080904.nc“;
String fileout = “E:/test/A.tif“;

float[] rainIn = null;
double[] latsIn = null;
double[] lonsIn = null;
NetcdfFile dataFile = null;
try {
dataFile = NetcdfFile.open(filename null);
Variable latVar = dataFile.findVariable(“latitude“);
if (latVar == null) {
System.out.println(“Cant find Variable latitude“);
return;
}
Variable lonVar = dataFile.findVariable(“longitude“);
if (lonVar == null) {
System.out.println(“Cant find Variable longitude“);
return;
}

Variable rainVar = dataFile.findVariable(“rain“);
if (rainVar == null) {
System.out.println(“Cant find Variable rain“);
return;
}

if (latVar.getDimensions().size() != 1) {
System.out.println(“ fail to get the dimensions of variable latitude“);
return;
}

// Read the latitude and longitude coordinate variables into arrays
// latsIn and lonsIn.

ArrayDouble.D1 latArray;
ArrayDouble.D1 lonArray;

latArray = (ArrayDouble.D1) latVar.read();
lonArray = (ArrayDouble.D1) lonVar.read();


int[] shape = latArray.getShape();
latsIn = new  double[shape[0]];
for (int i = 0; i < shape[0]; i++) {
latsIn[i] = latArray.get(i);
}

shape = lonArray.getShape();
lonsIn = new double[shape[0]];
for (int j = 0; j < shape[0]; j++) {
lonsIn[j] = lonArray.get(j);
}

ArrayFloat.D3 rainArray;
rainArray = (ArrayFloat.D3) rainVar.read();
int xSize = lonsIn.length;
int ySize = latsIn.length;
rainIn =new float[xSize*ySize];
for (int i = 0; i < ySize; i++) {
for (int j = 0; j < xSize; j++) {
rainIn[(ySize-i-1)*xSize+ j] = rainArray.get(0i j);
}
}

GdalUtil.gdalInit();

org.gdal.gdal.Driver driver = gdal.GetDriverByName(“GTiff“);
double xllcorner = lonsIn[0];
double xcellsize = (lonsIn[lonsIn.length-1] - lonsIn[0])/xSize;
double ycellsize = (latsIn[latsIn.length-1] - latsIn[0])/ySize;
double yllcorner =latsIn[latsIn.length-1] ;
Dataset dataset = driver.Create(fileout xSize ySize 1 gdal.GetDataTypeByName(“Float32“));
dataset.SetGeoTransform(new double[]{xllcornerxcellsize0yllcorner0-ycellsize});
dataset.SetProjection(osr.SRS_WKT_WGS84);
dataset.GetRasterBand(1).SetNoDataValue(0);
dataset.GetRasterBand(1).WriteRaster(0 0xSize ySize  rainIn);
dataset.FlushCache();
String gdalwarpPath = “D:/java/gdalwarp.exe --config GDAL_FILENAME_IS_UTF8 NO“; //通过配置文件配置
String chinaRegion = “E:/te

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件   11880607  2017-08-11 17:19  netcdfAll-4.2.jar

     文件     134672  2017-08-21 13:40  gdal.jar

     文件       3710  2017-08-21 15:30  NcData.java

----------- ---------  ---------- -----  ----

             12018989                    3


评论

共有 条评论