Grails:坐标格式未正确显示

时间:2013-09-10 19:21:46

标签: grails

我正在使用Google Maps Api v3,但此问题与Grails默认格式有关。在我的域类中,我有:

Float latitude;
Float longitude;

Google地图的正确坐标为:

36.5270612, -6.288596200000029

不幸的是,在节目中,它会显示:

365.270.624, -6.288.596.088.651.776

- 显示代码:

<p id="latitude"><g:fieldValue  bean="${bestInstance}" field="latitude"/></p>

不幸的是,编辑也不是很好。它显示:

3.65270624E8, -6.2885961E15

here的以下解决方案因为3.65270624 E8 格式而让我感到害怕:

${bestInstance.latitude.encodeAsHTML()}

我看了here,我们应该舍入到。以下代码应该可以使用

DecimalFormat decimalFormat = new DecimalFormat("0.000000");
decimalFormat.setRoundingMode(java.math.RoundingMode.DOWN);

来自documentation I found out: formatNumber。我尝试了以下代码(但结果与节目相同):

<g:formatNumber format="0.000000" number="${bestInstance.latitude}" type="number" />

我们如何在GSP文件中执行相同的操作?

2 个答案:

答案 0 :(得分:0)

我从params传递纬度和经度,我正在使用它们如下所示:

[ ${params.float('celat', defLat)}, ${params.float('celng', defLong)}]

其中 defLat defLong 是默认值,这很有用

答案 1 :(得分:0)

问题通常是输入是一个字符串。如果值是数字或字符串,我们必须特别仔细检查。我的解决方案:

1)在保存它们之前降低共聚物的精度(如果没有,会发生奇怪的事情!):

def create()
    (...)
    case 'POST':
        (...)
        params.putAt('latitude', reducePrecision(params.latitude))
        params.putAt('longitude', reducePrecision(params.longitude))
        (...)

private def reducePrecision(coordenate) {
    coordenate= Float.parseFloat(coordenate);
    return ( (float) ( (int) coordenate* 100000 ) / 100000 );       
}

2)在show.gsp中,获取值(两种方式对我有用):

<div id="latitude">${alojamientoInstance.latitude}</div>
<div id="longitude">${alojamientoInstance.longitude.encodeAsHTML()}</div>