public staticcharGetMillionRowID(int lat, SheetScale scale) { int scaleIndex = Convert.ToInt32(scale); int a = lat / (4 * 3600); return LatCharArray[a]; }
public staticintGetMillionColumnID(int lon) { int b = lon / (6 * 3600) + 31; return b; }
public staticcharGetScaleID(SheetScale scale) { int scaleIndex = Convert.ToInt32(scale); char scaleId = ScaleCharArray[scaleIndex]; return scaleId; }
public staticstringGetRowID(int lat, SheetScale scale) { int scaleIndex = Convert.ToInt32(scale); int c = Convert.ToInt32(4 * 3600 / LatDArray[scaleIndex]) - Convert.ToInt32((lat % (4 * 3600)) / LatDArray[scaleIndex]); return c.ToString().PadRight(3,'0'); }
public staticstringGetColumnID(int lon, SheetScale scale) { int scaleIndex = Convert.ToInt32(scale); int d = Convert.ToInt32((lon % (6 * 3600)) / LonDArray[scaleIndex]) + 1; return d.ToString().PadRight(3, '0'); }
/// <summary> /// 根据图幅号获取经纬度范围(北半球) /// </summary> /// <param name="frmNo">图幅号</param> /// <returns>图幅范围</returns> /// <exception cref="Exception">图幅号错误异常</exception> public static SheetArea GetSheetArea(string frmNo) { if (frmNo.Length != 10) throw new Exception("图幅号错误,请输入标准十位图幅编号!"); int latMillionNum, lonMillionNum, latNum, lonNum, scaleNum; char latMillionChar, scaleChar;
latMillionChar = char.Parse(frmNo.Substring(0, 1)); latMillionNum = LatCharArray.ToList().IndexOf(latMillionChar); if (latMillionNum == -1) throw new Exception("图幅号错误,请检查百万比例尺纬度号!");
scaleChar = char.Parse(frmNo.Substring(3, 1)); scaleNum = ScaleCharArray.ToList().IndexOf(scaleChar); if (scaleNum == -1) throw new Exception("图符号错误,请检查比例尺代号!");
if (!int.TryParse(frmNo.Substring(1, 2), out lonMillionNum)) throw new Exception("图幅号错误,请检查百万比例尺经度号!"); if (!int.TryParse(frmNo.Substring(4, 3), out latNum)) throw new Exception("图幅号错误,请检查纬度号!"); if (!int.TryParse(frmNo.Substring(7, 3), out lonNum)) throw new Exception("图幅号错误,请检查经度号!"); SheetArea sheetArea = new SheetArea(); sheetArea.LatMin = latMillionNum * 4 * 3600 + (4 * 3600 / LatDArray[scaleNum] - latNum) * LatDArray[scaleNum]; sheetArea.LatMax = sheetArea.LatMin + LatDArray[scaleNum];