Beispiel #1
0
        public static Type Enum2DataType(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(typeof(byte));

            case enumDataType.Double:
                return(typeof(double));

            case enumDataType.Float:
                return(typeof(float));

            case enumDataType.Int16:
                return(typeof(Int16));

            case enumDataType.Int32:
                return(typeof(Int32));

            case enumDataType.Int64:
                return(typeof(Int64));

            case enumDataType.UInt16:
                return(typeof(UInt16));

            case enumDataType.UInt32:
                return(typeof(UInt32));

            case enumDataType.UInt64:
                return(typeof(UInt64));

            default:
                return(null);
            }
        }
Beispiel #2
0
        public static long MaxValue(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(byte.MaxValue);

            case enumDataType.Double:
                return(0);

            case enumDataType.Float:
                return(0);

            case enumDataType.Int16:
                return(Int16.MaxValue);

            case enumDataType.Int32:
                return(Int32.MaxValue);

            case enumDataType.Int64:
                return(Int64.MaxValue);

            case enumDataType.UInt16:
                return(UInt16.MaxValue);

            case enumDataType.UInt32:
                return(UInt32.MaxValue);

            case enumDataType.UInt64:
                return((long)Int64.MaxValue);

            default:
                return(0);
            }
        }
Beispiel #3
0
        public static int SizeOf(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(1);

            case enumDataType.UInt16:
            case enumDataType.Int16:
                return(2);

            case enumDataType.Int32:
            case enumDataType.UInt32:
            case enumDataType.Float:
                return(4);

            case enumDataType.Int64:
            case enumDataType.UInt64:
            case enumDataType.Double:
                return(8);

            default:
                return(0);
            }
        }
Beispiel #4
0
        private DataType GetDataType(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(DataType.GDT_Byte);

            case enumDataType.UInt16:
                return(DataType.GDT_UInt16);

            case enumDataType.Int16:
                return(DataType.GDT_Int16);

            case enumDataType.UInt32:
                return(DataType.GDT_UInt32);

            case enumDataType.Int32:
                return(DataType.GDT_Int32);

            case enumDataType.Float:
                return(DataType.GDT_Float32);

            case enumDataType.Double:
                return(DataType.GDT_Float64);
            }
            throw new NotSupportedException(dataType.ToString());
        }
 //支持空间插值
 public ContourLine[] Generate(double resolutionX, double resolutionY, enumDataType dataType, double[] contourValues, IDW_Interpolation interpolate, Action <int, string> tracker)
 {
     if (contourValues == null || contourValues.Length == 0)
     {
         return(null);
     }
     using (IContourGenerator gen = ContourGeneratorFactory.GetContourGenerator(dataType))
     {
         double[] rasPointValue;
         int      width, height;
         if (tracker != null)
         {
             tracker(1, "正在进行空间插值...");
         }
         interpolate.DoIDWinterpolation(resolutionX, resolutionY, out width, out height, out rasPointValue);
         gen.NoDataForOutsideAOI = _noData;
         gen.IsOutputUncompleted = _isOutputUncomplete;
         gen.Sample = _sample;
         if (tracker != null)
         {
             tracker(9, "正在准备数据...");
         }
         gen.SetDataValue(rasPointValue, width, height);
         ContourLine[] retLines = gen.Generate(width, height, contourValues, tracker);
         _contourValues = gen.ContourValues;
         return(retLines);
     }
 }
Beispiel #6
0
        private enumDataType GetSysDataType(H5T.H5Type type)
        {
            enumDataType systype = enumDataType.Atypism;

            switch (type)
            {
            case H5T.H5Type.NATIVE_SCHAR:
            case H5T.H5Type.NATIVE_UCHAR:
                systype = enumDataType.Byte;
                break;

            case H5T.H5Type.NATIVE_DOUBLE: systype = enumDataType.Double;
                break;

            case H5T.H5Type.NATIVE_SHORT: systype = enumDataType.Int16;
                break;

            case H5T.H5Type.NATIVE_INT: systype = enumDataType.Int32;
                break;

            case H5T.H5Type.NATIVE_USHORT: systype = enumDataType.UInt16;
                break;

            case H5T.H5Type.NATIVE_UINT: systype = enumDataType.UInt32;
                break;

            case H5T.H5Type.NATIVE_FLOAT: systype = enumDataType.Float;
                break;

            default: systype = enumDataType.Unknow;
                break;
            }
            return(systype);
        }
        private double GetBin(enumDataType dataType, double maxValue, double minValue, int maxBucket, out int actualBucket)
        {
            double bin = 0;

            switch (dataType)
            {
            case enumDataType.Byte:
            case enumDataType.Int16:
            case enumDataType.UInt16:
            case enumDataType.Int32:
            case enumDataType.UInt32:
            case enumDataType.Int64:
            case enumDataType.UInt64:
                bin = (int)Math.Ceiling((maxValue - minValue) / maxBucket);
                //采样间隔值bin为0时,zyb,20131119新加
                if (bin != 0.0d)
                {
                    actualBucket = (int)Math.Ceiling((maxValue - minValue) / bin);
                }
                else
                {
                    actualBucket = 0;
                }
                return(bin);

            default:
                bin          = (maxValue - minValue) / (float)maxBucket;
                actualBucket = (int)((maxValue - minValue) / bin);
                return(bin);
            }
        }
Beispiel #8
0
        public static object CreateStretcher(enumDataType dataType, double minValue, double maxValue)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(new LinearRgbStretcherByte((byte)minValue, (byte)maxValue, 0, 255, false));

            case enumDataType.Int16:
                return(new LinearRgbStretcherInt16((Int16)minValue, (Int16)maxValue, 0, 255, false));

            case enumDataType.UInt16:
                return(new LinearRgbStretcherUInt16((UInt16)minValue, (UInt16)maxValue, 0, 255, false));

            case enumDataType.Int32:
                return(new LinearRgbStretcherInt32((Int32)minValue, (Int32)maxValue, 0, 255, false));

            case enumDataType.UInt32:
                return(new LinearRgbStretcherUInt32((UInt32)minValue, (UInt32)maxValue, 0, 255, false));

            case enumDataType.Int64:
                return(new LinearRgbStretcherInt64((Int64)minValue, (Int64)maxValue, 0, 255, false));

            case enumDataType.Float:
                return(new LinearRgbStretcherFloat((float)minValue, (float)maxValue, 0, 255, false));

            case enumDataType.UInt64:
                return(new LinearRgbStretcherUInt64((UInt64)minValue, (UInt64)maxValue, 0, 255, false));

            case enumDataType.Double:
                return(new LinearRgbStretcherDouble((double)minValue, (double)maxValue, 0, 255, false));

            default:
                return(null);
            }
        }
Beispiel #9
0
        private void WriteDataToLDF <T>(IRasterDataProvider prdWriter, enumDataType dataType, int outWidth, int rowStep, int oRow, T[] dstBandData, int b)
        {
            IRasterBand band = null;

            try
            {
                band = prdWriter.GetRasterBand(b + 1);
                GCHandle h = GCHandle.Alloc(dstBandData, GCHandleType.Pinned);
                try
                {
                    IntPtr bufferPtr = h.AddrOfPinnedObject();
                    band.Write(0, oRow, outWidth, rowStep, bufferPtr, dataType, outWidth, rowStep);
                }
                finally
                {
                    h.Free();
                }
            }
            finally
            {
                //这里不能释放,由于大部分band是记录在RasterDataProvider中的数组中的,如果释放后,下次取就会出错
                //if (band!=null&&band is IGDALRasterBand)
                //{
                //    band.Dispose();
                //}
            }
        }
Beispiel #10
0
        public void Put(int[] indexes, T[] features)
        {
            if (indexes == null || indexes.Length == 0)
            {
                return;
            }
            int          count = indexes.Length;
            int          r = 0, c = 0;
            int          w        = _size.Width;
            int          h        = _size.Height;
            enumDataType dataType = _dataProvider.DataType;

            T[]      buffer = new T[1];
            GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);

            try
            {
                IntPtr ptr = handle.AddrOfPinnedObject();
                for (int i = 0; i < count; i++)
                {
                    r         = indexes[i] / w;
                    c         = indexes[i] - r * w;
                    buffer[0] = features[i];
                    _rasterValues.Write(c, r, 1, 1, ptr, dataType, 1, 1);
                }
            }
            finally
            {
                handle.Free();
            }
        }
Beispiel #11
0
        public static IContourGenerator GetContourGenerator(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(new ContourGeneratorByte());

            case enumDataType.UInt16:
                return(new ContourGeneratorUInt16());

            case enumDataType.Int16:
                return(new ContourGeneratorInt16());

            case enumDataType.UInt32:
                return(new ContourGeneratorUInt32());

            case enumDataType.Int32:
                return(new ContourGeneratorInt32());

            case enumDataType.Int64:
                return(new ContourGeneratorInt64());

            case enumDataType.UInt64:
                return(new ContourGeneratorInt64());

            case enumDataType.Float:
                return(new ContourGeneratorFloat());

            case enumDataType.Double:
                return(new ContourGeneratorDouble());

            default:
                return(null);
            }
        }
Beispiel #12
0
        private unsafe bool RawFileSmooth(IRasterDataProvider[] rasterIn, IRasterDataProvider[] rasterOut,
                                          int iMax, int iMin, int iCore, int iInvalid, int inInvalid, int outInvalid, double absValue, int bandIndex, Action <int, string> progress)
        {
            try
            {
                IRasterDataProvider raster   = rasterIn[0];
                enumDataType        dataType = raster.DataType;
                switch (dataType)
                {
                case enumDataType.Int16:
                    return(SmoothInt16(rasterIn, rasterOut, iMax, iMin, iCore, iInvalid, inInvalid, outInvalid, absValue, bandIndex, progress));

                case enumDataType.UInt16:
                    return(SmoothUInt16(rasterIn, rasterOut, iMax, iMin, iCore, iInvalid, inInvalid, outInvalid, absValue, bandIndex, progress));

                default:
                    if (progress != null)
                    {
                        progress(0, "不支持的数据类型");
                    }
                    return(false);
                }
            }
            finally
            {
            }
        }
Beispiel #13
0
        public static DataType DataType2GDALDataType(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(DataType.GDT_Byte);

            case enumDataType.Double:
                return(DataType.GDT_Float64);

            case enumDataType.Float:
                return(DataType.GDT_Float32);

            case enumDataType.Int16:
                return(DataType.GDT_Int16);

            case enumDataType.Int32:
                return(DataType.GDT_Int32);

            case enumDataType.UInt16:
                return(DataType.GDT_UInt16);

            case enumDataType.UInt32:
                return(DataType.GDT_UInt32);

            case enumDataType.Atypism:
            case enumDataType.Bits:
            default:
                return(DataType.GDT_Unknown);
            }
        }
        public static IScatterPixelVisitor GetVisitor(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(new ScatterPixelVisitorByte());

            case enumDataType.UInt16:
                return(new ScatterPixelVisitorUInt16());

            case enumDataType.Int16:
                return(new ScatterPixelVisitorInt16());

            case enumDataType.UInt32:
                return(new ScatterPixelVisitorUInt32());

            case enumDataType.Int32:
                return(new ScatterPixelVisitorInt32());

            case enumDataType.UInt64:
                return(new ScatterPixelVisitorUInt64());

            case enumDataType.Int64:
                return(new ScatterPixelVisitorInt64());

            case enumDataType.Float:
                return(new ScatterPixelVisitorFloat());

            case enumDataType.Double:
                return(new ScatterPixelVisitorDouble());

            default:
                return(null);
            }
        }
Beispiel #15
0
        private void WriteDataToLDF <T>(IRasterDataProvider prdWriter, enumDataType dataType, int outWidth, int rowStep, int oRow, T[] dstBandData, int b, double dataweight, float zoom)
        {
            IRasterBand band = null;

            for (int i = 0; i < dstBandData.Length; i++)
            {
                dstBandData[i] = (T)Convert.ChangeType(Convert.ToDouble(dstBandData[i]) * dataweight * zoom, typeof(T));
            }
            try
            {
                band = prdWriter.GetRasterBand(b + 1);
                GCHandle h = GCHandle.Alloc(dstBandData, GCHandleType.Pinned);
                try
                {
                    IntPtr bufferPtr = h.AddrOfPinnedObject();
                    band.Write(0, oRow, outWidth, rowStep, bufferPtr, dataType, outWidth, rowStep);
                }
                finally
                {
                    h.Free();
                }
            }
            finally
            {
                //这里不能释放,由于大部分band是记录在RasterDataProvider中的数组中的,如果释放后,下次取就会出错
                //if (band!=null&&band is IGDALRasterBand)
                //{
                //    band.Dispose();
                //}
            }
        }
Beispiel #16
0
        /// <summary>
        ///     添加统计
        /// </summary>
        /// <param name="sql">dbBuilder.ToString():唯一标识</param>
        /// <param name="dataType">数据类型</param>
        private static string CreateKey(string sql, enumDataType dataType)
        {
            #region 移除失效时间
            // 移除失效的时间
            DataStatisticsList.ForEach(o => o.LstActiveAt.RemoveAll(t => DateTime.Now > t.AddMinutes(CacheConfigs.ConfigInfo.VisitTime)));

            // 移除无时间统计的项
            DataStatisticsList.RemoveAll(o => o.Value == null && o.LstActiveAt.Count() == 0);
            // 重置加入缓存时间
            var lst = DataStatisticsList.Where(o => o.Value == null).ToList();
            for (var i = 0; i < lst.Count; i++)
            {
                lst[i].JoinCacheAt = DateTime.MinValue;
            }
            #endregion

            var key = Encrypt.MD5(dataType.GetName() + sql).Substring(8, 16);

            // 加入统计
            var cache = DataStatisticsList.FirstOrDefault(o => o.Key == key);
            if (cache == null)
            {
                cache = new DataCache {
                    Key = key, DataType = dataType, LstActiveAt = new List <DateTime>()
                };
                DataStatisticsList.Add(cache);
            }
            cache.LstActiveAt.Add(DateTime.Now);

            return(key);
        }
        public static IMaxMinValueComputer GetMaxMinValueComputer(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(new MaxMinValueComputerByte());

            case enumDataType.UInt16:
                return(new MaxMinValueComputerUInt16());

            case enumDataType.Int16:
                return(new MaxMinValueComputerInt16());

            case enumDataType.UInt32:
                return(new MaxMinValueComputerUInt32());

            case enumDataType.Int32:
                return(new MaxMinValueComputerInt32());

            case enumDataType.UInt64:
                return(new MaxMinValueComputerUInt64());

            case enumDataType.Int64:
                return(new MaxMinValueComputerInt64());

            case enumDataType.Float:
                return(new MaxMinValueComputerFloat());

            case enumDataType.Double:
                return(new MaxMinValueComputerDouble());

            default:
                return(null);
            }
        }
Beispiel #18
0
        public void SmoothComputer(string srcFilename, Int16 smoothwindow, string savepathname)
        {
            using (IRasterDataProvider inRaster1 = GeoDataDriver.Open(srcFilename) as IRasterDataProvider)
            {
                enumDataType type = inRaster1.DataType;
                switch (type)
                {
                case enumDataType.Byte: ComputerMid <Byte>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Double: ComputerMid <Double>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Float: ComputerMid <Single>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Int16: ComputerMid <Int16>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Int32: ComputerMid <Int32>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.Int64: ComputerMid <Int64>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.UInt16: ComputerMid <UInt16>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.UInt32: ComputerMid <UInt32>(srcFilename, smoothwindow, savepathname); break;

                case enumDataType.UInt64: ComputerMid <UInt64>(srcFilename, smoothwindow, savepathname); break;

                default: break;
                }
            }
        }
Beispiel #19
0
        public static IWorkspaceFactory2 GetWorkspaceFactory(enumDataType databaseType)
        {
            IWorkspaceFactory2 workspacefacory = null;

            switch (databaseType)
            {
            case enumDataType.PGDB:
            {
                workspacefacory = new AccessWorkspaceFactoryClass();
                break;
            }

            case enumDataType.FileGDB:
            {
                workspacefacory = new FileGDBWorkspaceFactoryClass();
                break;
            }

            case enumDataType.SHP:
            {
                workspacefacory = new ShapefileWorkspaceFactoryClass();
                break;
            }

            default:
            {
                return(null);
            }
            }
            return(workspacefacory);
        }
Beispiel #20
0
        public void AddTimeBands(IRasterBand[] bands)
        {
            if (bands == null || bands.Length == 0)
            {
                return;
            }
            if (_vBands == null)
            {
                _dataType = bands[0].DataType;
                Width     = bands[0].Width;
                Height    = bands[0].Height;

                _bandCount = bands.Length;
                if (ValidBands(bands))
                {
                    _vBands = new List <IRasterBand[]>();
                    _vBands.Add(bands);
                }
            }
            else
            {
                if (ValidBands(bands))
                {
                    _vBands.Add(bands);
                }
            }
        }
Beispiel #21
0
 internal void UpdateOutData(RasterVirtualVistor <Tdst>[] fileOutVistor, int rowCount)
 {
     for (int i = 0; i < fileOutVistor.Length; i++)
     {
         IRasterDataProvider raster = fileOutVistor[i].Raster;
         int           row          = fileOutVistor[i].IndexY;
         int[]         bandMap      = fileOutVistor[i].BandMap;
         IRasterBand[] bands        = fileOutVistor[i].Bands;
         Tdst[][]      bandsData    = fileOutVistor[i].RasterBandsData;
         int           readOffsetx  = 0;
         int           readOffsetY  = row;
         int           xSize        = raster.Width;
         int           ySize        = rowCount;
         for (int b = 0; b < bands.Length; b++)
         {
             IRasterBand  band   = bands[b];
             enumDataType type   = band.DataType;
             GCHandle     buffer = GetHandles(bandsData[b]);
             try
             {
                 band.Write(readOffsetx, readOffsetY, xSize, ySize, buffer.AddrOfPinnedObject(), type, xSize, ySize);
             }
             finally
             {
                 buffer.Free();
             }
         }
     }
 }
Beispiel #22
0
        /// <summary>
        /// 插值处理
        /// </summary>
        public void AndBiliNear(string srcFilename, Int16 zoom, string savepathname)
        {
            using (IRasterDataProvider inRaster1 = GeoDataDriver.Open(srcFilename) as IRasterDataProvider)
            {
                enumDataType type = inRaster1.DataType;
                switch (type)
                {
                case enumDataType.Byte: Bilinear <Byte>(srcFilename, zoom, savepathname); break;

                case enumDataType.Double: Bilinear <Double>(srcFilename, zoom, savepathname); break;

                case enumDataType.Float: Bilinear <Single>(srcFilename, zoom, savepathname); break;

                case enumDataType.Int16: Bilinear <Int16>(srcFilename, zoom, savepathname); break;

                case enumDataType.Int32: Bilinear <Int32>(srcFilename, zoom, savepathname); break;

                case enumDataType.Int64: Bilinear <Int64>(srcFilename, zoom, savepathname); break;

                case enumDataType.UInt16: Bilinear <UInt16>(srcFilename, zoom, savepathname); break;

                case enumDataType.UInt32: Bilinear <UInt32>(srcFilename, zoom, savepathname); break;

                case enumDataType.UInt64: Bilinear <UInt64>(srcFilename, zoom, savepathname); break;

                default: break;
                }
            }
        }
Beispiel #23
0
        public static IRasterDataProvider CreateRaster(string outFileName, IRasterDataProvider referProvider, string fname)
        {
            int width  = referProvider.Width;
            int height = referProvider.Height;

            Project.ISpatialReference spatialRef = referProvider.SpatialRef;
            enumDataType  datatype = referProvider.DataType;
            List <string> options  = new List <string>();

            options.Add("INTERLEAVE=BSQ");
            options.Add("VERSION=LDF");
            options.Add("WITHHDR=TRUE");
            options.Add("SPATIALREF=" + spatialRef.ToProj4String());
            options.Add("MAPINFO={" + 1 + "," + 1 + "}:{" + referProvider.CoordEnvelope.MinX + "," + referProvider.CoordEnvelope.MaxY + "}:{" + referProvider.ResolutionX + "," + referProvider.ResolutionY + "}"); //=env.ToMapInfoString(new Size(width, height));
            string hdrfile = HdrFile.GetHdrFileName(Path.ChangeExtension(fname, ".hdr"));

            if (!string.IsNullOrWhiteSpace(hdrfile) && File.Exists(hdrfile))
            {
                HdrFile hdr = HdrFile.LoadFrom(hdrfile);
                if (hdr != null && hdr.BandNames != null)
                {
                    options.Add("BANDNAMES=" + string.Join(",", hdr.BandNames));
                }
            }
            if (!Directory.Exists(Path.GetDirectoryName(outFileName)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(outFileName));
            }
            IRasterDataDriver  raster    = RasterDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            RasterDataProvider outRaster = raster.Create(outFileName, width, height, 1, datatype, options.ToArray()) as RasterDataProvider;

            return(outRaster);
        }
Beispiel #24
0
        public void ProcessArrayToRaster(string dstFileName, int[,] arrayValue)
        {
            CoordEnvelope       envelope = new CoordEnvelope(-180, 180, -90, 90);
            IRasterDataProvider dataPrd  = null;
            enumDataType        dataType = enumDataType.Int16;

            try
            {
                if (Path.GetExtension(dstFileName).ToUpper() == ".DAT")
                {
                    IRasterDataDriver driver  = GeoDataDriver.GetDriverByName("MEM") as IRasterDataDriver;
                    string            mapInfo = envelope.ToMapInfoString(new Size(_datwidth, _datheight));
                    dataPrd = driver.Create(dstFileName, _datwidth, _datheight, 1, dataType, mapInfo);
                }
                else
                {
                    return;
                }
                if (arrayValue == null)
                {
                    return;
                }
                ProcessArrayToRaster(arrayValue, dataPrd);
            }
            finally
            {
                if (dataPrd != null)
                {
                    dataPrd.Dispose();
                }
            }
        }
Beispiel #25
0
        public static IColorMapTableGetter GetColorTableGetter(enumDataType dataType, ColorMapTable <double> oColorTable)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(new ColorMapTableSetter <byte>(oColorTable));

            case enumDataType.Int16:
                return(new ColorMapTableSetter <Int16>(oColorTable));

            case enumDataType.UInt16:
                return(new ColorMapTableSetter <UInt16>(oColorTable));

            case enumDataType.Int32:
                return(new ColorMapTableSetter <Int32>(oColorTable));

            case enumDataType.UInt32:
                return(new ColorMapTableSetter <UInt32>(oColorTable));

            case enumDataType.Int64:
                return(new ColorMapTableSetter <Int64>(oColorTable));

            case enumDataType.Float:
                return(new ColorMapTableSetter <float>(oColorTable));

            case enumDataType.Double:
                return(new ColorMapTableSetter <double>(oColorTable));

            default:
                return(null);
            }
        }
Beispiel #26
0
        private IInterestedPixelExtracter CreateThresholdExtracter(enumDataType dataType)
        {
            switch (dataType)
            {
            case enumDataType.Byte:
                return(new SimpleThresholdExtracter <byte>());

            case enumDataType.Int16:
                return(new SimpleThresholdExtracter <Int16>());

            case enumDataType.UInt16:
                return(new SimpleThresholdExtracter <UInt16>());

            case enumDataType.Int32:
                return(new SimpleThresholdExtracter <Int32>());

            case enumDataType.UInt32:
                return(new SimpleThresholdExtracter <UInt32>());

            case enumDataType.Float:
                return(new SimpleThresholdExtracter <float>());

            case enumDataType.Double:
                return(new SimpleThresholdExtracter <double>());

            case enumDataType.Int64:
                return(new SimpleThresholdExtracter <Int64>());

            case enumDataType.UInt64:
                return(new SimpleThresholdExtracter <UInt64>());

            default:
                throw new NotSupportedException("简单阈值判识器不支持\"" + dataType.ToString() + "\"数据类型的栅格数据。");
            }
        }
Beispiel #27
0
        //以下为一些辅助帮助类
        public static IRasterDataProvider CreateRaster(string outFileName, CoordEnvelope env, float resolutionX, float resolutionY, int bandCount,
                                                       IRasterDataProvider referProvider)
        {
            //int bandCount = referProvider.BandCount;
            //CoordEnvelope outEnv = referProvider.CoordEnvelope;
            //float resX = referProvider.ResolutionX;
            //float resY = referProvider.ResolutionY;
            int width  = (int)(Math.Round(env.Width / resolutionX));
            int height = (int)(Math.Round(env.Height / resolutionY));

            Project.ISpatialReference spatialRef = referProvider.SpatialRef;
            enumDataType  datatype = referProvider.DataType;
            List <string> options  = new List <string>();

            options.Add("INTERLEAVE=BSQ");
            options.Add("VERSION=LDF");
            options.Add("WITHHDR=TRUE");
            options.Add("SPATIALREF=" + spatialRef.ToProj4String());
            options.Add("MAPINFO={" + 1 + "," + 1 + "}:{" + env.MinX + "," + env.MaxY + "}:{" + resolutionX + "," + resolutionY + "}"); //=env.ToMapInfoString(new Size(width, height));
            string hdrfile = HdrFile.GetHdrFileName(referProvider.fileName);

            if (!string.IsNullOrWhiteSpace(hdrfile) && File.Exists(hdrfile))
            {
                HdrFile hdr = HdrFile.LoadFrom(hdrfile);
                if (hdr != null && hdr.BandNames != null)
                {
                    options.Add("BANDNAMES=" + string.Join(",", hdr.BandNames));
                }
            }
            CheckAndCreateDir(Path.GetDirectoryName(outFileName));
            IRasterDataDriver  raster    = RasterDataDriver.GetDriverByName("LDF") as IRasterDataDriver;
            RasterDataProvider outRaster = raster.Create(outFileName, width, height, bandCount, datatype, options.ToArray()) as RasterDataProvider;

            return(outRaster);
        }
Beispiel #28
0
        //创建输出删格文件
        protected IRasterDataProvider CreateOutRaster(string outFileName, enumDataType dataType, RasterMaper[] inrasterMaper, float resolution)
        {
            IRasterDataDriver raster = RasterDataDriver.GetDriverByName("MEM") as IRasterDataDriver;
            CoordEnvelope     outEnv = null;

            foreach (RasterMaper inRaster in inrasterMaper)
            {
                if (outEnv == null)
                {
                    outEnv = inRaster.Raster.CoordEnvelope;
                }
                else
                {
                    outEnv = outEnv.Intersect(inRaster.Raster.CoordEnvelope);
                }
            }
            float resX, resY;

            if (resolution != 0f)
            {
                resX = resolution;
                resY = resolution;
            }
            else
            {
                resX = inrasterMaper[0].Raster.ResolutionX;
                resY = inrasterMaper[0].Raster.ResolutionY;
            }
            int                width     = (int)(Math.Round(outEnv.Width / resX));
            int                height    = (int)(Math.Round(outEnv.Height / resY));
            string             mapInfo   = outEnv.ToMapInfoString(new Size(width, height));
            RasterDataProvider outRaster = raster.Create(outFileName, width, height, 1, dataType, mapInfo) as RasterDataProvider;

            return(outRaster);
        }
Beispiel #29
0
        public void CreateEmptyLdfFile()
        {
            Assert.That(_newFileName != null);
            IGeoDataDriver driver = GeoDataDriver.GetDriverByName("LDF");

            Assert.NotNull(driver);
            ILdfDriver drv = driver as ILdfDriver;

            Assert.NotNull(drv);
            int            width      = 2048;
            int            height     = 3390;
            int            bandCount  = 10;
            enumDataType   dataType   = enumDataType.UInt16;
            enumInterleave interleave = enumInterleave.BSQ;
            string         version    = "LDF";
            //string proj4 = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137";
            string           mapInfo = "{1,1}:{110,35}:{0.01,0.01}";
            bool             withHdr = true;
            ILdfDataProvider prd     = drv.Create(_newFileName, width, height, bandCount, dataType,
                                                  "INTERLEAVE=" + interleave.ToString(),
                                                  "VERSION=" + version,
                                                  //"SPATIALREF=" + proj4,
                                                  "MAPINFO=" + mapInfo, "WITHHDR=" + withHdr.ToString()) as ILdfDataProvider;

            Assert.NotNull(prd);
            Assert.That(prd.Width == width && prd.Height == height);
            Assert.That(prd.BandCount == bandCount);
            Assert.That(prd.DataType == dataType);
            ILdfHeader header = prd.Header;

            Assert.NotNull(header);
            HdrFile hdr = header.ToHdrFile();

            PrintHdrInfo(hdr);
            Ldf1Header ldfheader = header as Ldf1Header;

            Assert.NotNull(ldfheader);
            Assert.That(ldfheader._width == width && ldfheader._height == height);
            Assert.That(ldfheader.DataType == dataType);
            Assert.NotNull(prd.SpatialRef);
            for (int i = 0; i < bandCount; i++)
            {
                IRasterBand band = prd.GetRasterBand(i + 1);
                Assert.NotNull(band);
                Assert.That(band.Width == width && band.Height == height);
                Assert.That(band.DataType == dataType);
            }
            prd.Dispose();
            drv.Dispose();
            Assert.True(File.Exists(_newFileName));
            FileInfo fInfo = new FileInfo(_newFileName);

            Assert.True(width * height * bandCount * 2 + header.HeaderSize == fInfo.Length);
            ISpatialReference spatialRef = prd.SpatialRef;

            Assert.NotNull(spatialRef);
            Console.Out.WriteLine(spatialRef.ToString());
        }
Beispiel #30
0
        public LogicalRasterDataProvider(string fileName, string[] fnames, object tag)
        {
            if (fnames == null || fnames.Length == 0)
            {
                throw new ArgumentNullException("fnames");
            }
            _tag          = tag;
            _fileNames    = new string[fnames.Length + 1];
            _fileNames[0] = fileName;
            int  i       = 1;
            bool isFirst = true;

            foreach (string fname in fnames)
            {
                _fileNames[i++] = fname;
                IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider;
                if (prd == null)
                {
                    continue;
                }
                if (isFirst)
                {
                    _dataType       = prd.DataType;
                    _width          = prd.Width;
                    _height         = prd.Height;
                    _coordEnvelope  = prd.CoordEnvelope;
                    _coordType      = prd.CoordType;
                    _spatialRef     = prd.SpatialRef;
                    _coordTransform = prd.CoordTransform;
                    isFirst         = false;
                }
                else
                {
                    if (_dataType != prd.DataType ||
                        _coordType != prd.CoordType ||
                        !CoordEnvelopeEquals(_coordEnvelope, prd.CoordEnvelope) ||
                        _coordType != prd.CoordType ||
                        _width != prd.Width ||
                        _height != prd.Height ||
                        !_spatialRef.IsSame(prd.SpatialRef)
                        )
                    {
                        continue;
                    }
                }
                for (int b = 0; b < prd.BandCount; b++)
                {
                    IRasterBand band = prd.GetRasterBand(b + 1);
                    band.Description = prd.fileName;
                    _rasterBands.Add(band);
                    band.BandNo = _rasterBands.Count;
                }
                _needDisposeObjects.Add(prd);
            }
        }
Beispiel #31
0
        private bool PrepareForWorkspace(IWorkspace wsTarget, out string strBaseName, out string strQueryName, out enumDataType baseDataType)
        {
            strBaseName = null;
            strQueryName = null;
            baseDataType = enumDataType.FileGDB;

            try
            {
                string strPath = wsTarget.PathName;
                IDataImport dataImport = new NoReferenceDataImport();
                dataImport.ImportingObjectChanged += new ImportingObjectChangedHandler(DataImport_ImportingObjectChanged);
                dataImport.Datasource = strPath;
                dataImport.TargetPath = TempPath;
                dataImport.JustCopy = true;

                // 获取空间参考
                ISpatialReference spatialRef = null;
                IEnumDataset enDataset = wsTarget.get_Datasets(esriDatasetType.esriDTAny);
                IDataset dsCurrent = enDataset.Next();
                while (dsCurrent != null)
                {
                    if (dsCurrent is IGeoDataset)
                    {
                        spatialRef = (dsCurrent as IGeoDataset).SpatialReference;
                        break;
                    }

                    dsCurrent = enDataset.Next();
                }
                dataImport.SpatialReference = spatialRef;
                enumDataType dataType = enumDataType.PGDB;

                // 设置数据类型
                string strName = System.IO.Path.GetExtension(strPath);
                if (string.IsNullOrEmpty(strName))  // Shp File
                {
                    dataType = enumDataType.SHP;
                }
                else if (strName.ToLower() == ".gdb")
                {
                    dataType = enumDataType.FileGDB;
                }
                else // MDB
                {
                    dataType = enumDataType.PGDB;
                }
                dataImport.DataType = dataType;
                if (dataType != enumDataType.PGDB)
                {
                    AEAccessFactory.CreatePGDB(TempPath, "Query.mdb");
                }

                dataImport.Import();

                // 获取Base/Query库Workspace和ADO连接
                strBaseName = (dataType == enumDataType.PGDB ? "Base.mdb" : (dataType == enumDataType.FileGDB ? "Base.gdb" : "Base"));
                strQueryName = (dataType == enumDataType.PGDB ? strBaseName : "Query.mdb");
                baseDataType = dataType;

                return true;
            }
            catch
            {
                return false;
            }
        }
Beispiel #32
0
 public static IWorkspaceFactory2 GetWorkspaceFactory(enumDataType databaseType)
 {
     IWorkspaceFactory2 workspacefacory = null;
     switch (databaseType)
     {
         case enumDataType.PGDB:
             {
                 workspacefacory = new AccessWorkspaceFactoryClass();
                 break;
             }
         case enumDataType.FileGDB:
             {
                 workspacefacory = new FileGDBWorkspaceFactoryClass();
                 break;
             }
         case enumDataType.SHP:
             {
                 workspacefacory = new ShapefileWorkspaceFactoryClass();
                 break;
             }
         default:
             {
                 return null;
             }
     }
     return workspacefacory;
 }
Beispiel #33
0
 private void rgpDataType_SelectedIndexChanged(object sender, EventArgs e)
 {
     txtDatasource.Text = "";
     dxErrorProvider.SetError(txtDatasource, null);
     m_DataType = (enumDataType)rgpDataType.SelectedIndex;
     if (m_DataType == enumDataType.VCT)
     {
         cmbSpatialRefLayer.Enabled = false;
         checkBoxUseSourceDirectly.Enabled = false;
     }
     else
     {
         cmbSpatialRefLayer.Enabled = true;
         checkBoxUseSourceDirectly.Enabled = true;
     }
 }
Beispiel #34
0
        public static IWorkspace OpenWorkspace(enumDataType wsType, string strPath)
        {
            IWorkspaceFactory2 wsFactory = GetWorkspaceFactory(wsType);
            if (wsFactory == null)
                throw new Exception("调用错误:打开Workspace时传入了未被支持的数据类型");

            try
            {
                return wsFactory.OpenFromFile(strPath, 0);
            }
            catch(Exception exp)
            {
                throw new Exception("打开Workspace时发生错误,可能的原因是数据路径与数据类型不一致,信息:" + exp.ToString());
            }
        }