Java 解析图片信息 实现GPS定位

最近工作中遇到处理图片的一些场景,主要是批量提取图片中一些图像宽高、分辨率以及物理焦距等信息。然后在使用过程中也是看到图片中包含了很多其他有用的信息,本文就和大家一起分享这个小技巧吧。

 <dependency>
     <groupId>com.drewnoakes</groupId>
     <artifactId>metadata-extractor</artifactId>
     <version>2.16.0</version>
 </dependency>
//分析图片获取地址
public static  Map<String,String> PicAnalysis(String path) throws JpegProcessingException, 		IOException {
    Map<String,String> map = new HashMap();
    System.out.println("强大的语言正在识别图片地址...");
    File picFile = new File(path);
    Metadata metadata = JpegMetadataReader.readMetadata(picFile);
    Iterator<Directory> it = metadata.getDirectories().iterator();
    while (it.hasNext()) {
        Directory exif = it.next();
        Iterator<Tag> tags = exif.getTags().iterator();
        while (tags.hasNext()) {
            Tag tag = tags.next();
            map.put(tag.getTagName(),tag.getDescription());
            System.out.println(tag.getTagName() + ":" +tag.getDescription());
        }
    }
    System.out.println("图片分析完毕!");
    return map;
}

该方法会返回如下信息,相当多,这里整理成表格:

从图片中拿出的信息为度分秒格式:即30° 14' 32.52",我们需要将其转换为经纬度:如121.485559,31.240778,代码如下:

public static String translate(String Gps) {
    String a = Gps.split("°")[0].replace(" ", "");
    String b = Gps.split("°")[1].split("'")[0].replace(" ", "");
    String c = Gps.split("°")[1].split("'")[1].replace(" ", "").replace("\"", "");
    double gps = Double.parseDouble(a)+Double.parseDouble(b)/60 + Double.parseDouble(c)/60/60;
    return String.valueOf(gps);
}

获取到具体坐标后,这距离成功只有半步之遥,接下来调用高德地图的Api来获取具体地址。

 public static void getAddress( Map<String,String> param){
        String str = RequestUtils.sendGet("https://restapi.amap.com/v3/geocode/regeo", "key=5a3c45fd68d04bbc&location="+translate(param.get("GPS Longitude"))+","+translate(param.get("GPS Latitude")));
        JSONObject result = JSON.parseObject(str);
        System.out.println("拍摄时间:" +param.get("Date/Time"));
        System.out.println("拍摄地点:" +result.getJSONObject("regeocode").getString("formatted_address"));
        System.out.println("手机型号:" +param.get("Make") +" " + param.get("Model"));
        System.out.println(str);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在Java实现定位手机号可以通过解析XML文件来获取手机号的位置信息。首先,你需要创建一个XML文件,比如名为Location.xml,用来存储手机号和对应的位置信息。在XML文件中,你可以使用LinearLayout标签来定义布局。\[2\]接下来,你可以使用Java的IO流和XML解析库来读取XML文件并解析其中的数据。你可以使用BufferedReader类来读取XML文件的内容,并使用InputStreamReader类指定字符集。\[3\]然后,你可以使用XML解析库,比如DOM或SAX,来解析XML文件并提取出手机号的位置信息。你可以使用ParserConfigurationException、SAXException和IOException等异常类来处理解析过程中可能出现的异常情况。最后,你可以将解析得到的手机号位置信息返回给调用者。 #### 引用[.reference_title] - *1* *3* [JAVA手机号码归属地查询](https://blog.csdn.net/weixin_33321740/article/details/114165167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java实现手机定位java实时定位定位功能,gps定位-适合定位小孩,老人,保护家人安全】](https://blog.csdn.net/qq_34526228/article/details/119150487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值