lisp 所在图幅号计算_根据图幅左下角经纬度计算其所在图幅号

//char *MapNo:图幅号

//int lon_deg:经度-度

//lon_min:经度-分

//lon_sec:经度-秒

//lat_deg:纬度-度

//lat_min:纬度-分

//lat_sec:纬度-秒

//long lscale:比例尺

bool Trans(char *MapNo,int lon_deg,lon_min,lon_sec,lat_deg,lat_min,lat_sec,long lscale)

{

int ScaleID;

char buf[10];

char S[] = "ABCDEFGHIJKLMNOPQRSTUV"; // 1:1000000地形图图幅所在纬度带字符码

long Scale[] = {1000000,500000,250000,100000,50000,25000,10000,5000}; // 图幅比例尺

double df[] = {14400,7200,3600,1200,600,300,150,75}; // 图幅纬差,单位秒

double dr[] = {21600,10800,5400,1800,900,450,225,112.5}; // 图幅经差单位秒

long r=lon_deg*3600+lon_min*60+lon_sec; // 经度, 单位秒

long f=lat_deg*3600+lat_min*60+lat_sec; // 纬度单位秒

for(ScaleID=0;ScaleID<8;ScaleID++){

if(Scale[ScaleID]==lscale){

break;

}

}

if(ScaleID==8){

return false;

}

int a = f/(4*3600);

int b = r/(6*3600)+31;

int c = (int)(4*3600/df[ScaleID])-(int)((f%(4*3600))/df[ScaleID]);

int d = (int)((r%(6*3600))/dr[ScaleID])+1;

MapNo[0] = S[a];

strcpy(MapNo+1,itoa(b,buf,10));

if(ScaleID==0){

return true;

}

MapNo[3] = S[ScaleID];

itoa(c,buf,10);

if(c<10){

MapNo[4]=MapNo[5]='0';

strcpy(MapNo+6,buf);

}else if(c<100) {

MapNo[4]='0';

strcpy(MapNo+5,buf);}

else if(c<1000){

strcpy(MapNo+4,buf);

}else{

return false;

}

itoa(d,buf,10);

if(d<10){

MapNo[7]=MapNo[8]='0';

strcpy(MapNo+9,buf);

}else if(d<100) {

MapNo[7]='0';

strcpy(MapNo+8,buf);

}else if(d<1000){

strcpy(MapNo+7,buf);

}else{

return false;

}

MapNo[10] = '"0';

return true;

}

本篇文章来源于GIS动力站|www.gispower.org 原文链接:http://www.gispower.org/article/dev/2009/720/0972093211BBBBG0BB3063IEDH8F8I.html

问:

想把一些数字格式化为字符串,并在不足的位置补0

______________________________________________________________________________________________

答1:

int i = 1;

string j = string.Format("{0:D4}",i);

Response.Write(j);

______________________________________________________________________________________________

答2:

int k=99;

string s = k.ToString("d4"); s-->0099

______________________________________________________________________________________________

答3:

or

int i,e;//i=1--99

string e=i.Tostring().PadLeft(4, '0');

______________________________________________________________________________________________

答4:

http://expert.csdn.net/Expert/topic/1781/1781640.xml?temp=.246731

______________________________________________________________________________________________

答5:

int k=99;

string s = k.ToString();

s = Right("0000" + s , 4);

_________________________________________________________

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
'计算图幅 Option Explicit Type ArrayData Data() As String Count As Integer End Type Public Function getSheetNumber(strLat As String, strLon As String, ScaleID As String) As String Dim strLatErr As String, strLonErr As String Dim dblLatErr As String, dblLonErr As String Dim dblLat As Double, dblLon As Double Dim a As String, b As Integer, c As Integer, d As Integer Select Case ScaleID Case "A" '1:100W strLatErr = "4°00′00″": strLonErr = "6°00′00″" Case "B" '1:50W strLatErr = "2°00′00″": strLonErr = "3°00′00″" Case "C" '1:25W strLatErr = "1°00′00″": strLonErr = "1°30′00″" Case "D" '1:10W strLatErr = "00°20′00″": strLonErr = "00°30′00″" Case "E" '1:5W strLatErr = "00°10′00″": strLonErr = "00°15′00″" Case "F" '1:2.5W strLatErr = "00°05′00″": strLonErr = "00°07′30″" Case "G" '1:1W strLatErr = "00°02′30″": strLonErr = "00°03′45″" Case "H" '1:0.5W strLatErr = "00°01′15″": strLonErr = "00°01′52.5″" Case Else ' getSheetNumber = "比例尺代码错误" Exit Function End Select dblLatErr = changeToSecond(strLatErr): dblLonErr = changeToSecond(strLonErr) dblLat = changeToSecond(strLat): dblLon = changeToSecond(strLon) a = Chr(64 + Int(dblLat / changeToSecond("4°00′00″")) + 1) b = Int(dblLon / changeToSecond("6°00′00″") + 31) If ScaleID <> "A" Then c = changeToSecond("4°00′00″") / dblLatErr - Int(mMod(dblLat, changeToSecond("4°00′00″")) / dblLatErr) d = Int(mMod(dblLon, changeToSecond("6°00′00″")) / dblLonErr) + 1 getSheetNumber = a & b & ScaleID & Format(c, "000") & Format(d, "000") Else getSheetNumber = a & b End If End Function Private Function changeToSecond(strDeg As String) As Double Dim intD As Integer, intM As Integer, dblS As Double intD = Int(strOperate(strDeg, "°").Data(0)) dblS = CDbl(Left(strOperate(strDeg, "′").Data(1), Len(strOperate(strDeg, "′").Data(1)) - 1)) intM = Int(Left(strOperate(strDeg, "°").Data(1), 2)) changeToSecond = intD * 60 + intM + dblS / 60 End Function Private Function strOperate(ByVal strX As String, ByVal strA As String) As ArrayData '分割字符串 Dim i As Integer, j As Integer, k As Integer Dim cnt As Integer, strTemp As String If Trim(strA) <> "" Then strX = Trim(strX) strA = Trim(strA) strX = strX & strA For i = 1 To Len(strX) If Mid(strX, i, Len(Trim(strA))) = strA Then cnt = cnt + 1 i = i + Len(strA) - 1 End If Next i strOperate.Count = cnt ReDim strOperate.Data(cnt - 1) For j = 1 To Len(strX) If Mid(strX, j, Len(strA)) = strA Then strOperate.Data(k) = Left(strX, j - 1) strX = Trim(Right(strX, Len(strX) - Len(strOperate.Data(k)) - Len(strA))) k = k + 1 j = 0 End If Next j Else strX = Trim(strX) strTemp = strX For i = 1 To Len(strTemp) If Mid(strTemp, i, 1) = " " Then cnt = cnt + 1 strTemp = Trim(Right(strTemp, Len(strTemp) - i + 1)) i = 0 End If Next i strX = strX & " " strOperate.Count = cnt + 1 ReDim strOperate.Data(cnt) For i = 1 To Len(strX) If Mid(strX, i, 1) = " " Then strOperate.Data(j) = Left(strX, i - 1) strX = LTrim(Right(strX, Len(strX) - i + 1)) j = j + 1 i = 0 End If Next i End If End Function Private Function mMod(dblF As Double, dblS As Double) As Double Dim intM As Integer intM = Int(dblF / dblS) mMod = dblF - dblS * intM End Function Private Sub Form_Load() Text1 = getSheetNumber("39°22′30″", "114°33′45″", "A") Text1 = Text1 & vbCrLf & getSheetNumber("39°22′30″", "114°33′45″", "B") Text1 = Text1 & vbCrLf & getSheetNumber("39°22′30″", "114°33′45″", "C") Text1 = Text1 & vbCrLf & getSheetNumber("39°22′30″", "114°33′45″", "D") Text1 = Text1 & vbCrLf & getSheetNumber("39°22′30″", "114°33′45″", "E") Text1 = Text1 & vbCrLf & getSheetNumber("39°22′30″", "114°33′45″", "F") Text1 = Text1 & vbCrLf & getSheetNumber("39°22′30″", "114°33′45″", "G") Text1 = Text1 & vbCrLf & getSheetNumber("39°22′30″", "114°33′45″", "H") End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值