我有一个地址,我想知道坐标。例如,地址是纽约皇后区的“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
是什么?
答案 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);