地理编码android - 经度和纬度值不正确

时间:2012-02-22 17:37:15

标签: android

我有一个地址,我想知道坐标。例如,地址是纽约皇后区的“Skillman Ave”。根据maps.google.com,坐标为:40.747281, -73.9283169。在我的应用程序中,我有这样的功能:

 public GeoPoint addressToGeo(String adr) {
    Geocoder coder = new Geocoder(this);
    List<Address> address = null;
    GeoPoint coordinates;


    try {
        address = coder.getFromLocationName(adr, 1);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    if (address == null) {
        return null;
    }
    Address location = address.get(0);
    location.getLatitude();
    location.getLongitude();

    coordinates = new GeoPoint((int) (location.getLatitude() *1E6),
                      (int) (location.getLongitude() * 1E6));

     return coordinates;
}

将地址作为参数,希望它会返回坐标。我的调试器说列表地址中的第一个元素包含这些信息:

[Address[addressLines=[0:"Skillman Ave",1:"Queens, New York",2:"Amerikas forente stater"],feature=Skillman Ave,admin=New York,sub-admin=Queens,locality=Queens,thoroughfare=Skillman Ave,postalCode=null,countryCode=US,countryName=Amerikas forente stater,hasLatitude=true,latitude=40.747281,hasLongitude=true,longitude=-73.9283169,phone=null,url=null,extras=null]]

如果您查看纬度和经度变量,这似乎是正确的。但是当我输入这段代码时:

GeoPoint test; 
test = addressToGeo("Skillman Ave"); 
double latitude = test.getLatitudeE6(); 
double longitude = test.getLongitudeE6(); 

String lat = Double.toString(latitude);
String lng = Double.toString(longitude);
String total = lat + " " + lng; 
toAdress.setText(total); 

toAdress textField将包含4.0747281E7, -7.3928316E7逗号不在正确位置,每个双尾的E7是什么?

3 个答案:

答案 0 :(得分:4)

'E7'表示您需要乘以10 ^ 7才能得到实际数字。在这种情况下,它会给你40747281.然后你需要将其格式化为一个合适的坐标。

Ankit的代码看起来可能会这样做,但要测试以确保。

答案 1 :(得分:3)

您拥有所有正确的数据,因此这个问题实际上是关于格式化双精度数。使用DecimalFormat

用它来显示测试中的纬度/经度点:

DecimalFormat formatter = new DecimalFormat("0.0000000");
String lat = formatter.format(test.getLatitudeE6() / 1E6); 
String lon = formatter.format(test.getLongitudeE6() / 1E6); 
toAddress.setText(lat + " " + lon); 

答案 2 :(得分:2)

试试这个。

String lat = Double.toString(latitude);
String lng = Double.toString(longitude);

lat= (float) (lat / 1E6);
lng = (float)(lon / 1E6);

System.out.println("lat :" + (float) lat / 1E6);
System.out.println("lon :" + (float) lon / 1E6);