java获取图片的GPS信息

您所在的位置:网站首页 图片GPS信息 java获取图片的GPS信息

java获取图片的GPS信息

2024-07-16 21:26| 来源: 网络整理| 查看: 265

很简单,直接上代码

注意:通过微信发送的图片是获取不到GPS信息,我自己是通过usb上传测试的(打成压缩包传也可以)

引用依赖

com.drewnoakes metadata-extractor 2.17.0

获取图片的全部信息

public void fileGpsText2(){ System.out.println("开始读取图片信息..."); File jpegFile = new File("C:\\Users\\hp\\Desktop\\IMG_20220630_102607.jpg"); Metadata metadata; try { metadata = JpegMetadataReader.readMetadata(jpegFile); Iterator it = metadata.getDirectories().iterator(); while (it.hasNext()) { Directory exif = it.next(); Iterator tags = exif.getTags().iterator(); while (tags.hasNext()) { Tag tag = (Tag) tags.next(); System.out.println(tag); } } System.out.println("图片信息读取完成!"); } catch (JpegProcessingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

得到的结果 在这里插入图片描述 获取图片的经纬度,手机型号,拍摄时间,拍摄地址

@Test public void fileGpstext3(){ File file = new File("C:\\Users\\hp\\Desktop\\IMG_20220630_102607.jpg"); JSONObject jsonObject = getPosition(file); Map map = getAddress(jsonObject); String gps_longitude = jsonObject.getString("GPS Longitude");//经度 String gps_latitude = jsonObject.getString("GPS Latitude");//纬度 double longitude = transformPosition(gps_longitude); double latitude = transformPosition(gps_latitude); System.out.println("经度:"+longitude+" 纬度:"+latitude); System.out.println("手机型号:"+jsonObject.getString("Make")+" "+jsonObject.getString("Model")); System.out.println("拍摄时间:"+jsonObject.getString("Date/Time")); System.out.println("拍摄地址:"+map.get("formatted_address")+" "+map.get("sematic_description")); } private static JSONObject getPosition(File file) { JSONObject jsonObject = new JSONObject(); Metadata metadata = null; try { metadata = JpegMetadataReader.readMetadata(file); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { jsonObject.put(tag.getTagName(), tag.getDescription()); } } } catch (JpegProcessingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return jsonObject; } /** * 经纬度转换 * @param s * @return */ private static double transformPosition(String s) { String a = s.split("°")[0].replace(" ", ""); String b = s.split("°")[1].split("'")[0].replace(" ", ""); String c = s.split("°")[1].split("'")[1].replace(" ", "").replace("\"", ""); double gps_dou = Double.parseDouble(a)+Double.parseDouble(b)/60 + Double.parseDouble(c)/60/60; return gps_dou; } /** * 经纬度定位结果(百度地图) * @param * @param * @return */ private static Map getAddress(JSONObject json) { String log = String.valueOf(transformPosition(json.getString("GPS Longitude")));//经度 String lat = String.valueOf(transformPosition(json.getString("GPS Latitude")));//纬度 String ak = "自己的百度应用ak"; String urlString = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=" + ak + "&output=json&coordtype=wgs84ll&location=" + lat + "," + log; Map map = new LinkedHashMap(); try { URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if (conn != null) { InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream(), "UTF-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String data = null; if ((data = bufferedReader.readLine()) != null) { JSONObject jsonObject = JSON.parseObject(data); Object result = jsonObject.get("result"); map = JSONObject.parseObject(JSONObject.toJSONString(result), Map.class); } inputStreamReader.close(); } } catch (Exception e) { System.out.println("error in wapaction,and e is " + e.getMessage()); } return map; }

得到的结果

在这里插入图片描述 需要注意一点,根据经纬度去获取地址,需要输入自己的百度应用ak 如果没有根据这个地址去注册 最后在创建应用时需要勾选“地理编码”,不然会报错 {“status”:240,“message”:“APP 服务被禁用”} 在这里插入图片描述 最后补充一点,获取到的拍摄地址是通过经纬度去进行定位的,需要联网,如果没有网的话是获取不到位置的,会是null



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3