计算的方法如下图:
相应的代码如下(100W,50W,25W,10W,5W几种比例尺,其它比例尺同理):
#region 读取比例尺及行列号,并为经差及纬差赋值
if (newNumber.Length == 3) //100w
{
delX = 6;
delY = 4;
//100w比例尺的情况下,没有后边六位的行列号,直接认为h和l是0即可
}
else
{
//其它比例尺下,提取行列号
if (!int.TryParse(newNumber.Substring(4, 3), out h)
|| !int.TryParse(newNumber.Substring(7, 3), out l))
return null;
}
if (!int.TryParse(newNumber.Substring(1, 2), out L)) return null;
H = (int)newNumber[0] - (int)'A' + 1;
switch (newNumber[3])
{
case 'B': //50w
delX = 3;
delY = 2;
break;
case 'C': //25w
delX = 1.5;
delY = 1;
break;
case 'D': //10w
delX = 0.5;
delY = 1.0 / 3;
break;
case 'E': //5w
delX = 0.25;
delY = 1.0 / 6;
break;
default:
return null; //其它比例尺,暂没有写
}
#endregion
//左下角点
double x = (L - 31) * 6 + (l - 1) * delX;
double y = (H - 1) * 4 + (4 / delY - h) * delY;
ESRI.ArcGIS.Geometry.IPoint mPnt = new ESRI.ArcGIS.Geometry.PointClass();
mPnt.PutCoords(x, y);
mPnt.Z = 1; //这里赋Z值并没有实际作用,只是为了防止出现“the geometry has null z value”错误
resultLst.Add(mPnt);
mPnt = new ESRI.ArcGIS.Geometry.PointClass();
mPnt.PutCoords(x+delX, y);
mPnt.Z = 1;
resultLst.Add(mPnt);
mPnt = new ESRI.ArcGIS.Geometry.PointClass();
mPnt.PutCoords(x+delX, y+delY);
mPnt.Z = 1;
resultLst.Add(mPnt);
mPnt = new ESRI.ArcGIS.Geometry.PointClass();
mPnt.PutCoords(x, y+delY);
mPnt.Z = 1;
resultLst.Add(mPnt);
return resultLst;
}