Geopoint Long和Lat表示为int,但MediaStore中的Long和Lat字段表示为双精度?

时间:2012-03-25 23:16:04

标签: android types geolocation

我对这些字段的数据类型感到困惑。我想得到存储在手机上的图像的长和lat,并将其表示为Geopoint。我这样做的代码是:

double long_ = imageCursor.getDouble(imageCursor.getColumnIndex(MediaStore.Images.Media.LONGITUDE));
double lat = imageCursor.getDouble(imageCursor.getColumnIndex(MediaStore.Images.Media.LATITUDE));

出现混淆是因为它们是浮点值,但Geopoint构造函数将long和lat作为int类型。我必须手动进行一些转换吗?

1 个答案:

答案 0 :(得分:4)

  

我必须手动进行一些转换吗?

是。引用the documentationGeoPoint是“表示一对纬度和经度的不可变类,存储为整数微小数”。

Android的其余部分(包括MediaStore)将纬度和经度保持为度数的浮点值,而不是微度等级的整数值。创建GeoPoint时,您需要进行转换。我使用这样的实用方法:

  private GeoPoint getPoint(double lat, double lon) {
    return(new GeoPoint((int)(lat*1000000.0), (int)(lon*1000000.0)));
  }