大家有没有这种需求,已知一张分幅影像的图幅号是XXXXXXX,前提是这个图幅号必须是按照国家标准进行分幅设定的。根据这个图幅号,按要求返回比例尺。代码如何实现呢?
/// <summary>
/// 通过图幅号获取比例尺字母
/// </summary>
/// <param name="newMapnumber"></param>
/// <returns></returns>
public int getScaleDenominatorNumberByMapNumber(string newMapnumber)
{
string[] newMapnumberInfo = GetInfoFromNewMapnumber(newMapnumber);
if (newMapnumberInfo == null)
{
return -1;
}
string nScaleStr = newMapnumberInfo[2];
int scaleNumber = NewMapnumber_GetScaleDenominatorNumberByScaleStr(nScaleStr);
if (scaleNumber == -1)
{
return -1;
}
return scaleNumber;
}
/// <summary>
/// Get 100W Row/100W Column/ScaleStr/Rownum/Columnnum from new mapnumber
/// 从新图号获得比例尺、行列号信息([0]:百万行;[1]:百万咧;[2]:比例尺代码;[3]:行号;[4]:列号)
/// </summary>
/// <param name="newMapnumber"></param>
/// <returns></returns>
public string[] GetInfoFromNewMapnumber(string newMapnumber)
{
try
{
string[] strs = new string[5];
if (!NewMapnumber_Check(newMapnumber))
{
return null;
}
int length = newMapnumber.Length;
string n100WR = "";
string n100WC = "";
string nScaleStr = "";
string nR = "";
string nC = "";
if (length == 3)
{
n100WR = newMapnumber.Substring(0, 1);
n100WC = newMapnumber.Substring(1, 2);
}
else
{
n100WR = newMapnumber.Substring(0, 1);
n100WC = newMapnumber.Substring(1, 2);
nScaleStr = newMapnumber.Substring(3, 1);
if (length == 10)
{
nR = newMapnumber.Substring(4, 3);
nC = newMapnumber.Substring(7, 3);
}
else
{
nR = newMapnumber.Substring(4, 4);
nC = newMapnumber.Substring(8, 4);
}
}
if (!string.IsNullOrEmpty(n100WR) && !string.IsNullOrEmpty(n100WC))
{
strs[0] = n100WR;
strs[1] = n100WC;
strs[2] = nScaleStr;
strs[3] = nR;
strs[4] = nC;
return strs;
}
return null;
}
catch
{
throw;
}
}
/// <summary>
/// Newmapnumber get scale denominator number by scale string
/// 通过比例尺字符串获取新图幅号的比例分母数
/// </summary>
/// <param name="scaleStr"></param>
/// <returns></returns>
private int NewMapnumber_GetScaleDenominatorNumberByScaleStr(string scaleStr)
{
switch (scaleStr)
{
case "":
return 1000000;
case null:
return 1000000;
case "B":
return 500000;
case "C":
return 250000;
case "D":
return 100000;
case "E":
return 50000;
case "F":
return 25000;
case "G":
return 10000;
case "H":
return 5000;
case "I":
return 2000;
case "J":
return 1000;
case "K":
return 500;
default:
return -1;
}
}