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; }
版权声明:本文标题:经纬度的度数和十进制数互相转换工具 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686574189a83456.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论