从微信某个朋友圈随便找了一位美女发的照片

Java对照片进行分析,效果如下

获得结果如下:

{海拔=0 metres, 手机=Xiaomi, 纬度=24.41046111111111, 型号=MI MAX, 经度=103.41424722222223, 拍摄时间=2018:12:01 16:37:32,
拍摄地点=中国  云南省 红河哈尼族彝族自治州 弥勒市 XXX路 XXX号 温泉XXXX酒店}
经纬度:24.41046111111111,103.41424722222223
拍摄时间:2018:12:01 16:37:32
手机型号:Xiaomi MI MAX
拍摄地点:中国  云南省 红河哈尼族彝族自治州 弥勒市 XXX路 XXX号 温泉XXX酒店
{"status":0,"result":{"location":{"lng":103.42283328917563,"lat":24.413805252378915},
"formatted_address":"云南省红河哈尼族彝族自治州弥勒市XXX路","business":"","addressComponent":
{"country":"中国","country_code":0,"country_code_iso":"CHN","country_code_iso2":"CN",
"province":"云南省","city":"红河哈尼族彝族自治州","city_level":2,"district":"弥勒市","town":"","town_code":"","adcode":"532504","street":"温泉路","street_number":"","direction":"","distance":""},"cityCode":107}}
复制代码

emmm,不好过多描述

Java实现方法

1、引入相关jar包

这里需要引入两个jar包,用于读取照片的exif信息,里面包含照片的完整信息。

资源下载,放在最后啦。

2、读取Exif原始信息

首先利用jar包工具,

将照片里的Exif原始信息读取出来。

完整代码如下:

public static HashMap<String, Object> readPicInfo(String file_path) {HashMap<String, Object> map = new HashMap<String,Object>();Tag tag = null;File jpegFile = new File(file_path);Metadata metadata;try {metadata = JpegMetadataReader.readMetadata(jpegFile);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();System.out.println(tag.getTagName()+"--"+tag.getDescription());}}} catch (JpegProcessingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return map;
}
public static void main(String[] args) {//传入照片的绝对路径readPicInfo("C:\\Users\\pacer\\Desktop\\img\\others\\10.jpg");
}
复制代码

我们来看一下,能获得那些信息:

拍摄的手机型号、GPS精确位置、拍摄时间、像素、修改日期

甚至包括,拍摄地点的海拔信息都是有的。

3、GPS格式转换

我们通过exif读取的GPS信息,是类似于度、分、秒这种格式的。

我们需要将GPS信息通过计算转换成十进制的数字位数,

这样才可以调用百度地图API或者其他的地图API来将GPS信息转换为地理位置信息。

/**** 经纬度坐标格式转换* @param Gps*/
public double latitude_and_longitude_convert_to_decimal_system(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_dou = Double.parseDouble(a)+Double.parseDouble(b)/60 + Double.parseDouble(c)/60/60;return gps_dou;
}
复制代码

通过这个函数,我们将经纬度信息转换为10进制数字信息。

4、调用地图API将GPS坐标转换为地理位置

我们通过exif原始信息,拿到的是一串地理坐标数字。

如果想要转换为具体的地址信息,那么就需要通过各大地图API来进行转换,

小伙伴们可以自己去免费注册一个百度地图API,然后通过调用它提供的接口,

就可以将传入的GPS坐标值,转换为地址信息。当然,这里也可以用我的。

调用接口方法如下:

//接口调用方法如下:
//api_key:是你注册的key值
//coords:是你的经纬度坐标http://api.map.baidu.com/reverse_geocoding/v3/?ak="+api_key+"&output=json&coordtype=wgs84ll&location="+coords
复制代码

5、完整代码

最后,将代码整理汇总一下。

做成了一个简单的java小项目

有java环境,即可运行~~

深藏功与名~~

需要相关源码笔记的可以扫一下  备注【Java】

宅男程序员不会告诉你用Java实现用一张照片进行GPS定位这么简单相关推荐

  1. 命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?

    大数据文摘出品 来源:Zdnet 编译:洪颖菲.李可.Vicky.李雷 1989年,荷兰的一位叫Guido Van Rossum的宅男程序员觉得其他语言都不好用,于是花三个月创造了一种新的编程语言. ...

  2. 宅男程序员给老婆的计算机课程之9:数据模型

    这次来讲MVC中最后的M. Model,几乎可以说是网页应用的核心. 之前课程提到过网页应用是由数据库驱动,而在很多场景,数据库 = M : M = 数据库. 所谓的ORM: object relat ...

  3. 宅男程序员给老婆的计算机课程

    声明: Technorati 标记: IT生活 本文档来自:http://developer.51cto.com/art/201203/321936.htm 宅男程序员给老婆的计算机课程之0:认清本质 ...

  4. 宅男程序员给老婆的计算机课程之8:控制器

    设计模式再"高级"一点,便是所谓的"框架"了. 从事Web开发,一般都会接触到MVC框架这个概念. M:也就是Model,直接跟网站数据库相关. V:也就是Vi ...

  5. 宅男程序员给老婆的计算机课程之4:SQL vs NoSQL

    男主角:Wuvist(新浪微博),真名翁伟,自称胖程序员一个,幸好已婚.学习.NET出身,现常用Python做服务器端开发,曾任新加坡某创业公司主程.公司被Techcrunch blog过后,觉得新加 ...

  6. 宅男程序员给老婆的计算机课程之5:设计模式

    设计模式,应该是很多ED心目中牛B的编程方式. 上回说到ED的好书POEE,实际上便是一本专门讲企业开发中使用的设计模式中的书. 设计模式,并不多,基本上看完GoF的这边<Design Patt ...

  7. 宅男程序员给老婆的计算机课程之6:模版引擎

    [51CTO独家特稿]设计模式再"高级"一点,便是所谓的"框架"了. 从事Web开发,一般都会接触到MVC框架这个概念. M:也就是Model,直接跟网站数据库 ...

  8. 转自51CTO的帖子——宅男程序员给老婆的计算机课程

    在51CTO上闲逛的时候,看了这个系列的帖子.感觉不错,特转发于此,留做纪念. 原文链接: 宅男程序员给老婆的计算机课程之0:认清本质 宅男程序员给老婆的计算机课程之1:认清实际 宅男程序员给老婆的计 ...

  9. 宅男程序员给老婆的计算机课程之10:做,就对了!

    [51CTO独家特稿]学以致用,很多时候,学习一样东西最好需要能够在实际中应用起来. 所以我在第2课"怎么看待牛人"中强调的必须"看代码 + 写代码". 不过我 ...

最新文章

  1. 转:设置session过期时间
  2. Servlet基本_オブジェクトのスコープ
  3. 【Go API 开发实战 1】该教程所实现的 API 功能
  4. Android OOM的解决方式
  5. [AtCoder Regular Contest 123] 题解
  6. mysql表变量临时表_表变量和临时表详解
  7. oracle常用系统变量,Oracle环境变量
  8. 个人的Directx9研究总结 (1)
  9. 记一次微信APP支付开发返回-1的坑
  10. 基于matlab的汉明码信道编码,信道编码仿真.doc
  11. java中求矩形面积,java求矩形面积
  12. CSS规范--CSS属性书写顺序和CSS初始化
  13. Mac/MacBookPro解决系统升级后运行卡顿问题(非配置问题)
  14. Eclipse使用Log4j2的详细教程
  15. Python List 包含关系判定
  16. 佛祖保佑注释代码(内含神兽与美女)
  17. HBase 怎样负载均衡?
  18. android 树叶飘落动画,逼真的HTML5树叶飘落动画
  19. IP地址冲突怎么办? 如何解决局域网IP地址冲突?
  20. 第39天:WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用

热门文章

  1. windows下mingw64编译glog
  2. Vue自动px单位自动转换rem
  3. 输出一个区间所有的素数和
  4. javaweb基础知识(一) + webapp制作
  5. HMS Core Discovery第13期直播预告——构建手游中的真实世界
  6. 计算机剪切文件保存在哪里,电脑截图默认保存在哪
  7. WORD几个自己常用的自定义键盘快捷键对应命令名(自我查阅使用)
  8. vue2.0心得感悟
  9. 权威发布2018北京春节期间空气质量受烟花爆竹影响几何
  10. Android MediaCodec 编码使用介绍