mirror of
https://github.com/meteoinfo/MeteoInfo.git
synced 2025-12-08 20:36:05 +00:00
add create trajectory layer functions in DrawMeteoData class
This commit is contained in:
parent
57bee7404c
commit
ee8a2f1769
13
.idea/libraries/Maven__org_freehep_freehep_util_2_0_2.xml
generated
Normal file
13
.idea/libraries/Maven__org_freehep_freehep_util_2_0_2.xml
generated
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="Maven: org.freehep:freehep-util:2.0.2">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/freehep/freehep-util/2.0.2/freehep-util-2.0.2.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/freehep/freehep-util/2.0.2/freehep-util-2.0.2-javadoc.jar!/" />
|
||||||
|
</JAVADOC>
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/freehep/freehep-util/2.0.2/freehep-util-2.0.2-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
@ -1,13 +1,13 @@
|
|||||||
<component name="libraryTable">
|
<component name="libraryTable">
|
||||||
<library name="Maven: org.jogamp.gluegen:gluegen-rt:natives-android-aarch64:2.3.2">
|
<library name="Maven: org.freehep:freehep-util:2.0.2">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-natives-android-aarch64.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/freehep/freehep-util/2.0.2/freehep-util-2.0.2.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC>
|
<JAVADOC>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-javadoc.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/freehep/freehep-util/2.0.2/freehep-util-2.0.2-javadoc.jar!/" />
|
||||||
</JAVADOC>
|
</JAVADOC>
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jogamp/gluegen/gluegen-rt/2.3.2/gluegen-rt-2.3.2-sources.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/org/freehep/freehep-util/2.0.2/freehep-util-2.0.2-sources.jar!/" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
||||||
@ -13,6 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.meteoinfo.data.meteodata;
|
package org.meteoinfo.data.meteodata;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
|
|||||||
@ -0,0 +1,51 @@
|
|||||||
|
package org.meteoinfo.data.meteodata;
|
||||||
|
|
||||||
|
import org.meteoinfo.table.DataTable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ITrajDataInfo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get DataTable list
|
||||||
|
* @return DataTable list
|
||||||
|
*/
|
||||||
|
public abstract List<DataTable> getDataTables();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get TrajectoryInfo list
|
||||||
|
* @return TrajectoryInfo list
|
||||||
|
*/
|
||||||
|
public abstract List<TrajectoryInfo> getTrajInfoList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get X coordinate variable name
|
||||||
|
* @return X coordinate variable name
|
||||||
|
*/
|
||||||
|
public abstract String getXVarName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Y coordinate variable name
|
||||||
|
* @return Y coordinate variable name
|
||||||
|
*/
|
||||||
|
public abstract String getYVarName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Z coordinate variable name
|
||||||
|
* @return Z coordinate variable name
|
||||||
|
*/
|
||||||
|
public abstract String getZVarName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get time coordinate variable name
|
||||||
|
* @return Time coordinate variable name
|
||||||
|
*/
|
||||||
|
public abstract String getTVarName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get variables
|
||||||
|
* @return Variables
|
||||||
|
*/
|
||||||
|
public abstract List<Variable> getVariables();
|
||||||
|
|
||||||
|
}
|
||||||
@ -11,7 +11,7 @@
|
|||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*/
|
*/
|
||||||
package org.meteoinfo.data.meteodata.hysplit;
|
package org.meteoinfo.data.meteodata;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@ -774,7 +774,7 @@ public class Variable {
|
|||||||
* @param reverse If is reverse
|
* @param reverse If is reverse
|
||||||
*/
|
*/
|
||||||
public void setDimension(String tstr, List<Number> values, boolean reverse) {
|
public void setDimension(String tstr, List<Number> values, boolean reverse) {
|
||||||
DimensionType dType = DimensionType.Other;
|
DimensionType dType = DimensionType.OTHER;
|
||||||
switch (tstr) {
|
switch (tstr) {
|
||||||
case "X":
|
case "X":
|
||||||
dType = DimensionType.X;
|
dType = DimensionType.X;
|
||||||
@ -804,7 +804,7 @@ public class Variable {
|
|||||||
* @param reverse If is reverse
|
* @param reverse If is reverse
|
||||||
*/
|
*/
|
||||||
public void setDimension(String tstr, List<Number> values, boolean reverse, int index) {
|
public void setDimension(String tstr, List<Number> values, boolean reverse, int index) {
|
||||||
DimensionType dType = DimensionType.Other;
|
DimensionType dType = DimensionType.OTHER;
|
||||||
switch (tstr) {
|
switch (tstr) {
|
||||||
case "X":
|
case "X":
|
||||||
dType = DimensionType.X;
|
dType = DimensionType.X;
|
||||||
@ -835,7 +835,7 @@ public class Variable {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aDim.getDimType() == DimensionType.Other) {
|
if (aDim.getDimType() == DimensionType.OTHER) {
|
||||||
this.addDimension(aDim);
|
this.addDimension(aDim);
|
||||||
} else {
|
} else {
|
||||||
boolean hasDim = false;
|
boolean hasDim = false;
|
||||||
@ -922,7 +922,7 @@ public class Variable {
|
|||||||
public boolean hasXtrackDimension() {
|
public boolean hasXtrackDimension() {
|
||||||
boolean has = false;
|
boolean has = false;
|
||||||
for (int i = 0; i < getDimNumber(); i++) {
|
for (int i = 0; i < getDimNumber(); i++) {
|
||||||
if (((Dimension) this.getDimension(i)).getDimType() == DimensionType.Xtrack) {
|
if (((Dimension) this.getDimension(i)).getDimType() == DimensionType.X_TRACK) {
|
||||||
has = true;
|
has = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1048,7 +1048,7 @@ public class Variable {
|
|||||||
if (this.getDimNumber() > var.getDimNumber()) {
|
if (this.getDimNumber() > var.getDimNumber()) {
|
||||||
for (int i = var.getDimNumber(); i < this.getDimNumber(); i++) {
|
for (int i = var.getDimNumber(); i < this.getDimNumber(); i++) {
|
||||||
Dimension dim = (Dimension) this.getDimension(i);
|
Dimension dim = (Dimension) this.getDimension(i);
|
||||||
if (dim.getDimType() == DimensionType.Other) {
|
if (dim.getDimType() == DimensionType.OTHER) {
|
||||||
return dim;
|
return dim;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1152,7 +1152,7 @@ public class Variable {
|
|||||||
* @param values Dimension values
|
* @param values Dimension values
|
||||||
*/
|
*/
|
||||||
public void addDimension(String tstr, List<Number> values) {
|
public void addDimension(String tstr, List<Number> values) {
|
||||||
DimensionType dType = DimensionType.Other;
|
DimensionType dType = DimensionType.OTHER;
|
||||||
switch (tstr) {
|
switch (tstr) {
|
||||||
case "X":
|
case "X":
|
||||||
dType = DimensionType.X;
|
dType = DimensionType.X;
|
||||||
|
|||||||
@ -342,7 +342,7 @@ public class AWXDataInfo extends DataInfo implements IGridDataInfo, IStationData
|
|||||||
VarList.add("LastRow");
|
VarList.add("LastRow");
|
||||||
VarList.add("LastCol");
|
VarList.add("LastCol");
|
||||||
VarList.add("BrightTemp");
|
VarList.add("BrightTemp");
|
||||||
Dimension stdim = new Dimension(DimensionType.Other);
|
Dimension stdim = new Dimension(DimensionType.OTHER);
|
||||||
double[] values = new double[this._numDataRecord];
|
double[] values = new double[this._numDataRecord];
|
||||||
stdim.setValues(values);
|
stdim.setValues(values);
|
||||||
this.addDimension(stdim);
|
this.addDimension(stdim);
|
||||||
|
|||||||
@ -80,7 +80,7 @@ import org.meteoinfo.data.meteodata.Attribute;
|
|||||||
this.bandNum = this.geoTiff.getBandNum();
|
this.bandNum = this.geoTiff.getBandNum();
|
||||||
Dimension bDim = null;
|
Dimension bDim = null;
|
||||||
if (this.bandNum > 1){
|
if (this.bandNum > 1){
|
||||||
bDim = new Dimension(DimensionType.Other);
|
bDim = new Dimension(DimensionType.OTHER);
|
||||||
bDim.setValues(new double[this.bandNum]);
|
bDim.setValues(new double[this.bandNum]);
|
||||||
this.addDimension(bDim);
|
this.addDimension(bDim);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,10 +16,7 @@ package org.meteoinfo.data.meteodata.hysplit;
|
|||||||
import org.meteoinfo.common.DataConvert;
|
import org.meteoinfo.common.DataConvert;
|
||||||
import org.meteoinfo.common.PointD;
|
import org.meteoinfo.common.PointD;
|
||||||
import org.meteoinfo.common.util.JDateUtil;
|
import org.meteoinfo.common.util.JDateUtil;
|
||||||
import org.meteoinfo.data.meteodata.Attribute;
|
import org.meteoinfo.data.meteodata.*;
|
||||||
import org.meteoinfo.data.meteodata.DataInfo;
|
|
||||||
import org.meteoinfo.data.meteodata.MeteoDataType;
|
|
||||||
import org.meteoinfo.data.meteodata.Variable;
|
|
||||||
import org.meteoinfo.ndarray.Dimension;
|
import org.meteoinfo.ndarray.Dimension;
|
||||||
import org.meteoinfo.ndarray.DimensionType;
|
import org.meteoinfo.ndarray.DimensionType;
|
||||||
|
|
||||||
@ -50,7 +47,7 @@ import org.meteoinfo.ndarray.Section;
|
|||||||
*
|
*
|
||||||
* @author yaqiang
|
* @author yaqiang
|
||||||
*/
|
*/
|
||||||
public class HYSPLITTrajDataInfo extends DataInfo {
|
public class HYSPLITTrajDataInfo extends DataInfo implements ITrajDataInfo {
|
||||||
|
|
||||||
// <editor-fold desc="Variables">
|
// <editor-fold desc="Variables">
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -73,7 +70,7 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Information list of trajectories
|
/// Information list of trajectories
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<TrajectoryInfo> trajInfos;
|
private List<TrajectoryInfo> trajInfoList;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Number of variables
|
/// Number of variables
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -96,17 +93,43 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initVariables() {
|
private void initVariables() {
|
||||||
trajInfos = new ArrayList<>();
|
trajInfoList = new ArrayList<>();
|
||||||
varNames = new ArrayList<>();
|
varNames = new ArrayList<>();
|
||||||
trajNum = 0;
|
trajNum = 0;
|
||||||
inVarNames = new String[]{"time", "run_hour", "lat", "lon", "height"};
|
inVarNames = new String[]{"time", "run_hour", "lat", "lon", "height"};
|
||||||
}
|
}
|
||||||
// </editor-fold>
|
// </editor-fold>
|
||||||
// <editor-fold desc="Get Set Methods">
|
// <editor-fold desc="Get Set Methods">
|
||||||
|
@Override
|
||||||
|
public String getXVarName() {
|
||||||
|
return "lon";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getYVarName() {
|
||||||
|
return "lat";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getZVarName() {
|
||||||
|
return "height";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTVarName() {
|
||||||
|
return "time";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TrajectoryInfo> getTrajInfoList() {
|
||||||
|
return this.trajInfoList;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get data table list
|
* Get data table list
|
||||||
* @return Data table list
|
* @return Data table list
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public List<DataTable> getDataTables(){
|
public List<DataTable> getDataTables(){
|
||||||
return this.dataTables;
|
return this.dataTables;
|
||||||
}
|
}
|
||||||
@ -162,7 +185,7 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
aTrajInfo.startLat = Float.parseFloat(dataArray[4]);
|
aTrajInfo.startLat = Float.parseFloat(dataArray[4]);
|
||||||
aTrajInfo.startLon = Float.parseFloat(dataArray[5]);
|
aTrajInfo.startLon = Float.parseFloat(dataArray[5]);
|
||||||
aTrajInfo.startHeight = Float.parseFloat(dataArray[6]);
|
aTrajInfo.startHeight = Float.parseFloat(dataArray[6]);
|
||||||
trajInfos.add(aTrajInfo);
|
trajInfoList.add(aTrajInfo);
|
||||||
}
|
}
|
||||||
Dimension tdim = new Dimension(DimensionType.T);
|
Dimension tdim = new Dimension(DimensionType.T);
|
||||||
tdim.setValues(times);
|
tdim.setValues(times);
|
||||||
@ -176,20 +199,7 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
for (i = 0; i < varNum; i++) {
|
for (i = 0; i < varNum; i++) {
|
||||||
varNames.add(dataArray[i + 1]);
|
varNames.add(dataArray[i + 1]);
|
||||||
}
|
}
|
||||||
//Trajectory end point number
|
|
||||||
// endPointNum = 0;
|
|
||||||
// while (true) {
|
|
||||||
// aLine = sr.readLine();
|
|
||||||
// if (aLine == null) {
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// if (aLine.isEmpty()) {
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
// endPointNum += 1;
|
|
||||||
// }
|
|
||||||
sr.close();
|
sr.close();
|
||||||
//endPointNum = endPointNum / this.trajNum;
|
|
||||||
|
|
||||||
//Read data table list
|
//Read data table list
|
||||||
this.dataTables = this.readTable();
|
this.dataTables = this.readTable();
|
||||||
@ -201,11 +211,11 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Dimensions
|
//Dimensions
|
||||||
Dimension trajDim = new Dimension(DimensionType.Other);
|
Dimension trajDim = new Dimension(DimensionType.OTHER);
|
||||||
trajDim.setName("trajectory");
|
trajDim.setName("trajectory");
|
||||||
trajDim.setLength(this.trajNum);
|
trajDim.setLength(this.trajNum);
|
||||||
this.addDimension(trajDim);
|
this.addDimension(trajDim);
|
||||||
Dimension obsDim = new Dimension(DimensionType.Other);
|
Dimension obsDim = new Dimension(DimensionType.OTHER);
|
||||||
obsDim.setName("obs");
|
obsDim.setName("obs");
|
||||||
obsDim.setLength(this.endPointNum);
|
obsDim.setLength(this.endPointNum);
|
||||||
this.addDimension(obsDim);
|
this.addDimension(obsDim);
|
||||||
@ -214,6 +224,17 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
for (String vName : this.inVarNames) {
|
for (String vName : this.inVarNames) {
|
||||||
Variable var = new Variable();
|
Variable var = new Variable();
|
||||||
var.setName(vName);
|
var.setName(vName);
|
||||||
|
switch (vName) {
|
||||||
|
case "time":
|
||||||
|
var.setDataType(DataType.DATE);
|
||||||
|
break;
|
||||||
|
case "run_hour":
|
||||||
|
var.setDataType(DataType.INT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
var.setDataType(DataType.FLOAT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
var.addDimension(trajDim);
|
var.addDimension(trajDim);
|
||||||
var.addDimension(obsDim);
|
var.addDimension(obsDim);
|
||||||
var.addAttribute("long_name", vName);
|
var.addAttribute("long_name", vName);
|
||||||
@ -222,6 +243,7 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
for (String vName : this.varNames) {
|
for (String vName : this.varNames) {
|
||||||
Variable var = new Variable();
|
Variable var = new Variable();
|
||||||
var.setName(vName);
|
var.setName(vName);
|
||||||
|
var.setDataType(DataType.FLOAT);
|
||||||
var.addDimension(trajDim);
|
var.addDimension(trajDim);
|
||||||
var.addDimension(obsDim);
|
var.addDimension(obsDim);
|
||||||
var.addAttribute("long_name", vName);
|
var.addAttribute("long_name", vName);
|
||||||
@ -271,7 +293,7 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
}
|
}
|
||||||
dataInfo += System.getProperty("line.separator") + System.getProperty("line.separator") + "Trajectories:";
|
dataInfo += System.getProperty("line.separator") + System.getProperty("line.separator") + "Trajectories:";
|
||||||
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00");
|
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00");
|
||||||
for (TrajectoryInfo aTrajInfo : trajInfos) {
|
for (TrajectoryInfo aTrajInfo : trajInfoList) {
|
||||||
dataInfo += System.getProperty("line.separator") + " " + format.format(aTrajInfo.startTime)
|
dataInfo += System.getProperty("line.separator") + " " + format.format(aTrajInfo.startTime)
|
||||||
+ " " + String.valueOf(aTrajInfo.startLat) + " " + String.valueOf(aTrajInfo.startLon)
|
+ " " + String.valueOf(aTrajInfo.startLat) + " " + String.valueOf(aTrajInfo.startLon)
|
||||||
+ " " + String.valueOf(aTrajInfo.startHeight);
|
+ " " + String.valueOf(aTrajInfo.startHeight);
|
||||||
@ -371,7 +393,7 @@ public class HYSPLITTrajDataInfo extends DataInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
BufferedReader sr = new BufferedReader(new FileReader(new File(this.getFileName())));
|
BufferedReader sr = new BufferedReader(new FileReader(this.getFileName()));
|
||||||
String aLine;
|
String aLine;
|
||||||
String[] dataArray, tempArray;
|
String[] dataArray, tempArray;
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@ -121,7 +121,7 @@ public class MDFSDataInfo extends DataInfo implements IGridDataInfo, IStationDat
|
|||||||
zDim.setValues(new float[]{level});
|
zDim.setValues(new float[]{level});
|
||||||
this.setZDimension(zDim);
|
this.setZDimension(zDim);
|
||||||
this.addDimension(zDim);
|
this.addDimension(zDim);
|
||||||
Dimension stDim = new Dimension(DimensionType.Other);
|
Dimension stDim = new Dimension(DimensionType.OTHER);
|
||||||
stDim.setName("station");
|
stDim.setName("station");
|
||||||
float[] values = new float[numStation];
|
float[] values = new float[numStation];
|
||||||
for (int i = 0; i < numStation; i++) {
|
for (int i = 0; i < numStation; i++) {
|
||||||
|
|||||||
@ -122,7 +122,7 @@ public class MICAPS120DataInfo extends DataInfo implements IStationDataInfo {
|
|||||||
stNum += 1;
|
stNum += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dimension stdim = new Dimension(DimensionType.Other);
|
Dimension stdim = new Dimension(DimensionType.OTHER);
|
||||||
stdim.setShortName("station");
|
stdim.setShortName("station");
|
||||||
values = new double[stNum];
|
values = new double[stNum];
|
||||||
for (int i = 0; i < stNum; i++){
|
for (int i = 0; i < stNum; i++){
|
||||||
|
|||||||
@ -141,7 +141,7 @@ public class MICAPS1DataInfo extends DataInfo implements IStationDataInfo {
|
|||||||
_stNum = Integer.parseInt(dataArray[0]);
|
_stNum = Integer.parseInt(dataArray[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Dimension stdim = new Dimension(DimensionType.Other);
|
Dimension stdim = new Dimension(DimensionType.OTHER);
|
||||||
stdim.setShortName("station");
|
stdim.setShortName("station");
|
||||||
values = new double[_stNum];
|
values = new double[_stNum];
|
||||||
for (int i = 0; i < _stNum; i++) {
|
for (int i = 0; i < _stNum; i++) {
|
||||||
|
|||||||
@ -128,7 +128,7 @@ public class MICAPS2DataInfo extends DataInfo implements IStationDataInfo {
|
|||||||
Dimension zdim = new Dimension(DimensionType.Z);
|
Dimension zdim = new Dimension(DimensionType.Z);
|
||||||
zdim.setValues(new double[]{level});
|
zdim.setValues(new double[]{level});
|
||||||
this.setZDimension(zdim);
|
this.setZDimension(zdim);
|
||||||
Dimension stdim = new Dimension(DimensionType.Other);
|
Dimension stdim = new Dimension(DimensionType.OTHER);
|
||||||
stdim.setShortName("station");
|
stdim.setShortName("station");
|
||||||
values = new double[stNum];
|
values = new double[stNum];
|
||||||
for (i = 0; i < stNum; i++){
|
for (i = 0; i < stNum; i++){
|
||||||
|
|||||||
@ -140,7 +140,7 @@ public class MICAPS3DataInfo extends DataInfo implements IStationDataInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stNum = _dataList.size();
|
stNum = _dataList.size();
|
||||||
Dimension stdim = new Dimension(DimensionType.Other);
|
Dimension stdim = new Dimension(DimensionType.OTHER);
|
||||||
stdim.setShortName("station");
|
stdim.setShortName("station");
|
||||||
double[] values = new double[stNum];
|
double[] values = new double[stNum];
|
||||||
for (i = 0; i < stNum; i++){
|
for (i = 0; i < stNum; i++){
|
||||||
|
|||||||
@ -1,347 +1,470 @@
|
|||||||
/* Copyright 2012 Yaqiang Wang,
|
/* Copyright 2012 Yaqiang Wang,
|
||||||
* yaqiang.wang@gmail.com
|
* yaqiang.wang@gmail.com
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or modify it
|
* This library is free software; you can redistribute it and/or modify it
|
||||||
* under the terms of the GNU Lesser General Public License as published by
|
* under the terms of the GNU Lesser General Public License as published by
|
||||||
* the Free Software Foundation; either version 2.1 of the License, or (at
|
* the Free Software Foundation; either version 2.1 of the License, or (at
|
||||||
* your option) any later version.
|
* your option) any later version.
|
||||||
*
|
*
|
||||||
* This library is distributed in the hope that it will be useful, but
|
* This library is distributed in the hope that it will be useful, but
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
|
||||||
* General Public License for more details.
|
* General Public License for more details.
|
||||||
*/
|
*/
|
||||||
package org.meteoinfo.data.meteodata.micaps;
|
package org.meteoinfo.data.meteodata.micaps;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileReader;
|
||||||
import java.io.FileReader;
|
import java.io.IOException;
|
||||||
import java.io.IOException;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
||||||
import java.util.ArrayList;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.meteoinfo.common.PointD;
|
import org.meteoinfo.common.PointD;
|
||||||
import org.meteoinfo.common.util.JDateUtil;
|
import org.meteoinfo.common.util.JDateUtil;
|
||||||
import org.meteoinfo.data.meteodata.Attribute;
|
import org.meteoinfo.data.meteodata.*;
|
||||||
import org.meteoinfo.data.meteodata.DataInfo;
|
import org.meteoinfo.data.meteodata.hysplit.HYSPLITTrajDataInfo;
|
||||||
import org.meteoinfo.data.meteodata.MeteoDataType;
|
import org.meteoinfo.data.meteodata.TrajectoryInfo;
|
||||||
import org.meteoinfo.data.meteodata.Variable;
|
import org.meteoinfo.ndarray.*;
|
||||||
import org.meteoinfo.data.meteodata.hysplit.TrajectoryInfo;
|
import org.meteoinfo.table.ColumnData;
|
||||||
import org.meteoinfo.ndarray.Dimension;
|
import org.meteoinfo.table.DataColumn;
|
||||||
import org.meteoinfo.ndarray.DimensionType;
|
import org.meteoinfo.table.DataTable;
|
||||||
import org.meteoinfo.ndarray.Array;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @author yaqiang
|
||||||
* @author yaqiang
|
*/
|
||||||
*/
|
public class MICAPS7DataInfo extends DataInfo implements ITrajDataInfo {
|
||||||
public class MICAPS7DataInfo extends DataInfo {
|
|
||||||
|
|
||||||
// <editor-fold desc="Variables">
|
// <editor-fold desc="Variables">
|
||||||
public List<String> FileNames;
|
// Number of trajectories
|
||||||
/// <summary>
|
private int trajNum;
|
||||||
/// Number of meteorological files
|
// Information list of trajectories
|
||||||
/// </summary>
|
private List<TrajectoryInfo> trajInfoList;
|
||||||
public List<Integer> MeteoFileNums;
|
private String[] varNames;
|
||||||
/// <summary>
|
private int pointNum;
|
||||||
/// Number of trajectories
|
private List<DataTable> dataTables;
|
||||||
/// </summary>
|
private String[] inVarNames;
|
||||||
public int TrajeoryNumber;
|
// </editor-fold>
|
||||||
/// <summary>
|
// <editor-fold desc="Constructor">
|
||||||
/// Number of trajectories
|
|
||||||
/// </summary>
|
|
||||||
public List<Integer> TrajeoryNums;
|
|
||||||
/// <summary>
|
|
||||||
/// Trajectory direction - foreward or backward
|
|
||||||
/// </summary>
|
|
||||||
public List<String> TrajDirections;
|
|
||||||
/// <summary>
|
|
||||||
/// Vertical motion
|
|
||||||
/// </summary>
|
|
||||||
public List<String> VerticalMotions;
|
|
||||||
/// <summary>
|
|
||||||
/// Information list of trajectories
|
|
||||||
/// </summary>
|
|
||||||
public List<List<TrajectoryInfo>> TrajInfos;
|
|
||||||
/// <summary>
|
|
||||||
/// Number of variables
|
|
||||||
/// </summary>
|
|
||||||
public List<Integer> VarNums;
|
|
||||||
/// <summary>
|
|
||||||
/// Variable name list
|
|
||||||
/// </summary>
|
|
||||||
public List<List<String>> VarNames;
|
|
||||||
// </editor-fold>
|
|
||||||
// <editor-fold desc="Constructor">
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
public MICAPS7DataInfo() {
|
public MICAPS7DataInfo() {
|
||||||
this.setDataType(MeteoDataType.MICAPS_7);
|
this.setDataType(MeteoDataType.MICAPS_7);
|
||||||
initVariables();
|
initVariables();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initVariables() {
|
private void initVariables() {
|
||||||
FileNames = new ArrayList<>();
|
varNames = new String[]{"time", "run_hour", "lon", "lat", "wind_speed", "pressure", "radius_7",
|
||||||
MeteoFileNums = new ArrayList<>();
|
"radius_10", "move_dir", "move_speed"};
|
||||||
TrajeoryNums = new ArrayList<>();
|
inVarNames = new String[]{"time", "run_hour", "lon", "lat"};
|
||||||
TrajDirections = new ArrayList<>();
|
}
|
||||||
VerticalMotions = new ArrayList<>();
|
// </editor-fold>
|
||||||
TrajInfos = new ArrayList<>();
|
// <editor-fold desc="Get Set Methods">
|
||||||
VarNums = new ArrayList<>();
|
|
||||||
VarNames = new ArrayList<>();
|
|
||||||
TrajeoryNumber = 0;
|
|
||||||
}
|
|
||||||
// </editor-fold>
|
|
||||||
// <editor-fold desc="Get Set Methods">
|
|
||||||
// </editor-fold>
|
|
||||||
// <editor-fold desc="Methods">
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readDataInfo(String fileName) {
|
public String getXVarName() {
|
||||||
String[] trajFiles = new String[1];
|
return "lon";
|
||||||
trajFiles[0] = fileName;
|
}
|
||||||
try {
|
|
||||||
readDataInfo(trajFiles);
|
|
||||||
} catch (IOException ex) {
|
|
||||||
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void readDataInfo(String[] trajFiles) throws IOException {
|
@Override
|
||||||
this.setFileName(trajFiles[0]);
|
public String getYVarName() {
|
||||||
String aLine;
|
return "lat";
|
||||||
String[] dataArray;
|
}
|
||||||
int t;
|
|
||||||
|
|
||||||
initVariables();
|
@Override
|
||||||
List<Double> times = new ArrayList<>();
|
public String getZVarName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
for (t = 0; t < trajFiles.length; t++) {
|
@Override
|
||||||
String aFile = trajFiles[t];
|
public String getTVarName() {
|
||||||
FileNames.add(aFile);
|
return "time";
|
||||||
|
}
|
||||||
|
|
||||||
BufferedReader sr = new BufferedReader(new FileReader(new File(aFile)));
|
@Override
|
||||||
|
public List<TrajectoryInfo> getTrajInfoList() {
|
||||||
|
return this.trajInfoList;
|
||||||
|
}
|
||||||
|
|
||||||
TrajectoryInfo aTrajInfo = new TrajectoryInfo();
|
/**
|
||||||
List<TrajectoryInfo> trajInfoList = new ArrayList<>();
|
* Get data table list
|
||||||
sr.readLine();
|
*
|
||||||
aLine = sr.readLine();
|
* @return Data table list
|
||||||
int trajIdx = -1;
|
*/
|
||||||
int trajNum = 0;
|
@Override
|
||||||
while (aLine != null) {
|
public List<DataTable> getDataTables() {
|
||||||
if (aLine.trim().isEmpty()) {
|
return this.dataTables;
|
||||||
aLine = sr.readLine();
|
}
|
||||||
continue;
|
// </editor-fold>
|
||||||
}
|
// <editor-fold desc="Methods">
|
||||||
|
|
||||||
dataArray = aLine.split("\\s+");
|
@Override
|
||||||
if (dataArray.length == 4) {
|
public void readDataInfo(String fileName) {
|
||||||
aTrajInfo = new TrajectoryInfo();
|
this.setFileName(fileName);
|
||||||
aTrajInfo.trajName = dataArray[0];
|
String aLine;
|
||||||
aTrajInfo.trajID = dataArray[1];
|
String[] dataArray;
|
||||||
aTrajInfo.trajCenter = dataArray[2];
|
int t;
|
||||||
trajIdx = -1;
|
|
||||||
trajNum += 1;
|
|
||||||
} else if (dataArray.length == 13) {
|
|
||||||
trajIdx += 1;
|
|
||||||
if (trajIdx == 0) {
|
|
||||||
int year = Integer.parseInt(dataArray[0]);
|
|
||||||
if (year < 100) {
|
|
||||||
if (year < 50) {
|
|
||||||
year = 2000 + year;
|
|
||||||
} else {
|
|
||||||
year = 1900 + year;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LocalDateTime tt = LocalDateTime.of(year, Integer.parseInt(dataArray[1]),
|
|
||||||
Integer.parseInt(dataArray[2]), Integer.parseInt(dataArray[3]), 0, 0);
|
|
||||||
if (times.isEmpty()) {
|
|
||||||
times.add(JDateUtil.toOADate(tt));
|
|
||||||
}
|
|
||||||
|
|
||||||
aTrajInfo.startTime = tt;
|
initVariables();
|
||||||
aTrajInfo.startLat = Float.parseFloat(dataArray[6]);
|
List<Double> times = new ArrayList<>();
|
||||||
aTrajInfo.startLon = Float.parseFloat(dataArray[5]);
|
this.pointNum = 0;
|
||||||
trajInfoList.add(aTrajInfo);
|
int pn;
|
||||||
}
|
|
||||||
}
|
|
||||||
aLine = sr.readLine();
|
|
||||||
}
|
|
||||||
TrajeoryNums.add(trajNum);
|
|
||||||
TrajeoryNumber += TrajeoryNums.get(t);
|
|
||||||
TrajInfos.add(trajInfoList);
|
|
||||||
|
|
||||||
Dimension tdim = new Dimension(DimensionType.T);
|
BufferedReader sr = null;
|
||||||
tdim.setValues(times);
|
try {
|
||||||
this.setTimeDimension(tdim);
|
sr = new BufferedReader(new FileReader(fileName));
|
||||||
|
|
||||||
sr.close();
|
this.trajInfoList = new ArrayList<>();
|
||||||
|
TrajectoryInfo aTrajInfo = new TrajectoryInfo();
|
||||||
|
sr.readLine();
|
||||||
|
aLine = sr.readLine();
|
||||||
|
int trajIdx = -1;
|
||||||
|
this.trajNum = 0;
|
||||||
|
while (aLine != null) {
|
||||||
|
if (aLine.trim().isEmpty()) {
|
||||||
|
aLine = sr.readLine();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Variable var = new Variable();
|
dataArray = aLine.split("\\s+");
|
||||||
var.setName("Traj");
|
if (dataArray.length == 4) {
|
||||||
var.setStation(true);
|
aTrajInfo = new TrajectoryInfo();
|
||||||
var.setDimension(tdim);
|
aTrajInfo.trajName = dataArray[0];
|
||||||
List<Variable> variables = new ArrayList<>();
|
aTrajInfo.trajID = dataArray[1];
|
||||||
variables.add(var);
|
aTrajInfo.trajCenter = dataArray[2];
|
||||||
this.setVariables(variables);
|
pn = Integer.parseInt(dataArray[3]);
|
||||||
|
if (this.pointNum < pn)
|
||||||
|
this.pointNum = pn;
|
||||||
|
trajIdx = -1;
|
||||||
|
trajNum += 1;
|
||||||
|
} else if (dataArray.length == 13) {
|
||||||
|
trajIdx += 1;
|
||||||
|
if (trajIdx == 0) {
|
||||||
|
int year = Integer.parseInt(dataArray[0]);
|
||||||
|
if (year < 100) {
|
||||||
|
if (year < 50) {
|
||||||
|
year = 2000 + year;
|
||||||
|
} else {
|
||||||
|
year = 1900 + year;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LocalDateTime tt = LocalDateTime.of(year, Integer.parseInt(dataArray[1]),
|
||||||
|
Integer.parseInt(dataArray[2]), Integer.parseInt(dataArray[3]), 0, 0);
|
||||||
|
if (times.isEmpty()) {
|
||||||
|
times.add(JDateUtil.toOADate(tt));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
aTrajInfo.startTime = tt;
|
||||||
}
|
aTrajInfo.startLat = Float.parseFloat(dataArray[6]);
|
||||||
|
aTrajInfo.startLon = Float.parseFloat(dataArray[5]);
|
||||||
/**
|
trajInfoList.add(aTrajInfo);
|
||||||
* Get global attributes
|
}
|
||||||
* @return Global attributes
|
}
|
||||||
*/
|
aLine = sr.readLine();
|
||||||
@Override
|
}
|
||||||
public List<Attribute> getGlobalAttributes(){
|
sr.close();
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
//Dimensions
|
||||||
public String generateInfoText() {
|
Dimension trajDim = new Dimension(DimensionType.OTHER);
|
||||||
String dataInfo = "";
|
trajDim.setName("trajectory");
|
||||||
for (int t = 0; t < FileNames.size(); t++) {
|
trajDim.setLength(trajNum);
|
||||||
dataInfo += "File Name: " + FileNames.get(t);
|
this.addDimension(trajDim);
|
||||||
dataInfo += System.getProperty("line.separator") + "Typhoon number = " + String.valueOf(TrajeoryNums.get(t));
|
Dimension obsDim = new Dimension(DimensionType.OTHER);
|
||||||
dataInfo += System.getProperty("line.separator") + System.getProperty("line.separator") + "Typhoons:";
|
obsDim.setName("obs");
|
||||||
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00");
|
obsDim.setLength(this.pointNum);
|
||||||
for (TrajectoryInfo aTrajInfo : TrajInfos.get(t)) {
|
this.addDimension(obsDim);
|
||||||
dataInfo += System.getProperty("line.separator") + " " + aTrajInfo.trajName + " "
|
|
||||||
+ aTrajInfo.trajID + " " + aTrajInfo.trajCenter + " " + format.format(aTrajInfo.startTime)
|
|
||||||
+ " " + String.valueOf(aTrajInfo.startLat) + " " + String.valueOf(aTrajInfo.startLon)
|
|
||||||
+ " " + String.valueOf(aTrajInfo.startHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (t < FileNames.size() - 1) {
|
//Variables
|
||||||
dataInfo += System.getProperty("line.separator") + System.getProperty("line.separator")
|
for (String vName : this.varNames) {
|
||||||
+ "******************************" + System.getProperty("line.separator");
|
Variable var = new Variable();
|
||||||
}
|
var.setName(vName);
|
||||||
}
|
switch (vName) {
|
||||||
|
case "time":
|
||||||
|
var.setDataType(DataType.DATE);
|
||||||
|
break;
|
||||||
|
case "run_hour":
|
||||||
|
var.setDataType(DataType.INT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
var.setDataType(DataType.FLOAT);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var.addDimension(trajDim);
|
||||||
|
var.addDimension(obsDim);
|
||||||
|
var.addAttribute("long_name", vName);
|
||||||
|
if (!Arrays.asList(this.inVarNames).contains(vName))
|
||||||
|
var.setStation(true);
|
||||||
|
this.addVariable(var);
|
||||||
|
}
|
||||||
|
|
||||||
return dataInfo;
|
//Read tables
|
||||||
}
|
this.dataTables = this.readTable();
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
/**
|
e.printStackTrace();
|
||||||
* Read array data of a variable
|
} catch (IOException e) {
|
||||||
*
|
e.printStackTrace();
|
||||||
* @param varName Variable name
|
} catch (Exception e) {
|
||||||
* @return Array data
|
e.printStackTrace();
|
||||||
*/
|
} finally {
|
||||||
@Override
|
try {
|
||||||
public Array read(String varName){
|
if (sr != null) {
|
||||||
Variable var = this.getVariable(varName);
|
sr.close();
|
||||||
int n = var.getDimNumber();
|
}
|
||||||
int[] origin = new int[n];
|
} catch (IOException ex) {
|
||||||
int[] size = new int[n];
|
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
int[] stride = new int[n];
|
}
|
||||||
for (int i = 0; i < n; i++){
|
}
|
||||||
origin[i] = 0;
|
}
|
||||||
size[i] = var.getDimLength(i);
|
|
||||||
stride[i] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
Array r = read(varName, origin, size, stride);
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read array data of the variable
|
|
||||||
*
|
|
||||||
* @param varName Variable name
|
|
||||||
* @param origin The origin array
|
|
||||||
* @param size The size array
|
|
||||||
* @param stride The stride array
|
|
||||||
* @return Array data
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Array read(String varName, int[] origin, int[] size, int[] stride) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a trajectory points data
|
* Get global attributes
|
||||||
*
|
*
|
||||||
* @param aTrajIdx The trajectory index
|
* @return Global attributes
|
||||||
* @return A trajectory points data
|
*/
|
||||||
*/
|
@Override
|
||||||
public List<List<Object>> getATrajData(int aTrajIdx) {
|
public List<Attribute> getGlobalAttributes() {
|
||||||
List<List<Object>> trajPointsData = new ArrayList<>();
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
boolean ifExit = false;
|
@Override
|
||||||
for (int t = 0; t < FileNames.size(); t++) {
|
public String generateInfoText() {
|
||||||
BufferedReader sr = null;
|
String dataInfo = "";
|
||||||
try {
|
dataInfo += "File Name: " + this.fileName;
|
||||||
String aFile = FileNames.get(t);
|
dataInfo += System.getProperty("line.separator") + "Typhoon number = " + String.valueOf(this.trajNum);
|
||||||
sr = new BufferedReader(new FileReader(new File(aFile)));
|
dataInfo += System.getProperty("line.separator") + System.getProperty("line.separator") + "Typhoons:";
|
||||||
String aLine;
|
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00");
|
||||||
String[] dataArray;
|
for (TrajectoryInfo aTrajInfo : this.trajInfoList) {
|
||||||
//
|
dataInfo += System.getProperty("line.separator") + " " + aTrajInfo.trajName + " "
|
||||||
int TrajIdx = -1;
|
+ aTrajInfo.trajID + " " + aTrajInfo.trajCenter + " " + format.format(aTrajInfo.startTime)
|
||||||
PointD aPoint;
|
+ " " + String.valueOf(aTrajInfo.startLat) + " " + String.valueOf(aTrajInfo.startLon)
|
||||||
sr.readLine();
|
+ " " + String.valueOf(aTrajInfo.startHeight);
|
||||||
aLine = sr.readLine();
|
}
|
||||||
while (aLine != null) {
|
|
||||||
if (aLine.trim().isEmpty()) {
|
|
||||||
aLine = sr.readLine();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
dataArray = aLine.split("\\s+");
|
|
||||||
switch (dataArray.length) {
|
|
||||||
case 4:
|
|
||||||
TrajIdx += 1;
|
|
||||||
if (TrajIdx > aTrajIdx) {
|
|
||||||
ifExit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
dataInfo += System.getProperty("line.separator") + super.generateInfoText();
|
||||||
case 13:
|
|
||||||
if (TrajIdx == aTrajIdx) {
|
|
||||||
List<Object> dList = new ArrayList<>();
|
|
||||||
LocalDateTime tt = LocalDateTime.of(Integer.parseInt(dataArray[0]), Integer.parseInt(dataArray[1]),
|
|
||||||
Integer.parseInt(dataArray[2]), Integer.parseInt(dataArray[3]), 0, 0);
|
|
||||||
aPoint = new PointD();
|
|
||||||
aPoint.X = Double.parseDouble(dataArray[5]);
|
|
||||||
aPoint.Y = Double.parseDouble(dataArray[6]);
|
|
||||||
dList.add(aPoint);
|
|
||||||
dList.add(tt);
|
|
||||||
dList.add(Double.parseDouble(dataArray[7]));
|
|
||||||
|
|
||||||
trajPointsData.add(dList);
|
return dataInfo;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (ifExit) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
aLine = sr.readLine();
|
/**
|
||||||
}
|
* Read array data of a variable
|
||||||
sr.close();
|
*
|
||||||
if (ifExit) {
|
* @param varName Variable name
|
||||||
break;
|
* @return Array data
|
||||||
}
|
*/
|
||||||
} catch (FileNotFoundException ex) {
|
@Override
|
||||||
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
public Array read(String varName) {
|
||||||
} catch (IOException ex) {
|
int[] origin = new int[]{0, 0};
|
||||||
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
int[] size = new int[]{this.trajNum, this.pointNum};
|
||||||
} finally {
|
int[] stride = new int[]{1, 1};
|
||||||
try {
|
|
||||||
sr.close();
|
|
||||||
} catch (IOException ex) {
|
|
||||||
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return trajPointsData;
|
Array r = read(varName, origin, size, stride);
|
||||||
}
|
|
||||||
// </editor-fold>
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read array data of the variable
|
||||||
|
*
|
||||||
|
* @param varName Variable name
|
||||||
|
* @param origin The origin array
|
||||||
|
* @param size The size array
|
||||||
|
* @param stride The stride array
|
||||||
|
* @return Array data
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Array read(String varName, int[] origin, int[] size, int[] stride) {
|
||||||
|
try {
|
||||||
|
DataColumn col = this.dataTables.get(0).findColumn(varName);
|
||||||
|
DataType dtype = col.getDataType();
|
||||||
|
switch (col.getDataType()){
|
||||||
|
case DATE:
|
||||||
|
dtype = DataType.DOUBLE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Section section = new Section(origin, size, stride);
|
||||||
|
Array array = Array.factory(dtype, section.getShape());
|
||||||
|
Range trajRange = section.getRange(0);
|
||||||
|
Range obsRange = section.getRange(1);
|
||||||
|
Index index = array.getIndex();
|
||||||
|
for (int trajIdx = trajRange.first(); trajIdx <= trajRange.last(); trajIdx += trajRange.stride()){
|
||||||
|
DataTable dTable = this.dataTables.get(trajIdx);
|
||||||
|
ColumnData colData = dTable.getColumnData(varName);
|
||||||
|
for (int obsIdx = obsRange.first(); obsIdx <= obsRange.last(); obsIdx += obsRange.stride()){
|
||||||
|
if (colData.size() > obsIdx)
|
||||||
|
if (col.getDataType() == DataType.DATE) {
|
||||||
|
array.setObject(index, JDateUtil.toOADate((LocalDateTime) colData.getValue(obsIdx)));
|
||||||
|
} else {
|
||||||
|
array.setObject(index, colData.getValue(obsIdx));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
array.setObject(index, Double.NaN);
|
||||||
|
index.incr();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return array;
|
||||||
|
} catch (InvalidRangeException ex) {
|
||||||
|
Logger.getLogger(HYSPLITTrajDataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read trajectories as data table list.
|
||||||
|
*
|
||||||
|
* @return Data table list
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List<DataTable> readTable() throws Exception {
|
||||||
|
List<DataTable> tables = new ArrayList<>();
|
||||||
|
for (int i = 0; i < this.trajNum; i++) {
|
||||||
|
DataTable table = new DataTable();
|
||||||
|
for (Variable variable : this.variables) {
|
||||||
|
table.addColumn(variable.getName(), variable.getDataType());
|
||||||
|
}
|
||||||
|
tables.add(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
BufferedReader sr = new BufferedReader(new FileReader(this.getFileName()));
|
||||||
|
String[] dataArray;
|
||||||
|
float v;
|
||||||
|
int trajId = -1;
|
||||||
|
sr.readLine();
|
||||||
|
String line = sr.readLine();
|
||||||
|
while (line != null) {
|
||||||
|
line = line.trim();
|
||||||
|
if (line.isEmpty()) {
|
||||||
|
line = sr.readLine();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dataArray = line.split("\\s+");
|
||||||
|
switch (dataArray.length) {
|
||||||
|
case 4:
|
||||||
|
trajId += 1;
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
DataTable dataTable = tables.get(trajId);
|
||||||
|
dataTable.addRow();
|
||||||
|
int rowIdx = dataTable.getRowCount() - 1;
|
||||||
|
int year = Integer.parseInt(dataArray[0]);
|
||||||
|
if (year < 50)
|
||||||
|
year = 2000 + year;
|
||||||
|
else
|
||||||
|
year = 1900 + year;
|
||||||
|
LocalDateTime tt = LocalDateTime.of(year, Integer.parseInt(dataArray[1]),
|
||||||
|
Integer.parseInt(dataArray[2]), Integer.parseInt(dataArray[3]), 0, 0);
|
||||||
|
int runHour = Integer.parseInt(dataArray[4]);
|
||||||
|
tt = tt.plusHours(runHour);
|
||||||
|
int i = 3;
|
||||||
|
for (String vName : this.varNames) {
|
||||||
|
switch (vName) {
|
||||||
|
case "time":
|
||||||
|
dataTable.setValue(rowIdx, vName, tt);
|
||||||
|
break;
|
||||||
|
case "run_hour":
|
||||||
|
dataTable.setValue(rowIdx, vName, runHour);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
v = Float.parseFloat(dataArray[i]);
|
||||||
|
if (v == 9999)
|
||||||
|
v = Float.NaN;
|
||||||
|
dataTable.setValue(rowIdx, vName, v);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
line = sr.readLine();
|
||||||
|
}
|
||||||
|
sr.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Logger.getLogger(HYSPLITTrajDataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.getLogger(HYSPLITTrajDataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tables;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a trajectory points data
|
||||||
|
*
|
||||||
|
* @param aTrajIdx The trajectory index
|
||||||
|
* @return A trajectory points data
|
||||||
|
*/
|
||||||
|
public List<List<Object>> getATrajData(int aTrajIdx) {
|
||||||
|
List<List<Object>> trajPointsData = new ArrayList<>();
|
||||||
|
|
||||||
|
boolean ifExit = false;
|
||||||
|
BufferedReader sr = null;
|
||||||
|
try {
|
||||||
|
sr = new BufferedReader(new FileReader(this.fileName));
|
||||||
|
String aLine;
|
||||||
|
String[] dataArray;
|
||||||
|
//
|
||||||
|
int TrajIdx = -1;
|
||||||
|
PointD aPoint;
|
||||||
|
sr.readLine();
|
||||||
|
aLine = sr.readLine();
|
||||||
|
while (aLine != null) {
|
||||||
|
if (aLine.trim().isEmpty()) {
|
||||||
|
aLine = sr.readLine();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dataArray = aLine.split("\\s+");
|
||||||
|
switch (dataArray.length) {
|
||||||
|
case 4:
|
||||||
|
TrajIdx += 1;
|
||||||
|
if (TrajIdx > aTrajIdx) {
|
||||||
|
ifExit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
if (TrajIdx == aTrajIdx) {
|
||||||
|
List<Object> dList = new ArrayList<>();
|
||||||
|
LocalDateTime tt = LocalDateTime.of(Integer.parseInt(dataArray[0]), Integer.parseInt(dataArray[1]),
|
||||||
|
Integer.parseInt(dataArray[2]), Integer.parseInt(dataArray[3]), 0, 0);
|
||||||
|
aPoint = new PointD();
|
||||||
|
aPoint.X = Double.parseDouble(dataArray[5]);
|
||||||
|
aPoint.Y = Double.parseDouble(dataArray[6]);
|
||||||
|
dList.add(aPoint);
|
||||||
|
dList.add(tt);
|
||||||
|
dList.add(Double.parseDouble(dataArray[7]));
|
||||||
|
|
||||||
|
trajPointsData.add(dList);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ifExit) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
aLine = sr.readLine();
|
||||||
|
}
|
||||||
|
sr.close();
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
sr.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Logger.getLogger(MICAPS7DataInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return trajPointsData;
|
||||||
|
}
|
||||||
|
// </editor-fold>
|
||||||
|
}
|
||||||
|
|||||||
@ -313,7 +313,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
for (ucar.nc2.Dimension dim : ncDimensions) {
|
for (ucar.nc2.Dimension dim : ncDimensions) {
|
||||||
Dimension ndim = NCUtil.convertDimension(dim);
|
Dimension ndim = NCUtil.convertDimension(dim);
|
||||||
if (dim.getShortName().equals("nXtrack")) {
|
if (dim.getShortName().equals("nXtrack")) {
|
||||||
ndim.setDimType(DimensionType.Xtrack);
|
ndim.setDimType(DimensionType.X_TRACK);
|
||||||
}
|
}
|
||||||
this.dimensions.add(ndim);
|
this.dimensions.add(ndim);
|
||||||
}
|
}
|
||||||
@ -363,7 +363,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
nvar.addDimension(ndim);
|
nvar.addDimension(ndim);
|
||||||
} else {
|
} else {
|
||||||
Dimension ndim = NCUtil.convertDimension(dim);
|
Dimension ndim = NCUtil.convertDimension(dim);
|
||||||
ndim.setDimType(DimensionType.Other);
|
ndim.setDimType(DimensionType.OTHER);
|
||||||
nvar.addDimension(ndim);
|
nvar.addDimension(ndim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1133,7 +1133,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Dimension dim = this.dimensions.get(idx);
|
Dimension dim = this.dimensions.get(idx);
|
||||||
if (dim.getDimType() != DimensionType.Other) {
|
if (dim.getDimType() != DimensionType.OTHER) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1578,7 +1578,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
|
|
||||||
private DimensionType getDimType(ucar.nc2.Variable aVar) {
|
private DimensionType getDimType(ucar.nc2.Variable aVar) {
|
||||||
String sName;
|
String sName;
|
||||||
DimensionType dimType = DimensionType.Other;
|
DimensionType dimType = DimensionType.OTHER;
|
||||||
if (_fileTypeId.equals("HDF5-EOS")) {
|
if (_fileTypeId.equals("HDF5-EOS")) {
|
||||||
sName = aVar.getShortName().toLowerCase();
|
sName = aVar.getShortName().toLowerCase();
|
||||||
switch (sName) {
|
switch (sName) {
|
||||||
@ -1618,7 +1618,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimType == DimensionType.Other) {
|
if (dimType == DimensionType.OTHER) {
|
||||||
if (aVar.findAttributeIgnoreCase("long_name") != null) {
|
if (aVar.findAttributeIgnoreCase("long_name") != null) {
|
||||||
ucar.nc2.Attribute axisAtt = aVar.findAttributeIgnoreCase("long_name");
|
ucar.nc2.Attribute axisAtt = aVar.findAttributeIgnoreCase("long_name");
|
||||||
sName = axisAtt.getStringValue().trim().toLowerCase();
|
sName = axisAtt.getStringValue().trim().toLowerCase();
|
||||||
@ -1651,7 +1651,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimType == DimensionType.Other) {
|
if (dimType == DimensionType.OTHER) {
|
||||||
if (aVar.findAttributeIgnoreCase("axis") != null) {
|
if (aVar.findAttributeIgnoreCase("axis") != null) {
|
||||||
ucar.nc2.Attribute axisAtt = aVar.findAttributeIgnoreCase("axis");
|
ucar.nc2.Attribute axisAtt = aVar.findAttributeIgnoreCase("axis");
|
||||||
sName = axisAtt.getStringValue().trim().toLowerCase();
|
sName = axisAtt.getStringValue().trim().toLowerCase();
|
||||||
@ -1671,22 +1671,22 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimType == DimensionType.Other) {
|
if (dimType == DimensionType.OTHER) {
|
||||||
if (aVar.findAttributeIgnoreCase("GRIB_level_type") != null) {
|
if (aVar.findAttributeIgnoreCase("GRIB_level_type") != null) {
|
||||||
dimType = DimensionType.Z;
|
dimType = DimensionType.Z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimType == DimensionType.Other) {
|
if (dimType == DimensionType.OTHER) {
|
||||||
if (aVar.findAttributeIgnoreCase("Grib2_level_type") != null) {
|
if (aVar.findAttributeIgnoreCase("Grib2_level_type") != null) {
|
||||||
dimType = DimensionType.Z;
|
dimType = DimensionType.Z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimType == DimensionType.Other) {
|
if (dimType == DimensionType.OTHER) {
|
||||||
if (aVar.findAttributeIgnoreCase("hybrid_layer") != null) {
|
if (aVar.findAttributeIgnoreCase("hybrid_layer") != null) {
|
||||||
dimType = DimensionType.Z;
|
dimType = DimensionType.Z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimType == DimensionType.Other) {
|
if (dimType == DimensionType.OTHER) {
|
||||||
if (aVar.findAttributeIgnoreCase("unitsCategory") != null) {
|
if (aVar.findAttributeIgnoreCase("unitsCategory") != null) {
|
||||||
sName = aVar.findAttributeIgnoreCase("unitsCategory").getStringValue().trim().toLowerCase();
|
sName = aVar.findAttributeIgnoreCase("unitsCategory").getStringValue().trim().toLowerCase();
|
||||||
switch (sName) {
|
switch (sName) {
|
||||||
@ -1699,7 +1699,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dimType == DimensionType.Other) {
|
if (dimType == DimensionType.OTHER) {
|
||||||
String vName = aVar.getShortName().toLowerCase();
|
String vName = aVar.getShortName().toLowerCase();
|
||||||
switch (vName) {
|
switch (vName) {
|
||||||
case "lon":
|
case "lon":
|
||||||
@ -2964,7 +2964,7 @@ public class NetCDFDataInfo extends DataInfo implements IGridDataInfo, IStationD
|
|||||||
size[i] = 1;
|
size[i] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Xtrack:
|
case X_TRACK:
|
||||||
origin[i] = levelIdx;
|
origin[i] = levelIdx;
|
||||||
size[i] = dim.getLength();
|
size[i] = dim.getLength();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -18,9 +18,7 @@ import org.meteoinfo.common.Extent;
|
|||||||
import org.meteoinfo.common.MIMath;
|
import org.meteoinfo.common.MIMath;
|
||||||
import org.meteoinfo.common.PointD;
|
import org.meteoinfo.common.PointD;
|
||||||
import org.meteoinfo.data.*;
|
import org.meteoinfo.data.*;
|
||||||
import org.meteoinfo.data.meteodata.StationInfoData;
|
import org.meteoinfo.data.meteodata.*;
|
||||||
import org.meteoinfo.data.meteodata.StationModel;
|
|
||||||
import org.meteoinfo.data.meteodata.StationModelData;
|
|
||||||
import org.meteoinfo.dataframe.DataFrame;
|
import org.meteoinfo.dataframe.DataFrame;
|
||||||
import org.meteoinfo.geo.drawing.ContourDraw;
|
import org.meteoinfo.geo.drawing.ContourDraw;
|
||||||
import org.meteoinfo.geo.drawing.Draw;
|
import org.meteoinfo.geo.drawing.Draw;
|
||||||
@ -36,6 +34,7 @@ import org.meteoinfo.ndarray.Array;
|
|||||||
import org.meteoinfo.ndarray.DataType;
|
import org.meteoinfo.ndarray.DataType;
|
||||||
import org.meteoinfo.ndarray.IndexIterator;
|
import org.meteoinfo.ndarray.IndexIterator;
|
||||||
import org.meteoinfo.ndarray.math.ArrayUtil;
|
import org.meteoinfo.ndarray.math.ArrayUtil;
|
||||||
|
import org.meteoinfo.table.DataTable;
|
||||||
import org.meteoinfo.table.Field;
|
import org.meteoinfo.table.Field;
|
||||||
import wcontour.global.PolyLine;
|
import wcontour.global.PolyLine;
|
||||||
import wcontour.global.Polygon;
|
import wcontour.global.Polygon;
|
||||||
@ -3305,5 +3304,282 @@ public class DrawMeteoData {
|
|||||||
|
|
||||||
return layer;
|
return layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create trajectory line layer
|
||||||
|
* @param trajDataInfo ITrajDataInfo
|
||||||
|
* @return Trajectory line layer
|
||||||
|
*/
|
||||||
|
public static VectorLayer createTrajLineLayer(ITrajDataInfo trajDataInfo) {
|
||||||
|
List<DataTable> dataTables = trajDataInfo.getDataTables();
|
||||||
|
List<TrajectoryInfo> trajInfoList = trajDataInfo.getTrajInfoList();
|
||||||
|
String xVarName = trajDataInfo.getXVarName();
|
||||||
|
String yVarName = trajDataInfo.getYVarName();
|
||||||
|
String zVarName = trajDataInfo.getZVarName();
|
||||||
|
ShapeTypes shapeType = zVarName == null ? ShapeTypes.POLYLINE : ShapeTypes.POLYLINE_Z;
|
||||||
|
|
||||||
|
VectorLayer layer = new VectorLayer(shapeType);
|
||||||
|
layer.editAddField(new Field("TrajIndex", DataType.INT));
|
||||||
|
layer.editAddField(new Field("TrajName", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("TrajID", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("TrajCenter", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("StartDate", DataType.DATE));
|
||||||
|
layer.editAddField(new Field("StartLon", DataType.DOUBLE));
|
||||||
|
layer.editAddField(new Field("StartLat", DataType.DOUBLE));
|
||||||
|
layer.editAddField(new Field("StartHeight", DataType.DOUBLE));
|
||||||
|
|
||||||
|
int trajIdx = 0;
|
||||||
|
if (shapeType == ShapeTypes.POLYLINE) {
|
||||||
|
double x, y;
|
||||||
|
for (DataTable dataTable : dataTables) {
|
||||||
|
TrajectoryInfo trajInfo = trajInfoList.get(trajIdx);
|
||||||
|
List<PointD> points = new ArrayList<>();
|
||||||
|
for (int i = 0; i < dataTable.getRowCount(); i++) {
|
||||||
|
x = Double.parseDouble(dataTable.getValue(i, xVarName).toString());
|
||||||
|
y = Double.parseDouble(dataTable.getValue(i, yVarName).toString());
|
||||||
|
points.add(new PointD(x, y));
|
||||||
|
}
|
||||||
|
PolylineShape polylineShape = new PolylineShape();
|
||||||
|
polylineShape.setPoints(points);
|
||||||
|
int shapeNum = layer.getShapeNum();
|
||||||
|
try {
|
||||||
|
if (layer.editInsertShape(polylineShape, shapeNum)) {
|
||||||
|
layer.editCellValue("TrajIndex", shapeNum, trajIdx + 1);
|
||||||
|
layer.editCellValue("TrajName", shapeNum, trajInfo.trajName);
|
||||||
|
layer.editCellValue("TrajID", shapeNum, trajInfo.trajID);
|
||||||
|
layer.editCellValue("TrajCenter", shapeNum, trajInfo.trajCenter);
|
||||||
|
layer.editCellValue("StartDate", shapeNum, trajInfo.startTime);
|
||||||
|
layer.editCellValue("StartLat", shapeNum, trajInfo.startLat);
|
||||||
|
layer.editCellValue("StartLon", shapeNum, trajInfo.startLon);
|
||||||
|
layer.editCellValue("StartHeight", shapeNum, trajInfo.startHeight);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
trajIdx += 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
double x, y, z;
|
||||||
|
for (DataTable dataTable : dataTables) {
|
||||||
|
TrajectoryInfo trajInfo = trajInfoList.get(trajIdx);
|
||||||
|
List<PointZ> points = new ArrayList<>();
|
||||||
|
for (int i = 0; i < dataTable.getRowCount(); i++) {
|
||||||
|
x = Double.parseDouble(dataTable.getValue(i, xVarName).toString());
|
||||||
|
y = Double.parseDouble(dataTable.getValue(i, yVarName).toString());
|
||||||
|
z = Double.parseDouble(dataTable.getValue(i, zVarName).toString());
|
||||||
|
points.add(new PointZ(x, y, z));
|
||||||
|
}
|
||||||
|
PolylineZShape polylineShape = new PolylineZShape();
|
||||||
|
polylineShape.setPoints(points);
|
||||||
|
int shapeNum = layer.getShapeNum();
|
||||||
|
try {
|
||||||
|
if (layer.editInsertShape(polylineShape, shapeNum)) {
|
||||||
|
layer.editCellValue("TrajIndex", shapeNum, trajIdx + 1);
|
||||||
|
layer.editCellValue("TrajName", shapeNum, trajInfo.trajName);
|
||||||
|
layer.editCellValue("TrajID", shapeNum, trajInfo.trajID);
|
||||||
|
layer.editCellValue("TrajCenter", shapeNum, trajInfo.trajCenter);
|
||||||
|
layer.editCellValue("StartDate", shapeNum, trajInfo.startTime);
|
||||||
|
layer.editCellValue("StartLat", shapeNum, trajInfo.startLat);
|
||||||
|
layer.editCellValue("StartLon", shapeNum, trajInfo.startLon);
|
||||||
|
layer.editCellValue("StartHeight", shapeNum, trajInfo.startHeight);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
trajIdx += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.setLayerName("Trajectory_Lines");
|
||||||
|
layer.setLayerDrawType(LayerDrawType.TRAJECTORY_LINE);
|
||||||
|
layer.setVisible(true);
|
||||||
|
layer.updateLegendScheme(LegendType.UNIQUE_VALUE, "TrajID");
|
||||||
|
|
||||||
|
return layer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create trajectory line layer
|
||||||
|
* @param trajDataInfo ITrajDataInfo
|
||||||
|
* @param varName Variation name
|
||||||
|
* @return Trajectory line layer
|
||||||
|
*/
|
||||||
|
public static VectorLayer createTrajLineLayer(ITrajDataInfo trajDataInfo, String varName) {
|
||||||
|
List<DataTable> dataTables = trajDataInfo.getDataTables();
|
||||||
|
List<TrajectoryInfo> trajInfoList = trajDataInfo.getTrajInfoList();
|
||||||
|
String xVarName = trajDataInfo.getXVarName();
|
||||||
|
String yVarName = trajDataInfo.getYVarName();
|
||||||
|
String zVarName = trajDataInfo.getZVarName();
|
||||||
|
|
||||||
|
VectorLayer layer = new VectorLayer(ShapeTypes.POLYLINE_Z);
|
||||||
|
layer.editAddField(new Field("TrajIndex", DataType.INT));
|
||||||
|
layer.editAddField(new Field("TrajName", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("TrajID", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("TrajCenter", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("StartDate", DataType.DATE));
|
||||||
|
layer.editAddField(new Field("StartLon", DataType.DOUBLE));
|
||||||
|
layer.editAddField(new Field("StartLat", DataType.DOUBLE));
|
||||||
|
layer.editAddField(new Field("StartHeight", DataType.DOUBLE));
|
||||||
|
|
||||||
|
int trajIdx = 0;
|
||||||
|
double x, y, z, m;
|
||||||
|
for (DataTable dataTable : dataTables) {
|
||||||
|
TrajectoryInfo trajInfo = trajInfoList.get(trajIdx);
|
||||||
|
List<PointZ> points = new ArrayList<>();
|
||||||
|
for (int i = 0; i < dataTable.getRowCount(); i++) {
|
||||||
|
x = Double.parseDouble(dataTable.getValue(i, xVarName).toString());
|
||||||
|
y = Double.parseDouble(dataTable.getValue(i, yVarName).toString());
|
||||||
|
if (zVarName == null)
|
||||||
|
z = 0;
|
||||||
|
else
|
||||||
|
z = Double.parseDouble(dataTable.getValue(i, zVarName).toString());
|
||||||
|
m = Double.parseDouble(dataTable.getValue(i, varName).toString());
|
||||||
|
points.add(new PointZ(x, y, z, m));
|
||||||
|
}
|
||||||
|
PolylineZShape polylineShape = new PolylineZShape();
|
||||||
|
polylineShape.setPoints(points);
|
||||||
|
int shapeNum = layer.getShapeNum();
|
||||||
|
try {
|
||||||
|
if (layer.editInsertShape(polylineShape, shapeNum)) {
|
||||||
|
layer.editCellValue("TrajIndex", shapeNum, trajIdx + 1);
|
||||||
|
layer.editCellValue("TrajName", shapeNum, trajInfo.trajName);
|
||||||
|
layer.editCellValue("TrajID", shapeNum, trajInfo.trajID);
|
||||||
|
layer.editCellValue("TrajCenter", shapeNum, trajInfo.trajCenter);
|
||||||
|
layer.editCellValue("StartDate", shapeNum, trajInfo.startTime);
|
||||||
|
layer.editCellValue("StartLat", shapeNum, trajInfo.startLat);
|
||||||
|
layer.editCellValue("StartLon", shapeNum, trajInfo.startLon);
|
||||||
|
layer.editCellValue("StartHeight", shapeNum, trajInfo.startHeight);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
trajIdx += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.setLayerName("Trajectory_Lines");
|
||||||
|
layer.setLayerDrawType(LayerDrawType.TRAJECTORY_LINE);
|
||||||
|
layer.setVisible(true);
|
||||||
|
layer.updateLegendScheme(LegendType.UNIQUE_VALUE, "TrajID");
|
||||||
|
|
||||||
|
return layer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static VectorLayer createTrajPointLayer(ITrajDataInfo trajDataInfo) {
|
||||||
|
List<DataTable> dataTables = trajDataInfo.getDataTables();
|
||||||
|
List<Variable> variables = trajDataInfo.getVariables();
|
||||||
|
String xVarName = trajDataInfo.getXVarName();
|
||||||
|
String yVarName = trajDataInfo.getYVarName();
|
||||||
|
String zVarName = trajDataInfo.getZVarName();
|
||||||
|
|
||||||
|
VectorLayer layer = new VectorLayer(ShapeTypes.POINT_Z);
|
||||||
|
layer.editAddField(new Field("TrajID", DataType.INT));
|
||||||
|
for (Variable variable : variables) {
|
||||||
|
layer.editAddField(new Field(variable.getName(), variable.getDataType()));
|
||||||
|
}
|
||||||
|
|
||||||
|
int trajIdx = 0;
|
||||||
|
double x, y, z;
|
||||||
|
for (DataTable dataTable : dataTables) {
|
||||||
|
for (int i = 0; i < dataTable.getRowCount(); i++) {
|
||||||
|
x = Double.parseDouble(dataTable.getValue(i, xVarName).toString());
|
||||||
|
y = Double.parseDouble(dataTable.getValue(i, yVarName).toString());
|
||||||
|
if (zVarName == null)
|
||||||
|
z = 0;
|
||||||
|
else
|
||||||
|
z = Double.parseDouble(dataTable.getValue(i, zVarName).toString());
|
||||||
|
PointZ point = new PointZ(x, y, z);
|
||||||
|
PointZShape pointZShape = new PointZShape();
|
||||||
|
pointZShape.setPoint(point);
|
||||||
|
int shapeNum = layer.getShapeNum();
|
||||||
|
try {
|
||||||
|
if (layer.editInsertShape(pointZShape, shapeNum)) {
|
||||||
|
layer.editCellValue("TrajID", shapeNum, trajIdx + 1);
|
||||||
|
for (Variable variable : variables) {
|
||||||
|
layer.editCellValue(variable.getName(), shapeNum, dataTable.getValue(i, variable.getName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trajIdx += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.setLayerName("Trajectory_Points");
|
||||||
|
layer.setLayerDrawType(LayerDrawType.TRAJECTORY_POINT);
|
||||||
|
layer.setVisible(true);
|
||||||
|
LegendScheme aLS = LegendManage.createSingleSymbolLegendScheme(ShapeTypes.POINT, Color.red, 5.0F);
|
||||||
|
aLS.setFieldName("TrajID");
|
||||||
|
layer.setLegendScheme(aLS);
|
||||||
|
|
||||||
|
return layer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create trajectory start point layer
|
||||||
|
* @param trajDataInfo ITrajDataInfo
|
||||||
|
* @return Trajectory start point layer
|
||||||
|
*/
|
||||||
|
public static VectorLayer createTrajStartPointLayer(ITrajDataInfo trajDataInfo) {
|
||||||
|
List<DataTable> dataTables = trajDataInfo.getDataTables();
|
||||||
|
List<TrajectoryInfo> trajInfoList = trajDataInfo.getTrajInfoList();
|
||||||
|
String xVarName = trajDataInfo.getXVarName();
|
||||||
|
String yVarName = trajDataInfo.getYVarName();
|
||||||
|
String zVarName = trajDataInfo.getZVarName();
|
||||||
|
|
||||||
|
VectorLayer layer = new VectorLayer(ShapeTypes.POINT_Z);
|
||||||
|
layer.editAddField(new Field("TrajIndex", DataType.INT));
|
||||||
|
layer.editAddField(new Field("TrajName", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("TrajID", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("TrajCenter", DataType.STRING));
|
||||||
|
layer.editAddField(new Field("StartDate", DataType.DATE));
|
||||||
|
layer.editAddField(new Field("StartLon", DataType.DOUBLE));
|
||||||
|
layer.editAddField(new Field("StartLat", DataType.DOUBLE));
|
||||||
|
layer.editAddField(new Field("StartHeight", DataType.DOUBLE));
|
||||||
|
|
||||||
|
int trajIdx = 0;
|
||||||
|
double x, y, z;
|
||||||
|
for (DataTable dataTable : dataTables) {
|
||||||
|
TrajectoryInfo trajInfo = trajInfoList.get(trajIdx);
|
||||||
|
List<PointZ> points = new ArrayList<>();
|
||||||
|
x = Double.parseDouble(dataTable.getValue(0, xVarName).toString());
|
||||||
|
y = Double.parseDouble(dataTable.getValue(0, yVarName).toString());
|
||||||
|
if (zVarName == null)
|
||||||
|
z = 0;
|
||||||
|
else
|
||||||
|
z = Double.parseDouble(dataTable.getValue(0, zVarName).toString());
|
||||||
|
PointZShape pointZShape = new PointZShape();
|
||||||
|
pointZShape.setPoint(new PointZ(x, y, z));
|
||||||
|
int shapeNum = layer.getShapeNum();
|
||||||
|
try {
|
||||||
|
if (layer.editInsertShape(pointZShape, shapeNum)) {
|
||||||
|
layer.editCellValue("TrajIndex", shapeNum, trajIdx + 1);
|
||||||
|
layer.editCellValue("TrajName", shapeNum, trajInfo.trajName);
|
||||||
|
layer.editCellValue("TrajID", shapeNum, trajInfo.trajID);
|
||||||
|
layer.editCellValue("TrajCenter", shapeNum, trajInfo.trajCenter);
|
||||||
|
layer.editCellValue("StartDate", shapeNum, trajInfo.startTime);
|
||||||
|
layer.editCellValue("StartLat", shapeNum, trajInfo.startLat);
|
||||||
|
layer.editCellValue("StartLon", shapeNum, trajInfo.startLon);
|
||||||
|
layer.editCellValue("StartHeight", shapeNum, trajInfo.startHeight);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
trajIdx += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
layer.setLayerName("Trajectory_Start_Points");
|
||||||
|
layer.setLayerDrawType(LayerDrawType.TRAJECTORY_POINT);
|
||||||
|
layer.setVisible(true);
|
||||||
|
LegendScheme aLS = LegendManage.createSingleSymbolLegendScheme(ShapeTypes.POINT, Color.black, 8.0F);
|
||||||
|
aLS.setFieldName("TrajID");
|
||||||
|
layer.setLegendScheme(aLS);
|
||||||
|
|
||||||
|
return layer;
|
||||||
|
}
|
||||||
// </editor-fold>
|
// </editor-fold>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<MeteoInfo File="milconfig.xml" Type="configurefile">
|
<MeteoInfo File="milconfig.xml" Type="configurefile">
|
||||||
<Path OpenPath="D:\Working\MIScript\Jython\mis\common_math\linalg">
|
<Path OpenPath="D:\Working\MIScript\Jython\mis\micaps">
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math"/>
|
|
||||||
<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\plot_types\wind"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\maskout"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\maskout"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\geoshow"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\geoshow"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map"/>
|
||||||
@ -16,17 +13,22 @@
|
|||||||
<RecentFolder Folder="D:\Run\emips"/>
|
<RecentFolder Folder="D:\Run\emips"/>
|
||||||
<RecentFolder Folder="D:\Run\emips\run_cams"/>
|
<RecentFolder Folder="D:\Run\emips\run_cams"/>
|
||||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math\linalg"/>
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math\linalg"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\traj"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
||||||
|
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\micaps"/>
|
||||||
</Path>
|
</Path>
|
||||||
<File>
|
<File>
|
||||||
<OpenedFiles>
|
<OpenedFiles>
|
||||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\interpolate\griddata_kriging.py"/>
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\interpolate\griddata_kriging.py"/>
|
||||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\solve_3.py"/>
|
|
||||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\eof_elnino.py"/>
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\eof_elnino.py"/>
|
||||||
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\traj\plot_traj.py"/>
|
||||||
|
<OpenedFile File="D:\Working\MIScript\Jython\mis\micaps\micaps_7.py"/>
|
||||||
</OpenedFiles>
|
</OpenedFiles>
|
||||||
<RecentFiles>
|
<RecentFiles>
|
||||||
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\interpolate\griddata_kriging.py"/>
|
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\interpolate\griddata_kriging.py"/>
|
||||||
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\solve_3.py"/>
|
|
||||||
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\eof_elnino.py"/>
|
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\eof_elnino.py"/>
|
||||||
|
<RecentFile File="D:\Working\MIScript\Jython\mis\traj\plot_traj.py"/>
|
||||||
|
<RecentFile File="D:\Working\MIScript\Jython\mis\micaps\micaps_7.py"/>
|
||||||
</RecentFiles>
|
</RecentFiles>
|
||||||
</File>
|
</File>
|
||||||
<Font>
|
<Font>
|
||||||
@ -34,5 +36,5 @@
|
|||||||
</Font>
|
</Font>
|
||||||
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
|
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
|
||||||
<Figure DoubleBuffering="true"/>
|
<Figure DoubleBuffering="true"/>
|
||||||
<Startup MainFormLocation="-7,0" MainFormSize="1378,824"/>
|
<Startup MainFormLocation="-7,-7" MainFormSize="1293,693"/>
|
||||||
</MeteoInfo>
|
</MeteoInfo>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<MeteoInfo File="config.xml" Type="configurefile">
|
<MeteoInfo File="config.xml" Type="configurefile">
|
||||||
<Path OpenPath="D:\Temp\test"/>
|
<Path OpenPath="D:\MyProgram\Distribution\Java\MeteoInfo\MeteoInfo\sample\MICAPS"/>
|
||||||
<Font>
|
<Font>
|
||||||
<TextFont FontName="YaHei Consolas Hybrid" FontSize="14"/>
|
<TextFont FontName="YaHei Consolas Hybrid" FontSize="14"/>
|
||||||
<LegendFont FontName="宋体" FontSize="12"/>
|
<LegendFont FontName="宋体" FontSize="12"/>
|
||||||
|
|||||||
@ -2456,7 +2456,7 @@ public class FrmMeteoData extends javax.swing.JDialog {
|
|||||||
aLayer = drawStation(fieldName);
|
aLayer = drawStation(fieldName);
|
||||||
_useSameLegendScheme = true;
|
_useSameLegendScheme = true;
|
||||||
} else if (_meteoDataInfo.isTrajData()) {
|
} else if (_meteoDataInfo.isTrajData()) {
|
||||||
aLayer = drawTraj();
|
aLayer = drawTraj(fieldName);
|
||||||
this.jButton_DrawSetting.setEnabled(false);
|
this.jButton_DrawSetting.setEnabled(false);
|
||||||
this.jButton_NexTime.setEnabled(false);
|
this.jButton_NexTime.setEnabled(false);
|
||||||
this.jButton_PreTime.setEnabled(false);
|
this.jButton_PreTime.setEnabled(false);
|
||||||
@ -2603,27 +2603,22 @@ public class FrmMeteoData extends javax.swing.JDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private MapLayer drawTraj() {
|
private MapLayer drawTraj(String varName) {
|
||||||
DataInfo aDataInfo = _meteoDataInfo.getDataInfo();
|
DataInfo aDataInfo = _meteoDataInfo.getDataInfo();
|
||||||
VectorLayer aLayer = null;
|
VectorLayer aLayer = null;
|
||||||
switch (_2DDrawType) {
|
switch (_2DDrawType) {
|
||||||
case TRAJECTORY_LINE:
|
case TRAJECTORY_LINE:
|
||||||
aLayer = ((TrajDataInfo) aDataInfo).createTrajLineLayer();
|
aLayer = DrawMeteoData.createTrajLineLayer((ITrajDataInfo) aDataInfo, varName);
|
||||||
// PolylineBreak aPLB;
|
|
||||||
// for (int i = 0; i < aLayer.getLegendScheme().getBreakNum(); i++) {
|
|
||||||
// aPLB = (PolylineBreak) aLayer.getLegendScheme().getLegendBreaks().get(i);
|
|
||||||
// aPLB.setSize(2);
|
|
||||||
// }
|
|
||||||
_lastAddedLayerHandle = _parent.getMapDocument().getActiveMapFrame().insertPolylineLayer(aLayer);
|
_lastAddedLayerHandle = _parent.getMapDocument().getActiveMapFrame().insertPolylineLayer(aLayer);
|
||||||
break;
|
break;
|
||||||
case TRAJECTORY_START_POINT:
|
case TRAJECTORY_START_POINT:
|
||||||
aLayer = ((TrajDataInfo) aDataInfo).createTrajStartPointLayer();
|
aLayer = DrawMeteoData.createTrajStartPointLayer((ITrajDataInfo) aDataInfo);
|
||||||
PointBreak aPB = (PointBreak) aLayer.getLegendScheme().getLegendBreaks().get(0);
|
PointBreak aPB = (PointBreak) aLayer.getLegendScheme().getLegendBreaks().get(0);
|
||||||
aPB.setStyle(PointStyle.UP_TRIANGLE);
|
aPB.setStyle(PointStyle.UP_TRIANGLE);
|
||||||
_lastAddedLayerHandle = _parent.getMapDocument().getActiveMapFrame().insertPolylineLayer(aLayer);
|
_lastAddedLayerHandle = _parent.getMapDocument().getActiveMapFrame().insertPolylineLayer(aLayer);
|
||||||
break;
|
break;
|
||||||
case TRAJECTORY_POINT:
|
case TRAJECTORY_POINT:
|
||||||
aLayer = ((TrajDataInfo) aDataInfo).createTrajPointLayer();
|
aLayer = DrawMeteoData.createTrajPointLayer((ITrajDataInfo) aDataInfo);
|
||||||
_lastAddedLayerHandle = _parent.getMapDocument().getActiveMapFrame().insertPolylineLayer(aLayer);
|
_lastAddedLayerHandle = _parent.getMapDocument().getActiveMapFrame().insertPolylineLayer(aLayer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,7 +53,7 @@ public class Dimension {
|
|||||||
public Dimension(String name, int len) {
|
public Dimension(String name, int len) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.length = len;
|
this.length = len;
|
||||||
_dimType = DimensionType.Other;
|
_dimType = DimensionType.OTHER;
|
||||||
_dimValue = new ArrayList<>();
|
_dimValue = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,9 +38,9 @@ public enum DimensionType {
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Xtrack dimension - for HDF EOS swath data
|
/// Xtrack dimension - for HDF EOS swath data
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Xtrack,
|
X_TRACK,
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Other dimension
|
/// Other dimension
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Other
|
OTHER
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user