bugfix for micaps 4 data file reading

This commit is contained in:
wyq 2025-06-06 10:56:14 +08:00
parent 2f830b50c4
commit a67293bf8e
5 changed files with 58 additions and 25 deletions

View File

@ -69,7 +69,7 @@ import java.util.zip.ZipInputStream;
public static String getVersion() {
String version = GlobalUtil.class.getPackage().getImplementationVersion();
if (version == null || version.equals("")) {
version = "4.0.2";
version = "4.0.3";
}
return version;
}

View File

@ -0,0 +1,25 @@
package org.meteoinfo.common.util;
public class NumberUtil {
/**
* Check if the string is an integer
*
* @param str The string
* @return Is an integer or not
*/
public static boolean isInteger(String str) {
return str.matches("-?\\d+");
}
/**
* Check if the string is a decimal
*
* @param str The string
* @return Is a decimal or not
*/
public static boolean isDecimal(String str) {
return str.matches("-?\\d*\\.\\d+");
}
}

View File

@ -13,8 +13,10 @@
*/
package org.meteoinfo.data.meteodata.micaps;
import org.apache.commons.lang3.math.NumberUtils;
import org.meteoinfo.common.MIMath;
import org.meteoinfo.common.util.JDateUtil;
import org.meteoinfo.common.util.NumberUtil;
import org.meteoinfo.data.GridData;
import org.meteoinfo.data.dimarray.DimArray;
import org.meteoinfo.data.meteodata.DataInfo;
@ -57,7 +59,7 @@ public class MICAPS4DataInfo extends DataInfo implements IGridDataInfo {
private double[] _yArray;
private int _headLineNum;
private boolean _yReverse = false;
private int _preHours;
private float _preHours;
private int _level;
// </editor-fold>
// <editor-fold desc="Constructor">
@ -98,9 +100,9 @@ public class MICAPS4DataInfo extends DataInfo implements IGridDataInfo {
dataList.add(dataArray[i]);
}
}
if (dataList.size() < 21) {
if (dataList.size() < 17) {
for (n = 0; n <= 10; n++) {
if (dataList.size() < 21) {
if (dataList.size() < 17) {
aLine = sr.readLine().trim();
dataArray = aLine.split("\\s+");
for (i = 0; i < dataArray.length; i++) {
@ -125,11 +127,17 @@ public class MICAPS4DataInfo extends DataInfo implements IGridDataInfo {
year = 1900 + year;
}
}
_preHours = Integer.parseInt(dataList.get(idx + 4));
LocalDateTime time = LocalDateTime.of(year, Integer.parseInt(dataList.get(idx + 1)),
Integer.parseInt(dataList.get(idx + 2)),
Integer.parseInt(dataList.get(idx + 3)), 0, 0);
time = time.plusHours(_preHours);
String preHourStr = dataList.get(idx + 4);
if (NumberUtil.isInteger(preHourStr)) {
_preHours = Integer.parseInt(preHourStr);
time = time.plusHours((int) _preHours);
} else {
_preHours = Float.parseFloat(preHourStr);
time = time.plusMinutes((int) (_preHours * 60));
}
_level = Integer.parseInt(dataList.get(idx + 5));
float XDelt = Float.parseFloat(dataList.get(idx + 6));
@ -140,16 +148,16 @@ public class MICAPS4DataInfo extends DataInfo implements IGridDataInfo {
float YMax = Float.parseFloat(dataList.get(idx + 11));
int XNum = Integer.parseInt(dataList.get(idx + 12));
int YNum = Integer.parseInt(dataList.get(idx + 13));
float contourDelt = Float.parseFloat(dataList.get(idx + 14));
/*float contourDelt = Float.parseFloat(dataList.get(idx + 14));
float contourSValue = Float.parseFloat(dataList.get(idx + 15));
float contourEValue = Float.parseFloat(dataList.get(idx + 16));
float smoothCo = Float.parseFloat(dataList.get(idx + 17));
float boldValue = Float.parseFloat(dataList.get(idx + 18));
boolean isLonLat;
if (dataList.get(idx + 16).equals("-1") || dataList.get(idx + 16).equals("-2") || dataList.get(idx + 16).equals("-3")) {
isLonLat = false;
} else {
isLonLat = true;
float boldValue = Float.parseFloat(dataList.get(idx + 18));*/
boolean isLonLat = true;
if (dataList.size() >= 20) {
if (dataList.get(idx + 16).equals("-1") || dataList.get(idx + 16).equals("-2") || dataList.get(idx + 16).equals("-3")) {
isLonLat = false;
}
}
_xArray = new double[XNum];
for (i = 0; i < XNum; i++) {
@ -218,7 +226,7 @@ public class MICAPS4DataInfo extends DataInfo implements IGridDataInfo {
public String generateInfoText() {
String dataInfo;
dataInfo = "Description: " + _description;
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00");
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
dataInfo += System.getProperty("line.separator") + "Time: " + format.format(this.getTimes().get(0));
dataInfo += System.getProperty("line.separator") + super.generateInfoText();

View File

@ -1,32 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MeteoInfo File="milconfig.xml" Type="configurefile">
<Path OpenPath="D:\Working\MIScript\Jython\mis\io\burf">
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\surf"/>
<Path OpenPath="D:\Working\MIScript\Jython\mis\io\micaps">
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\json"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\webmap"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\wind"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\grib"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\netcdf"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\zarr"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\calipso"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\burf"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\ascat"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\micaps"/>
</Path>
<File>
<OpenedFiles>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\zarr\icon_2.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\zarr\zarr_1.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\satellite\calipso\CALIPSO_L1.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\satellite\ascat\ascat_1.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_4_11.py"/>
</OpenedFiles>
<RecentFiles>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\zarr\icon_2.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\zarr\zarr_1.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\satellite\calipso\CALIPSO_L1.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\satellite\ascat\ascat_1.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_4_11.py"/>
</RecentFiles>
</File>
<Font>

View File

@ -35,7 +35,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<revision>4.0.2</revision>
<revision>4.0.3</revision>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<maven.compiler.release>8</maven.compiler.release>