宅男程序员不会告诉你用Java实现用一张照片进行GPS定位这么简单
从微信某个朋友圈随便找了一位美女发的照片
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定位这么简单相关推荐
- 命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?
大数据文摘出品 来源:Zdnet 编译:洪颖菲.李可.Vicky.李雷 1989年,荷兰的一位叫Guido Van Rossum的宅男程序员觉得其他语言都不好用,于是花三个月创造了一种新的编程语言. ...
- 宅男程序员给老婆的计算机课程之9:数据模型
这次来讲MVC中最后的M. Model,几乎可以说是网页应用的核心. 之前课程提到过网页应用是由数据库驱动,而在很多场景,数据库 = M : M = 数据库. 所谓的ORM: object relat ...
- 宅男程序员给老婆的计算机课程
声明: Technorati 标记: IT生活 本文档来自:http://developer.51cto.com/art/201203/321936.htm 宅男程序员给老婆的计算机课程之0:认清本质 ...
- 宅男程序员给老婆的计算机课程之8:控制器
设计模式再"高级"一点,便是所谓的"框架"了. 从事Web开发,一般都会接触到MVC框架这个概念. M:也就是Model,直接跟网站数据库相关. V:也就是Vi ...
- 宅男程序员给老婆的计算机课程之4:SQL vs NoSQL
男主角:Wuvist(新浪微博),真名翁伟,自称胖程序员一个,幸好已婚.学习.NET出身,现常用Python做服务器端开发,曾任新加坡某创业公司主程.公司被Techcrunch blog过后,觉得新加 ...
- 宅男程序员给老婆的计算机课程之5:设计模式
设计模式,应该是很多ED心目中牛B的编程方式. 上回说到ED的好书POEE,实际上便是一本专门讲企业开发中使用的设计模式中的书. 设计模式,并不多,基本上看完GoF的这边<Design Patt ...
- 宅男程序员给老婆的计算机课程之6:模版引擎
[51CTO独家特稿]设计模式再"高级"一点,便是所谓的"框架"了. 从事Web开发,一般都会接触到MVC框架这个概念. M:也就是Model,直接跟网站数据库 ...
- 转自51CTO的帖子——宅男程序员给老婆的计算机课程
在51CTO上闲逛的时候,看了这个系列的帖子.感觉不错,特转发于此,留做纪念. 原文链接: 宅男程序员给老婆的计算机课程之0:认清本质 宅男程序员给老婆的计算机课程之1:认清实际 宅男程序员给老婆的计 ...
- 宅男程序员给老婆的计算机课程之10:做,就对了!
[51CTO独家特稿]学以致用,很多时候,学习一样东西最好需要能够在实际中应用起来. 所以我在第2课"怎么看待牛人"中强调的必须"看代码 + 写代码". 不过我 ...
最新文章
- 转:设置session过期时间
- Servlet基本_オブジェクトのスコープ
- 【Go API 开发实战 1】该教程所实现的 API 功能
- Android OOM的解决方式
- [AtCoder Regular Contest 123] 题解
- mysql表变量临时表_表变量和临时表详解
- oracle常用系统变量,Oracle环境变量
- 个人的Directx9研究总结 (1)
- 记一次微信APP支付开发返回-1的坑
- 基于matlab的汉明码信道编码,信道编码仿真.doc
- java中求矩形面积,java求矩形面积
- CSS规范--CSS属性书写顺序和CSS初始化
- Mac/MacBookPro解决系统升级后运行卡顿问题(非配置问题)
- Eclipse使用Log4j2的详细教程
- Python List 包含关系判定
- 佛祖保佑注释代码(内含神兽与美女)
- HBase 怎样负载均衡?
- android 树叶飘落动画,逼真的HTML5树叶飘落动画
- IP地址冲突怎么办? 如何解决局域网IP地址冲突?
- 第39天:WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用