support read_dataframe function for micaps 3 dataset

This commit is contained in:
wyq 2022-11-28 16:47:50 +08:00
parent 2eac750a76
commit 15b2c381b4
3 changed files with 72 additions and 12 deletions

View File

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

View File

@ -14,6 +14,7 @@
package org.meteoinfo.data.meteodata.micaps;
import org.meteoinfo.common.Extent;
import org.meteoinfo.common.MIMath;
import org.meteoinfo.common.util.JDateUtil;
import org.meteoinfo.data.StationData;
import org.meteoinfo.data.dimarray.DimArray;
@ -33,10 +34,15 @@ import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.meteoinfo.data.meteodata.MeteoDataType;
import org.meteoinfo.dataframe.Column;
import org.meteoinfo.dataframe.ColumnIndex;
import org.meteoinfo.dataframe.DataFrame;
import org.meteoinfo.dataframe.Index;
import org.meteoinfo.ndarray.Array;
import org.meteoinfo.ndarray.ArrayString;
import org.meteoinfo.ndarray.DataType;
import org.meteoinfo.data.meteodata.Attribute;
import org.meteoinfo.ndarray.math.ArrayMath;
/**
*
@ -270,6 +276,58 @@ public class MICAPS3DataInfo extends DataInfo implements IStationDataInfo {
return r;
}
/**
* Read data frame
*
* @return Data frame
*/
public DataFrame readDataFrame() {
List<Array> data = new ArrayList<>();
ColumnIndex columns = new ColumnIndex();
DataType dtype;
for (String vName : this._fieldList) {
switch (vName) {
case "Stid":
dtype = DataType.STRING;
break;
default:
dtype = DataType.FLOAT;
break;
}
columns.add(new Column(vName, dtype));
data.add(Array.factory(dtype, new int[]{_dataList.size()}));
}
List<String> idxList = new ArrayList<>();
Array dd;
for (int i = 0; i < _dataList.size(); i++) {
List<String> dataList = _dataList.get(i);
idxList.add(dataList.get(0));
for (int j = 0; j < data.size(); j++) {
dd = (Array) data.get(j);
switch (dd.getDataType()) {
case STRING:
dd.setString(i, dataList.get(j));
break;
case FLOAT:
try {
dd.setFloat(i, Float.parseFloat(dataList.get(j)));
} catch (Exception e) {
dd.setFloat(i, Float.NaN);
}
break;
}
}
}
for (Array a : data){
ArrayMath.missingToNaN(a, 9999);
}
Index index = Index.factory(idxList);
DataFrame df = new DataFrame(data, index, columns);
return df;
}
@Override
public StationData getStationData(int timeIdx, String varName, int levelIdx) {
int varIdx = this.getVariableIndex(varName);

View File

@ -1,33 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MeteoInfo File="milconfig.xml" Type="configurefile">
<Path OpenPath="D:\Working\MIScript\Jython\mis\map\webmap">
<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\map"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\text"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\volume"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\contour"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\scatter"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\micaps"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math\linalg"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\webmap"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\volume"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\surf"/>
<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\LaSW\airship\sounding.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\norm_1.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\map\webmap\air_path.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\map\webmap\webmap_1.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_3.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_3-2.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_3_dataframe_1.py"/>
</OpenedFiles>
<RecentFiles>
<RecentFile File="D:\Working\MIScript\Jython\mis\LaSW\airship\sounding.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\norm_1.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\map\webmap\air_path.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\map\webmap\webmap_1.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_3.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_3-2.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\micaps\micaps_3_dataframe_1.py"/>
</RecentFiles>
</File>
<Font>