public static BinaryFileMapInfo Parse(string info) { string[] fields = info.Split(separator); for (int i = 0; i < fields.GetLength(0); i++) { fields[i] = fields[i].Trim(charsToTrim); } BinaryFileMapInfo result = new BinaryFileMapInfo(); // Field indices from http://www.harrisgeospatial.com/docs/ENVIHeaderFiles.html result.projection = fields[0]; result.refX = int.Parse(fields[1]); result.refY = int.Parse(fields[2]); result.refEasting = double.Parse(fields[3]); result.refNorthing = double.Parse(fields[4]); double pixelSizeX = double.Parse(fields[5]); double pixelSizeY = double.Parse(fields[6]); if (Mathf.Abs((float)(1 - pixelSizeX / pixelSizeY)) > pixelSizeTolerance) { throw new System.ArgumentException("Pixel sizes differ too much!"); } result.pixelSize = (pixelSizeX + pixelSizeY) / 2; return(result); }
private void ProcessMapInfo() { BinaryFileMapInfo info = BinaryFileMapInfo.Parse(data[mapInfoKey]); cellsize = (float)info.pixelSize; CoordinateConverter conv = new CoordinateConverter(cellsize); int deltaX = 1 - info.refX; // Lower left corner is map point (0, rows). The hdr top left coordinates are (1,1). int deltaY = -(rows + 1) + info.refY; // The amount of y pixels to move to reach lower left corner from reference point. lowerLeftCornerX = conv.TransformCoordinateByWebMercatorDistance(deltaX, info.refEasting); lowerLeftCornerY = conv.TransformCoordinateByWebMercatorDistance(deltaY, info.refNorthing); }