private unsafe void FillBand() { float[][] bandValues = new float[1][]; bandValues[0] = new float[_width * _height]; IArrayRasterDataProvider dataProvider = new ArrayRasterDataProvider <float>( _fileName, bandValues, _width, _height, _coordEnvelope, _spatialRef); float val; int row = _height - 1; float res = _resolutionX;//or _resolutionY float minX = (float)_coordEnvelope.MinX; float maxY = (float)_coordEnvelope.MaxY; _fs = new FileStream(_fileName, FileMode.Open, FileAccess.Read); _stReader = new StreamReader(_fs, Encoding.Default); fixed(float *ptr0 = bandValues[0]) { float *ptr = ptr0; while (!_stReader.EndOfStream) { string sLine = _stReader.ReadLine(); string[] parts = sLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < parts.Length; i++) { float.TryParse(parts[i], out val); ptr = ptr0 + row * _width + i; *ptr = val; } row--; } } _rasterBands.Add(dataProvider.GetRasterBand(1)); }
private unsafe void FillBand() { float[][] bandValues = new float[1][]; bandValues[0] = new float[_width * _height]; IArrayRasterDataProvider dataProvider = new ArrayRasterDataProvider <float>( _fileName, bandValues, _width, _height, _coordEnvelope, _spatialRef); float lon, lat, val; int col = 0, row = 0; float res = _resolutionX;//or _resolutionY float minX = (float)_coordEnvelope.MinX; float maxY = (float)_coordEnvelope.MaxY; _fs = new FileStream(_fileName, FileMode.Open, FileAccess.Read); _stReader = new StreamReader(_fs, Encoding.ASCII); fixed(float *ptr0 = bandValues[0]) { float *ptr = ptr0; while (!_stReader.EndOfStream) { string sLine = _stReader.ReadLine(); string[] parts = sLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); float.TryParse(parts[0], out lon); float.TryParse(parts[1], out lat); float.TryParse(parts[2], out val); lon -= 180; col = (int)((lon - minX) / _resolutionX); row = (int)((maxY - lat) / _resolutionY); ptr = ptr0 + row * _width + col; *ptr = val; } } _rasterBands.Add(dataProvider.GetRasterBand(1)); }