1.项目中遇到与经纬度打交道,数据库中保存为小数,显示的时候必须为度分秒。在网上找了找没有合适的。自己写了一下。如下代码:
{
fieldLabel: '经度',
name: 'BT_LONGITUDE',
value:' ° \' "',
id:'longitude',
// xtype: 'numberfield',
width:250
},{
fieldLabel: '纬度',
name: 'BT_LATITUDE',
value:' ° \' "',
id:'latitude',
// xtype: 'numberfield',
width:250
},
在actioncomplete方法里处理后根据定义的id,将数据放到指定的位置即可。下面是这个方法的代码:
form.on('actioncomplete',function(_form, _action){
var longitude = Ext.getCmp("longitude");
var sValue = ' ° \' "';
var fValue = Ext.num(longitude.getValue(), 0);
if(fValue != 0){
var du=Math.floor(Math.abs(fValue)); //获取整数部分
var temp=Math.abs(fValue-du)*60;
var fen=Math.floor(Math.abs(temp)); //获取整数部分
var miao=(temp-fen)*60;
if(fValue<0)
sValue = "-"+du+'°'+fen+'\''+miao.toFixed(2)+'"';
sValue = du+'°'+fen+'\''+miao.toFixed(2)+'"';
}
longitude.setValue(sValue);
var latitude = Ext.getCmp("latitude");
var sValue = ' ° \' "';
var fValue = Ext.num(latitude.getValue(), 0);
if(fValue != 0){
var du=Math.floor(Math.abs(fValue)); //获取整数部分
var temp=Math.abs(fValue-du)*60;
var fen=Math.floor(Math.abs(temp)); //获取整数部分
var miao=(temp-fen)*60;
if(fValue<0)
sValue = "-"+du+'°'+fen+'\''+miao.toFixed(2)+'"';
sValue = du+'°'+fen+'\''+miao.toFixed(2)+'"'
}
latitude.setValue(sValue);
})
这是显示页面的处理,关于数据库保存的时候处理为下面的代码所示:
//将经纬度转化为小数
converJWD = function(x){
if(!x) return 0;
try{
x = x.replace('E', '').replace('N', '');
var l1 = x.indexOf('°');
var l2 = x.indexOf('\'');
var l3 = x.indexOf('"');
var du = parseFloat(x.substring(0, l1), 0);
var fen = parseFloat(x.substring(l1+1, l2), 0);
var miao = parseFloat(x.substring(l2+1, l3), 0);
if(du<0)
return "-"+du + (fen +(miao/60))/60;
return du + (fen +(miao/60))/60;
}catch(e){
return 0;
}
}
比如我项目中是以map形式传递过去的,我获取到后,那这个方法处理一下即可实现小数的转换:
if(form.BT_LONGITUDE !="")
form.put("BT_LONGITUDE", converJWD(form.BT_LONGITUDE));
if(form.BT_LATITUDE !="")
form.put("BT_LATITUDE", converJWD(form.BT_LATITUDE));
处理完后保存到数据库后的效果图为:
前台界面显示如下图:
这样起初添加,固定的格式为度分秒格式。