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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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(); //} } }
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(); } }
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); } }
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 { } }
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); } }
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(); //} } }
/// <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); } }
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; } } }
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); }
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); } } }
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(); } } } }
/// <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; } } }
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); }
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(); } } }
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); } }
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() + "\"数据类型的栅格数据。"); } }
//以下为一些辅助帮助类 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); }
//创建输出删格文件 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); }
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()); }
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); } }
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; } }
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; }
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; } }
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()); } }