Android How to Convert Latitude Longitude into Degree format

Julia picture Julia · Jul 24, 2016 · Viewed 8.2k times · Source

I want to convert latitude 40.7127837, longitude -74.0059413 and to the following format

N 40°42'46.0218" W 74°0'21.3876"

What is the best way to do that?

I tried methods like location.FORMAT_DEGREES, location.FORMAT_MINUTES and location.FORMAT_SECONDS, but I'm not sure how to convert them to the right format. Thanks.

strLongitude = location.convert(location.getLongitude(), location.FORMAT_DEGREES);
strLatitude = location.convert(location.getLatitude(), location.FORMAT_DEGREES);

Answer

antonio picture antonio · Jul 24, 2016

The Location.convert() method that you are using gives very good results and is well implemented and tested. You just need to format the output to suit your needs:

private String convert(double latitude, double longitude) {
    StringBuilder builder = new StringBuilder();

    if (latitude < 0) {
        builder.append("S ");
    } else {
        builder.append("N ");
    }

    String latitudeDegrees = Location.convert(Math.abs(latitude), Location.FORMAT_SECONDS);
    String[] latitudeSplit = latitudeDegrees.split(":");
    builder.append(latitudeSplit[0]);
    builder.append("°");
    builder.append(latitudeSplit[1]);
    builder.append("'");
    builder.append(latitudeSplit[2]);
    builder.append("\"");

    builder.append(" ");

    if (longitude < 0) {
        builder.append("W ");
    } else {
        builder.append("E ");
    }

    String longitudeDegrees = Location.convert(Math.abs(longitude), Location.FORMAT_SECONDS);
    String[] longitudeSplit = longitudeDegrees.split(":");
    builder.append(longitudeSplit[0]);
    builder.append("°");
    builder.append(longitudeSplit[1]);
    builder.append("'");
    builder.append(longitudeSplit[2]);
    builder.append("\"");

    return builder.toString();
}

When you call this method with your input coordinates:

String locationString = convert(40.7127837, -74.0059413);

You will receive this output:

N 40°42'46.02132" W 74°0'21.38868"