private void _getMinAndInterval(ucar.nc2.Variable var, string minMaxStr, out double interval, out double minVal, out double count) { ucar.ma2.Array dataArr = _util.GetAllVariableData(var); bool stepExists = false; interval = 1.0; minVal = double.MaxValue; count = 0; java.util.List ncVarAtt = var.getAttributes(); for (int attCount = 0; attCount < ncVarAtt.size(); attCount++) { ucar.nc2.Attribute varAtt = (ucar.nc2.Attribute)ncVarAtt.get(attCount); string attName = varAtt.getName(); if (attName == "step") { java.lang.Number attVal = (java.lang.Number)varAtt.getValue(0); interval = attVal.doubleValue(); stepExists = true; } } double prevVal = 0.0; int minCount = 0, maxCount = (int)dataArr.getSize() - 1; count = 0; if (!string.IsNullOrEmpty(minMaxStr)) { minCount = Convert.ToInt32(minMaxStr.Split(':')[0]); maxCount = Convert.ToInt32(minMaxStr.Split(':')[1]); count = maxCount - minCount + 1; } else { count = maxCount + 1; } for (int dCount = minCount; dCount <= maxCount; dCount++) { ucar.ma2.Index dIndex = dataArr.getIndex(); double data = dataArr.getDouble(dIndex.set(dCount)); if (minVal >= data) { minVal = data; } if (!stepExists) { if (dCount > 0) { prevVal = dataArr.getDouble(dIndex.set(dCount - 1)); interval = data - prevVal; } } } }
private float[] _getFloatData(string itemName, int timeStep, double j, double k, double lat0, double lon0, double dx, double dy) { float[] itemFloatData = null; object[] ncVars = _util.GetVariables(); ucar.ma2.Array xData = null; ucar.ma2.Array yData = null; ucar.ma2.Array itemData = null; _settings.TimeLayer = timeStep; foreach (object ncVar in ncVars) { ucar.nc2.Variable var = ((ucar.nc2.Variable)ncVar); string varName = var.getFullName(); if (varName == _settings.YAxisName) { yData = _util.GetAllVariableData(var); } } foreach (object ncVar in ncVars) { ucar.nc2.Variable var = ((ucar.nc2.Variable)ncVar); string varName = var.getFullName(); if (varName == _settings.XAxisName) { xData = _util.GetAllVariableData(var); } } foreach (object ncVar in ncVars) { ucar.nc2.Variable var = ((ucar.nc2.Variable)ncVar); string varName = var.getFullName(); if (varName == itemName) { java.util.List varDims = ((Variable)var).getDimensions(); int xAxisPosition = -1, yAxisPosition = -1; for (int i = 0; i < varDims.size(); i++) { string dimName = ((Dimension)varDims.get(i)).getName(); if (_settings.XAxisDimensionName == dimName) { xAxisPosition = i; } if (_settings.YAxisDimensionName == dimName) { yAxisPosition = i; } } itemData = _util.Get2DVariableData(var, _settings); itemData = _util.ProcessedVariableData(var, itemData); java.util.List ncVarAtt = var.getAttributes(); if (!_customDFSGrid) { if (_invertxData && _invertyData) { //invert xData and yData itemFloatData = _util.GetFloatDataInvertXandY(itemData, xData, yData, ncVarAtt, _fdel); } else if (_invertyData) { //invert yData itemFloatData = _util.GetFloatDataInvertY(itemData, xData, yData, ncVarAtt, _fdel); } else if (_invertxData) { //invert xData itemFloatData = _util.GetFloatDataInvertX(itemData, xData, yData, ncVarAtt, _fdel); } else { itemFloatData = _util.GetFloatData(itemData, xData, yData, ncVarAtt, _fdel, xAxisPosition, yAxisPosition); } } else { //reassign data to grid if (yAxisPosition > xAxisPosition) { itemFloatData = _reassignData(itemData, xData, yData, ncVarAtt, _fdel, j, k, lat0, lon0, dx, dy, 0, 1); } else { itemFloatData = _reassignData(itemData, xData, yData, ncVarAtt, _fdel, j, k, lat0, lon0, dx, dy, 1, 0); } } } } return(itemFloatData); }
private void _getGridOrigo(out double x0, out double y0, out double dx, out double dy, out double j, out double k, out double lat0, out double lon0) { x0 = 0; y0 = 0; dx = 0; dy = 0; j = 0; k = 0; lat0 = 0; lon0 = 0; object[] ncVars = _util.GetVariables(); foreach (object ncVar in ncVars) { ucar.nc2.Variable var = (ucar.nc2.Variable)ncVar; string varName = var.getFullName(); if (_settings.XAxisName == varName) { _getMinAndInterval(var, _settings.XLayer, out dx, out lon0, out j); x0 = 0; //overwrite dx, j if (_settings.NumberXCells > 0) { j = _settings.NumberXCells; //if (!double.TryParse(_settings.NumberXCells, out j)) //throw new Exception("Cannot convert " + _settings.NumberXCells + " to double"); _customDFSGrid = true; } if (_settings.DX > 0) { dx = _settings.DX; //if (!double.TryParse(_settings.DX, out dx)) //throw new Exception("Cannot convert " + _settings.DX + " to double"); _customDFSGrid = true; } if (!String.IsNullOrEmpty(_settings.ProjectionEastNorthMultiplier)) { Microsoft.JScript.Vsa.VsaEngine myEngine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine(); double result = (double)Microsoft.JScript.Eval.JScriptEvaluate(_settings.ProjectionEastNorthMultiplier, myEngine); dx = dx * result; } } else if (_settings.YAxisName == varName) { _getMinAndInterval(var, _settings.YLayer, out dy, out lat0, out k); y0 = 0; //overwrite dy, k if (_settings.NumberYCells > 0) { k = _settings.NumberYCells; //if (!double.TryParse(_settings.NumberYCells, out k)) //throw new Exception("Cannot convert " + _settings.NumberYCells + " to double"); _customDFSGrid = true; } if (_settings.DY > 0) { dy = _settings.DY; //if (!double.TryParse(_settings.DY, out dy)) //throw new Exception("Cannot convert " + _settings.DY + " to double"); _customDFSGrid = true; } if (!String.IsNullOrEmpty(_settings.ProjectionEastNorthMultiplier)) { Microsoft.JScript.Vsa.VsaEngine myEngine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine(); double result = (double)Microsoft.JScript.Eval.JScriptEvaluate(_settings.ProjectionEastNorthMultiplier, myEngine); dy = dy * result; } } } if (_settings.OverwriteOriginX != -999 && _settings.OverwriteOriginX != -999) { lon0 = _settings.OverwriteOriginX; lat0 = _settings.OverwriteOriginY; } }