Android中通过Exifinterface读取图片地理位置信息


Android2.0后新增的一个类 
相关Tag: 
    TAG_DATETIME  时间日期 
  TAG_FLASH      闪光灯 
  TAG_GPS_LATITUDE     纬度 
  TAG_GPS_LATITUDE_REF    纬度参考 
  TAG_GPS_LONGITUDE         经度 
  TAG_GPS_LONGITUDE_REF     经度参考 
  TAG_IMAGE_LENGTH          图片长 
  TAG_IMAGE_WIDTH          图片宽 
  TAG_MAKE             设备制造商 
  TAG_MODEL          设备型号 
  TAG_ORIENTATION            方向 
  TAG_WHITE_BALANCE        白平衡

/**
 * 获取照片其他附属属性
 *
 * @param uri
 */
public void getImageExifInterfaceData(Uri uri) {
    ExifInterface exifInterface = null;
    try {
        String path = CommonUtil.getRealFilePathFromUri(this, uri);//获取图片文件的绝对路径
        exifInterface = new ExifInterface(path);
        String datetime = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);// 拍摄时间
        String deviceName = exifInterface.getAttribute(ExifInterface.TAG_MAKE);// 设备品牌
        String deviceModel = exifInterface.getAttribute(ExifInterface.TAG_MODEL); // 设备型号
        String latValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
        String lngValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
        String latRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
        String lngRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
        if (latValue != null && latRef != null && lngValue != null && lngRef != null) {
            try {
                float output1 = convertRationalLatLonToFloat(latValue, latRef);
                float output2 = convertRationalLatLonToFloat(lngValue, lngRef);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 * 目前想存储Double类型坐标,但是通过getAttribute(String tag)取出来的内容形如:
   112/1,39/1,288172/3278,其实就是“度分秒”拆分后,分母除以1的结果
 * @param rationalString
 * @param ref
 * @return
 */
private static float convertRationalLatLonToFloat(
        String rationalString, String ref) {

    String[] parts = rationalString.split(",");

    String[] pair;
    pair = parts[0].split("/");
    double degrees = Double.parseDouble(pair[0].trim())
            / Double.parseDouble(pair[1].trim());

    pair = parts[1].split("/");
    double minutes = Double.parseDouble(pair[0].trim())
            / Double.parseDouble(pair[1].trim());

    pair = parts[2].split("/");
    double seconds = Double.parseDouble(pair[0].trim())
            / Double.parseDouble(pair[1].trim());

    double result = degrees + (minutes / 60.0) + (seconds / 3600.0);
    if ((ref.equals("S") || ref.equals("W"))) {
        return (float) -result;
    }
    return (float) result;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值