将GPS坐标(纬度和经度)转换为十进制

时间:2013-01-28 07:53:16

标签: gps latitude-longitude

我从GPS设备获得经纬度。他们看起来像21081686N,079030977E

如果我手动将它们转换为21°08'16.86“N,79°03'09.77”E并在Google地图上查看,位置几乎正确。

如何在java中转换这些值并准确地将它们转换为十进制?任何JAVA库?

谢谢,

1 个答案:

答案 0 :(得分:1)

您不应该需要一个库,而只需将字符串分解为其组成部分。也许这会有所帮助。请注意我是一名Java程序员,因此这种语法可能非常错误。 (也许将你的问题重新提交给Java)

通过十进制我假设你的意思是十进制度而不是ddd.mmss

// Object for Lat/Lon pair
public class LatLonDecimal
{
    public float lat = 0.0;
    public float lon = 0.0;
}

// Convert string e.g. "21081686N,079030977E" to Lat/Lon pair
public LatLonDecimal MyClass::convert(String latlon)
{
    String[] parts = latlon.split(",");

    LatLonDecimal position = new LatLonDecimal();
    position.lat = convertPart(parts[0]);
    position.lon = convertPart(parts[1]);
    return position;
}

// Convert substring e.g. "21081686N" to decimal angle
private float MyClass::convertPart(String angle)
{
    while (angle.length() < 10)
        angle = StringBuffer(angle).insert(0, "0").toString();

    int deg = Integer.parseInt( angle.substring(0,2) );
    int min = Integer.parseInt( angle.substring(3,4) );
    int sec = Integer.parseInt( angle.substring(5,6) );
    int sub = Integer.parseInt( angle.substring(7,8) );
    String hem = angle.substring(9);

    float value = deg + min / 60.0f + sec / 3600.0f + sub / 360000.0f;
    float sign = (hem == "S") ? -1.0 : 1.0; // negative southern hemisphere latitudes
    return sign * value;
}