mirror of
https://github.com/meteoinfo/MeteoInfo.git
synced 2025-12-08 20:36:05 +00:00
update savefig function for better supporting sleep argument to wait webmap loading
This commit is contained in:
parent
7efed43099
commit
2b01be155d
@ -1298,6 +1298,11 @@ public class ChartPanel extends JPanel implements IChartPanel{
|
||||
DocPrintJob job = service.createPrintJob();
|
||||
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
|
||||
job.print(doc, attributes);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
out.close();
|
||||
}
|
||||
} else if (aFile.endsWith(".eps")) {
|
||||
@ -1308,6 +1313,11 @@ public class ChartPanel extends JPanel implements IChartPanel{
|
||||
g.startExport();
|
||||
//this.paintGraphics(g);
|
||||
this.paintGraphics(g, width, height);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
g.endExport();
|
||||
g.dispose();
|
||||
} else if (aFile.endsWith(".pdf")) {
|
||||
@ -1319,6 +1329,11 @@ public class ChartPanel extends JPanel implements IChartPanel{
|
||||
PdfTemplate pdfTemp = cb.createTemplate(width, height);
|
||||
Graphics2D g2 = new PdfGraphics2D(pdfTemp, width, height, true);
|
||||
this.paintGraphics(g2, width, height);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
g2.dispose();
|
||||
cb.addTemplate(pdfTemp, 0, 0);
|
||||
document.close();
|
||||
@ -1331,6 +1346,11 @@ public class ChartPanel extends JPanel implements IChartPanel{
|
||||
g.startExport();
|
||||
//this.paintGraphics(g);
|
||||
this.paintGraphics(g, width, height);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
g.endExport();
|
||||
g.dispose();
|
||||
} else {
|
||||
|
||||
@ -1345,6 +1345,11 @@ public class GLChartPanel extends GLJPanel implements IChartPanel{
|
||||
DocPrintJob job = service.createPrintJob();
|
||||
PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
|
||||
job.print(doc, attributes);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
out.close();
|
||||
}
|
||||
} else if (aFile.endsWith(".eps")) {
|
||||
@ -1355,6 +1360,11 @@ public class GLChartPanel extends GLJPanel implements IChartPanel{
|
||||
g.startExport();
|
||||
//this.paintGraphics(g);
|
||||
this.paintGraphics(g, width, height);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
g.endExport();
|
||||
g.dispose();
|
||||
} else if (aFile.endsWith(".pdf")) {
|
||||
@ -1366,6 +1376,11 @@ public class GLChartPanel extends GLJPanel implements IChartPanel{
|
||||
PdfTemplate pdfTemp = cb.createTemplate(width, height);
|
||||
Graphics2D g2 = new PdfGraphics2D(pdfTemp, width, height, true);
|
||||
this.paintGraphics(g2, width, height);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
g2.dispose();
|
||||
cb.addTemplate(pdfTemp, 0, 0);
|
||||
document.close();
|
||||
@ -1378,6 +1393,11 @@ public class GLChartPanel extends GLJPanel implements IChartPanel{
|
||||
g.startExport();
|
||||
//this.paintGraphics(g);
|
||||
this.paintGraphics(g, width, height);
|
||||
|
||||
if (sleep != null) {
|
||||
Thread.sleep(sleep * 1000);
|
||||
}
|
||||
|
||||
g.endExport();
|
||||
g.dispose();
|
||||
} else {
|
||||
|
||||
@ -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.6.2";
|
||||
version = "3.6.3";
|
||||
}
|
||||
return version;
|
||||
}
|
||||
|
||||
@ -39,6 +39,46 @@ public class CMARadarBaseDataInfo extends DataInfo implements IGridDataInfo {
|
||||
}).collect(Collectors.toMap(data -> (Integer) data[0], data -> (String) data[1]));
|
||||
private Map<String, RadialRecord> recordMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Get generic header
|
||||
* @return Generic header
|
||||
*/
|
||||
public GenericHeader getGenericHeader() {
|
||||
return this.genericHeader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get site config
|
||||
* @return Site config
|
||||
*/
|
||||
public SiteConfig getSiteConfig() {
|
||||
return this.siteConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get task config
|
||||
* @return Task config
|
||||
*/
|
||||
public TaskConfig getTaskConfig() {
|
||||
return this.taskConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get cut config list
|
||||
* @return Cut config list
|
||||
*/
|
||||
public List<CutConfig> getCutConfigs() {
|
||||
return this.cutConfigs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get record map
|
||||
* @return Record map
|
||||
*/
|
||||
public Map<String, RadialRecord> getRecordMap() {
|
||||
return this.recordMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GridArray getGridArray(String varName) {
|
||||
return null;
|
||||
@ -184,7 +224,7 @@ public class CMARadarBaseDataInfo extends DataInfo implements IGridDataInfo {
|
||||
} else {
|
||||
record = new RadialRecord(product);
|
||||
record.setBinLength(momentHeader.binLength);
|
||||
record.scale = momentHeader.scale;;
|
||||
record.scale = momentHeader.scale;
|
||||
record.offset = momentHeader.offset;
|
||||
this.recordMap.put(product, record);
|
||||
}
|
||||
@ -232,6 +272,7 @@ public class CMARadarBaseDataInfo extends DataInfo implements IGridDataInfo {
|
||||
this.addAttribute(new Attribute("StationLongitude", siteConfig.longitude));
|
||||
this.addAttribute(new Attribute("AntennaHeight", siteConfig.antennaHeight));
|
||||
this.addAttribute(new Attribute("GroundHeight", siteConfig.groundHeight));
|
||||
this.addAttribute(new Attribute("RadarType", siteConfig.getRadarType()));
|
||||
|
||||
//Read radial data
|
||||
taskConfig = new TaskConfig(raf);
|
||||
|
||||
@ -111,4 +111,51 @@ public class SiteConfig {
|
||||
reserved = new byte[46];
|
||||
raf.read(reserved);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get radar type string
|
||||
* @return Radar type string
|
||||
*/
|
||||
public String getRadarType() {
|
||||
switch (radarType) {
|
||||
case 1:
|
||||
return "SA";
|
||||
case 2:
|
||||
return "SB";
|
||||
case 3:
|
||||
return "SC";
|
||||
case 4:
|
||||
return "SAD";
|
||||
case 5:
|
||||
return "SBD";
|
||||
case 6:
|
||||
return "SCD";
|
||||
case 33:
|
||||
return "CA";
|
||||
case 34:
|
||||
return "CB";
|
||||
case 35:
|
||||
return "CC";
|
||||
case 36:
|
||||
return "CCJ";
|
||||
case 37:
|
||||
return "CD";
|
||||
case 38:
|
||||
return "CAD";
|
||||
case 39:
|
||||
return "CBD";
|
||||
case 40:
|
||||
return "CCD";
|
||||
case 41:
|
||||
return "CCJD";
|
||||
case 42:
|
||||
return "CDD";
|
||||
case 65:
|
||||
return "XA";
|
||||
case 66:
|
||||
return "XAD";
|
||||
default:
|
||||
return "UNDEFINE";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,36 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<MeteoInfo File="milconfig.xml" Type="configurefile">
|
||||
<Path OpenPath="D:\Working\MIScript\Jython\mis\common_math\linalg">
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\topology"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\plot"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\radar"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map"/>
|
||||
<Path OpenPath="D:\Temp\test\webmap">
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\map\projection"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\patch"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\city"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array\complex"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array\slice"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\array"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\common_math\linalg"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\LaSW"/>
|
||||
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\LaSW\ZhengZhou"/>
|
||||
<RecentFolder Folder="D:\Temp\test\webmap"/>
|
||||
</Path>
|
||||
<File>
|
||||
<OpenedFiles>
|
||||
<OpenedFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\_reload.py"/>
|
||||
<OpenedFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\mainGUI.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\svd.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\cond.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\norm_1.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\LaSW\ZhengZhou\radar_bz2_3d.py"/>
|
||||
<OpenedFile File="D:\Working\MIScript\Jython\mis\LaSW\ZhengZhou\radar_bz2_3d_1.py"/>
|
||||
</OpenedFiles>
|
||||
<RecentFiles>
|
||||
<RecentFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\_reload.py"/>
|
||||
<RecentFile File="D:\MyProgram\java\MeteoInfoDev\toolbox\meteoview3d\mainGUI.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\svd.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\cond.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\common_math\linalg\norm_1.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\LaSW\ZhengZhou\radar_bz2_3d.py"/>
|
||||
<RecentFile File="D:\Working\MIScript\Jython\mis\LaSW\ZhengZhou\radar_bz2_3d_1.py"/>
|
||||
</RecentFiles>
|
||||
</File>
|
||||
<Font>
|
||||
@ -38,5 +36,5 @@
|
||||
</Font>
|
||||
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
|
||||
<Figure DoubleBuffering="true"/>
|
||||
<Startup MainFormLocation="-7,-7" MainFormSize="1293,685"/>
|
||||
<Startup MainFormLocation="-7,0" MainFormSize="1393,844"/>
|
||||
</MeteoInfo>
|
||||
|
||||
117
meteoinfo-lab/pylib/mipylib/dataset/arldatafile.py
Normal file
117
meteoinfo-lab/pylib/mipylib/dataset/arldatafile.py
Normal file
@ -0,0 +1,117 @@
|
||||
|
||||
from .dimdatafile import DimDataFile
|
||||
|
||||
|
||||
class ARLDataFile(DimDataFile):
|
||||
|
||||
def __init__(self, dataset=None, access='r', arldata=None):
|
||||
self.dataset = dataset
|
||||
self.access = access
|
||||
self._variables = []
|
||||
if not dataset is None:
|
||||
self.filename = dataset.getFileName()
|
||||
for v in dataset.getDataInfo().getVariables():
|
||||
self._variables.append(DimVariable(v))
|
||||
self.nvar = dataset.getDataInfo().getVariableNum()
|
||||
self.fill_value = dataset.getMissingValue()
|
||||
self.proj = dataset.getProjectionInfo()
|
||||
self.arldata = arldata
|
||||
|
||||
# Write ARL data
|
||||
def setx(self, x):
|
||||
"""
|
||||
Set x (longitude) dimension value.
|
||||
|
||||
:param x: (*array_like*) X dimension value.
|
||||
"""
|
||||
self.arldata.setX(x.aslist())
|
||||
|
||||
def sety(self, y):
|
||||
"""
|
||||
Set y (latitude) dimension value.
|
||||
|
||||
:param y: (*array_like*) Y dimension value.
|
||||
"""
|
||||
self.arldata.setY(y.aslist())
|
||||
|
||||
def setlevels(self, levels, add_ground=True):
|
||||
"""
|
||||
Set vertical levels.
|
||||
|
||||
:param levels: (*list*) Vertical levels.
|
||||
:param add_ground: (*bool*) Whether add ground level. Default is `True`.
|
||||
"""
|
||||
if isinstance(levels, np.NDArray):
|
||||
levels = levels.aslist()
|
||||
if add_ground:
|
||||
levels.insert(0, 1)
|
||||
self.arldata.levels = levels
|
||||
|
||||
def set2dvar(self, vnames):
|
||||
"""
|
||||
Set surface variables (2 dimensions ignore time dimension).
|
||||
|
||||
:param vnames: (*list*) Variable names.
|
||||
"""
|
||||
self.arldata.LevelVarList.add(vnames)
|
||||
|
||||
def set3dvar(self, vnames):
|
||||
"""
|
||||
Set level variables (3 dimensions ignore time dimension).
|
||||
|
||||
:param vnames: (*list*) Variable names.
|
||||
"""
|
||||
self.arldata.LevelVarList.add(vnames)
|
||||
|
||||
def getdatahead(self, proj, model, vertical, icx=0, mn=0):
|
||||
"""
|
||||
Get data head.
|
||||
|
||||
:param proj: (*ProjectionInfo*) Projection information.
|
||||
:param model: (*string*) Model name with 4 characters.
|
||||
:param vertical: (*int*) Vertical coordinate system flag. 1-sigma (fraction);
|
||||
2-pressure (mb); 3-terrain (fraction); 4-hybrid (mb: offset.fraction)
|
||||
:param icx: (*int*) Forecast hour (>99 the header forecast hr = 99)
|
||||
:param mn: (*int*) Minutes associated with data time.
|
||||
"""
|
||||
return self.arldata.getDataHead(proj, model, vertical, icx, mn)
|
||||
|
||||
def diff_origin_pack(self, data):
|
||||
"""
|
||||
Get difference between the original data and the packed data.
|
||||
:param data: (*array*) The original data.
|
||||
:return: (*array*) Difference.
|
||||
"""
|
||||
r = self.arldata.diffOriginPack(data._array)
|
||||
return np.NDArray(r)
|
||||
|
||||
def writeindexrec(self, t, datahead, ksums=None):
|
||||
"""
|
||||
Write index record.
|
||||
|
||||
:param t: (*datatime*) The time of the data.
|
||||
:param datahead: (*DataHeader') Data header of the record.
|
||||
:param ksums: (*list*) Check sum list.
|
||||
"""
|
||||
t = miutil.jdate(t)
|
||||
self.arldata.writeIndexRecord(t, datahead, ksums)
|
||||
|
||||
def writedatarec(self, t, lidx, vname, fhour, grid, data):
|
||||
"""
|
||||
Write data record.
|
||||
|
||||
:param t: (*datetime*) The time of the data.
|
||||
:param lidx: (*int*) Level index.
|
||||
:param vname: (*string*) Variable name.
|
||||
:param fhour: (*int*) Forecasting hour.
|
||||
:param grid: (*int*) Grid id to check if the data grid is bigger than 999. Header
|
||||
record does not support grids of more than 999, therefore in those situations
|
||||
the grid number is converted to character to represent the 1000s digit,
|
||||
e.g. @(64)=<1000, A(65)=1000, B(66)=2000, etc.
|
||||
:param data: (*array_like*) Data array.
|
||||
|
||||
:returns: (*int*) Check sum of the record data.
|
||||
"""
|
||||
t = miutil.jdate(t)
|
||||
ksum = self.arldata.writeGridData(t, lidx, vname, fhour, grid, data.asarray())
|
||||
return ksum
|
||||
Binary file not shown.
@ -5,7 +5,8 @@ from ._ndarray import NDArray
|
||||
from .dimarray import DimArray
|
||||
from org.meteoinfo.ndarray.math import ArrayUtil, ArrayMath
|
||||
|
||||
__all__ = ['cumprod', 'cumsum', 'ndim', 'nonzero', 'prod', 'ravel', 'searchsorted', 'sum']
|
||||
__all__ = ['cumprod', 'cumsum', 'ndim', 'nonzero', 'prod', 'ravel', 'searchsorted', 'sum',
|
||||
'where']
|
||||
|
||||
|
||||
def ndim(a):
|
||||
@ -80,6 +81,19 @@ def nonzero(a):
|
||||
return tuple(r)
|
||||
|
||||
|
||||
def where(condition):
|
||||
"""
|
||||
Return elements, either from x or y, depending on condition.
|
||||
|
||||
If only condition is given, return condition.nonzero().
|
||||
|
||||
:param condition: (*array_like*) Input array.
|
||||
|
||||
:returns: (*tuple*) Indices of elements that are non-zero.
|
||||
"""
|
||||
return nonzero(condition)
|
||||
|
||||
|
||||
def searchsorted(a, v, side='left', sorter=None):
|
||||
"""
|
||||
Find indices where elements should be inserted to maintain order.
|
||||
|
||||
Binary file not shown.
@ -5,10 +5,9 @@ multiarray module
|
||||
from org.meteoinfo.ndarray.math import ArrayMath
|
||||
|
||||
from ._ndarray import NDArray
|
||||
from .fromnumeric import nonzero
|
||||
from ._exceptions import AxisError
|
||||
|
||||
__all__ = ['normalize_axis_index','where','bincount']
|
||||
__all__ = ['normalize_axis_index','bincount']
|
||||
|
||||
def normalize_axis_index(axis, ndim, msg_prefix=None):
|
||||
"""
|
||||
@ -33,18 +32,6 @@ def normalize_axis_index(axis, ndim, msg_prefix=None):
|
||||
else:
|
||||
raise AxisError(axis, ndim, msg_prefix)
|
||||
|
||||
def where(condition):
|
||||
"""
|
||||
Return elements, either from x or y, depending on condition.
|
||||
|
||||
If only condition is given, return condition.nonzero().
|
||||
|
||||
:param condition: (*array_like*) Input array.
|
||||
|
||||
:returns: (*tuple*) Indices of elements that are non-zero.
|
||||
"""
|
||||
return nonzero(condition)
|
||||
|
||||
def bincount(x, weights=None, minlength=0):
|
||||
"""
|
||||
Count number of occurrences of each value in array of non-negative ints.
|
||||
|
||||
@ -27,13 +27,16 @@ def _check_version(version):
|
||||
|
||||
def magic(major, minor):
|
||||
""" Return the magic string for the given file format version.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
major : int in [0, 255]
|
||||
minor : int in [0, 255]
|
||||
|
||||
Returns
|
||||
-------
|
||||
magic : str
|
||||
|
||||
Raises
|
||||
------
|
||||
ValueError if the version cannot be formatted.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user