【问题标题】:Is it possible to give a sexagesimal input for Latitude and Longitude是否可以为纬度和经度提供六十进制输入
【发布时间】:2011-07-11 14:24:51
【问题描述】:

我想知道你是否可以给一个六十进制输入作为一个位置,就像你可以在 android 中给一个十进制输入一样:

 // Decimal input
 double src_lat = 46.550952;
 double src_long = 15.651366;

 GeoPoint srcGeoPoint = new GeoPoint((int) (src_lat * 1E6),
        (int) (src_long * 1E6));

所以我的问题如下 - 有没有办法输入 sexagesimal 数字而不是 decimal? 我的数据库中有六十进制数,形式为“46.550952、15.651366 等”。 但是当我将它们作为小数输入时,它显然在谷歌地图上给了我错误的位置,这是一个问题。

如果有任何答案或发现,我将不胜感激。

--- 编辑 ---

我刚刚放弃并创建了一个将六十进制转换为十进制的函数 =) 因为我得到的所有字符串(数字)都是 10 个字符长,所以我可以简单地对分钟和秒进行子串化。

代码如下:

private double turnSexagesimalToDecimal(String number) {
    double sumDivMinutes = 0;
        String degree = number;

        String degrees = degree.substring(0, 2);

        String minutes = degree.substring(3, 5);

        String second1 = degree.substring(5, 7);
        String second2 = degree.substring(7);
        String seconds = second1 + "." + second2;

        double divideSeconds = Double.parseDouble(seconds) / 60;

        sumDivMinutes = (Double.parseDouble(minutes) + divideSeconds) / 60;

        sumDivMinutes = (double)Math.round(sumDivMinutes * 1000000) / 1000000;
        sumDivMinutes = sumDivMinutes + Double.parseDouble(degrees);

    return sumDivMinutes;
}

【问题讨论】:

    标签: android api location decimal


    【解决方案1】:

    为什么不写一个函数在两者之间进行转换呢?

    double decimalToSexagecimal(double decimalDegrees) { 
        String dd = new String(decimalDegrees);
        String[] ddArr = dd.split(".");
        // .75/100 = 75, .75 * 60/100
        double sd = Double.valueOf(ddArr).doubleValue() * 60 / 100;
        return Double.valueOf(ddArr[0] + "." + sd);
    }
    
    sexagecimalToDecimal(double sexagecimalDegreees) { ... }
    

    【讨论】:

    • 谢谢你的回答 =) 事实上我确实放弃了,只是像你建议的那样做了一个在两者之间转换的函数。
    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2013-01-05
    • 2010-11-11
    • 2014-09-12
    • 2018-01-10
    相关资源
    最近更新 更多