一、经纬度转度分秒
算法示例,假如有一个十进制的纬度:36.12432314
,其转换成度分秒的规则是:
整数部分为度,小数部分 * 60 得到的整数部分为分,得到的小数部分 * 60为秒
即:36为度,0.12432314 * 60 = 7.4593884
中的7为分,0.4593884 * 60 = 27.5639304
为秒, 最终结果:36°7′27.6
//度转度°分′秒″
function ToDegrees(val) {
if (typeof(val) == "undefined" || val == "") {
return "";
}
var i = val.indexOf('.');
var strDu = i < 0 ? val : val.substring(0, i); //获取度
var strFen = 0;
var strMiao = 0;
if (i > 0) {
var strFen = "0" + val.substring(i);
strFen = strFen * 60 + "";
i = strFen.indexOf('.');
if (i > 0) {
strMiao = "0" + strFen.substring(i);
strFen = strFen.substring(0, i); //获取分
strMiao = strMiao * 60 + "";
i = strMiao.indexOf('.');
strMiao = strMiao.substring(0, i + 4); //取到小数点后面三位
strMiao = parseFloat(strMiao).toFixed(2); //精确小数点后面两位
}
}
return strDu + "," + strFen + "," + strMiao;
}
二、度分秒转经纬度
同上相反即:36 + 7/60 + 27.6/3600 ≈ 36.12432314
//度°分′秒″转度
function ToDigital(strDu, strFen, strMiao, len) {
len = (len > 6 || typeof(len) == "undefined") ? 6 : len; //精确到小数点后最多六位
strDu = (typeof(strDu) == "undefined" || strDu == "") ? 0 : parseFloat(strDu);
strFen = (typeof(strFen) == "undefined" || strFen == "") ? 0 : parseFloat(strFen) / 60;
strMiao = (typeof(strMiao) == "undefined" || strMiao == "") ? 0 : parseFloat(strMiao) / 3600;
var digital = strDu + strFen + strMiao;
if (digital == 0) {
return "";
} else {
return digital.toFixed(len);
}
}
三、硬转
看到这种有点规则的,可以尝试硬转看看效果,因为这种看起来就有点像度分秒的形式,再结合实现生产可能就是用的这种坐标,大胆尝试
var coord = ["1025553.44", "250601.56"];
var du = Math.floor(coord[0]/10000),
fen = Math.floor(coord[0]%10000/100),
miao = coord[0]%10000%100;