admin管理员组

文章数量:1794759

经纬度的度数和十进制数互相转换工具

经纬度的度数和十进制数互相转换工具

在使用Google Maps的时候,需要根据经纬度进行定位,但手上的经纬度信都是标准度数表示的,还需要转换成十进制,使用计算机算了一下,感觉比较麻烦,加上好久没有 编程序了,一时手痒,写了一个经纬度的度数和十进制数转换工具,希望能提高一下效率,这里共享如下:

初始界面:

运行效果界面:

错误处理信:

软件下载地址

softbbs.it168/viewthread.php

 

对于源码,如果需要可以留言,其中算法处理代码如下:

//度数转换到十进制数的处理函数 //nType:标识经纬度类型,主要是为了处理参数校验的告警信 0:进度,1:纬度 //str:经纬度的度数字符串(以逗号分隔,例: 100,2,4 - 100度2分4秒) double CLDChangeDlg::Degree2Double(int nType, CString str) {     CString dstr;     int nPos,nPos2;     int num;     double d = 0.0;

    nPos = str.Find(',');     if(nPos == -1)     {         num = atoi((LPCTSTR)str);         if(nType == 0 && (num < 0 || num >= 180))         {             MessageBox("经度参数错误:度数必须是介于0~180的值!");             return d;         }         else if (nType == 1 && (num < 0 || num >= 90))         {             MessageBox("维度参数错误:度数必须是介于0~90的值!");             return d;         }         d += num;                return d;     }         dstr = str.Mid(0, nPos);     num = atoi((LPCTSTR)dstr);     if(nType == 0 && (num < 0 || num >= 180))     {         MessageBox("经度参数错误:度数必须是介于0~180的值!");         return d;     }     else if (nType == 1 && (num < 0 || num >= 90))     {         MessageBox("维度参数错误:度数必须是介于0~90的值!");         return d;     }     d += num;

    nPos++;     nPos2 = str.Find(',', nPos);     if(nPos == -1)     {         dstr = str.Mid(nPos);         num = atoi((LPCTSTR)str);         if(num < 0 || num >= 60)         {             if(nType == 0)             {                 MessageBox("经度参数错误:分数必须是介于0~60的值!");                 return d;             }             else if (nType == 1)             {                 MessageBox("维度参数错误:分数必须是介于0~60的值!");                 return d;             }             return d;         }         d += (double)num/(double)60.0;                return d;     }

    dstr = str.Mid(nPos, nPos2-nPos);     num = atoi((LPCTSTR)dstr);     if(num < 0 || num >= 60)     {         if(nType == 0)         {             MessageBox("经度参数错误:分数必须是介于0~60的值!");             return d;         }         else if (nType == 1)         {             MessageBox("维度参数错误:分数必须是介于0~60的值!");             return d;         }         return d;     }     d += (double)num/(double)60.0;

    nPos2++;     nPos = str.Find(',', nPos2);     if(nPos == -1)     {         dstr = str.Mid(nPos2);         num = atoi((LPCTSTR)dstr);         if(num < 0 || num >= 60)         {             if(nType == 0)             {                 MessageBox("经度参数错误:秒数必须是介于0~60的值!");                 return d;             }             else if (nType == 1)             {                 MessageBox("维度参数错误:秒数必须是介于0~60的值!");                 return d;             }             return d;         }         d += (double)num/(double)3600.0;                return d;     }

    dstr = str.Mid(nPos);     num = atoi((LPCTSTR)dstr);     if(num < 0 || num >= 60)     {         if(nType == 0)         {             MessageBox("经度参数错误:秒数必须是介于0~60的值!");             return d;         }         else if (nType == 1)         {             MessageBox("维度参数错误:秒数必须是介于0~60的值!");             return d;         }         return d;     }     d += (double)num/(double)3600.0;

    return d; }

//十进制数转换到度数的处理函数 //num:经纬度的double十进制数 //pstr:转换后的度数字符串(以逗号分隔,例: 100,2,4 - 100度2分4秒) void CLDChangeDlg::Double2Degree(double num, char * pstr) {     char str[50];     int n;     double d = num;

    strcpy(pstr,"");

    n = (int)d;     sprintf(str,"%d,", n);     strcat(pstr, str);

    d = double(d - n)*60;     n = (int)d;     sprintf(str,"%d,", n);     strcat(pstr, str);

    d = double(d - n)*60;     n = (int)d;     sprintf(str,"%d", n);     strcat(pstr, str);

    return; }

本文标签: 经纬度度数转换工具十进制数