Exemplo n.º 1
0
        public int Close()
        {
            int rc = 0;

            DfsDLLWrapper.dfsFileClose(pHeader, ref pFile);
            DfsDLLWrapper.dfsHeaderDestroy(ref pHeader);
            return(rc);
        }
Exemplo n.º 2
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         dfsdata = null;
     }
     if (_headerPointer != IntPtr.Zero)
     {
         DfsDLLWrapper.dfsFileClose(_headerPointer, ref _filePointer);
     }
 }
Exemplo n.º 3
0
        private void _convert2Dfs2()
        {
            IntPtr headerPointer = new IntPtr();
            IntPtr filePointer   = new IntPtr();

            try
            {
                int maxTimeStep = _getTimeSteps();
                _customDFSGrid = false;

                // Create header
                System.Reflection.AssemblyName assName = this.GetType().Assembly.GetName();
                //if (maxTimeStep <= 1)
                headerPointer = DfsDLLWrapper.dfsHeaderCreate(FileType.EqtimeFixedspaceAllitems,
                                                              System.IO.Path.GetFileNameWithoutExtension(_settings.InputFileName), assName.Name,
                                                              assName.Version.Major, _getItemNum(), StatType.NoStat);

                /*else
                 *  headerPointer = DfsDLLWrapper.dfsHeaderCreate(FileType.NeqtimeFixedspaceAllitems,
                 *  System.IO.Path.GetFileNameWithoutExtension(_settings.InputFileName), assName.Name,
                 *      assName.Version.Major, _getItemNum(), StatType.NoStat);*/

                // Setup header
                DfsDLLWrapper.dfsSetDataType(headerPointer, 1);
                double x0 = 0, y0 = 0, dx = 0, dy = 0, j = 0, k = 0, lon0 = 0, lat0 = 0;
                _getGridOrigo(out x0, out y0, out dx, out dy, out j, out k, out lat0, out lon0);
                DfsDLLWrapper.dfsSetGeoInfoUTMProj(headerPointer, _settings.MZMapProjectionString, lon0, lat0, _settings.OverwriteRotation);
                DfsDLLWrapper.dfsSetDeleteValFloat(headerPointer, _fdel);
                List <DateTime> dateTimes = _util.GetTime(_settings.TimeAxisName);

                //compute timesteps
                double timestepSec        = 0;
                for (int timeSteps = 1; timeSteps < dateTimes.Count; timeSteps++)
                {
                    timestepSec = Math.Round((dateTimes[timeSteps].ToOADate() - dateTimes[timeSteps - 1].ToOADate()) * 86400);
                }

                //DfsDLLWrapper.dfsSetEqCalendarAxis(headerPointer, dateTimes[0].ToString("yyyy-MM-dd"), dateTimes[0].ToString("HH:mm:ss"), (int)eumUnit.eumUsec, 0, (int)timestepSec, 0);

                if (maxTimeStep <= 1)
                {
                    DfsDLLWrapper.dfsSetEqCalendarAxis(headerPointer, dateTimes[0].ToString("yyyy-MM-dd"), dateTimes[0].ToString("HH:mm:ss"), (int)eumUnit.eumUsec, 0, _settings.TimeStepSeconds, 0);
                }
                else
                {
                    DfsDLLWrapper.dfsSetEqCalendarAxis(headerPointer, dateTimes[0].ToString("yyyy-MM-dd"), dateTimes[0].ToString("HH:mm:ss"), (int)eumUnit.eumUsec, 0, (int)timestepSec, 0);
                }

                // Add Items by looping through selected variables
                int selectedItemCount = 0;
                for (int itemCount = 0; itemCount < _settings.Variables.Count; itemCount++)
                {
                    if (_settings.IsVariablesSelected[itemCount])
                    {
                        IntPtr itemPointer = DfsDLLWrapper.dfsItemD(headerPointer, selectedItemCount + 1);
                        string itemName    = _settings.Variables[itemCount];

                        DfsDLLWrapper.dfsSetItemInfo(headerPointer, itemPointer, _settings.VariablesMappings[itemCount].EUMItemKey, _settings.VariablesMappings[itemCount].EUMItemDesc,
                                                     _settings.VariablesMappings[itemCount].EUMMappedItemUnitKey, DfsSimpleType.Float);
                        DfsDLLWrapper.dfsSetItemValueType(itemPointer, DataValueType.Instantaneous);

                        //get grid data from nc dimensions
                        //swap range if dx or dy is negative
                        if (dx <= 0)
                        {
                            dx           = Math.Abs(dx);
                            _invertxData = true;
                        }
                        if (dy <= 0)
                        {
                            dy           = Math.Abs(dy);
                            _invertyData = true;
                        }
                        DfsDLLWrapper.dfsSetItemAxisEqD2(itemPointer, (int)eumUnit.eumUdegree, (int)j, (int)k, (float)x0, (float)y0, (float)dx, (float)dy);

                        selectedItemCount++;
                    }
                }

                // Create file
                DfsDLLWrapper.dfsFileCreate(_settings.OutputFileName, headerPointer, out filePointer);

                //write data to file (time loop > item loop)
                for (int timeSteps = 0; timeSteps < dateTimes.Count; timeSteps++)
                {
                    selectedItemCount = 0;
                    for (int itemCount = 0; itemCount < _settings.Variables.Count; itemCount++)
                    {
                        if (_settings.IsVariablesSelected[itemCount])
                        {
                            string itemName      = _settings.Variables[itemCount];
                            double dTotalSeconds = (dateTimes[timeSteps].ToOADate() - dateTimes[0].ToOADate()) * 86400;
                            dTotalSeconds = Math.Round(dTotalSeconds, 0, MidpointRounding.AwayFromZero);
                            DfsDLLWrapper.dfsWriteItemTimeStep(headerPointer, filePointer, dTotalSeconds, _getFloatData(itemName, timeSteps, j, k, lat0, lon0, dx, dy));
                            selectedItemCount++;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Convert2Dfs2 Error: " + ex.Message);
            }
            finally
            {
                // close file and destroy header
                if (null != filePointer)
                {
                    DfsDLLWrapper.dfsFileClose(headerPointer, ref filePointer);
                }

                if (null != headerPointer)
                {
                    DfsDLLWrapper.dfsHeaderDestroy(ref headerPointer);
                }
            }
        }