Android实现地图照片墙原理

来源:互联网 发布:淘宝小号注册机 编辑:程序博客网 时间:2024/05/31 18:32


一、绪

前两天在群里和基友聊LOFTER,一直感兴于照片App的我突然想到了一款国外的App,用于记录去过的地方:

 

如果两者结合,就可以将拍照和地图放在一起,多么美妙哇~ 当我提到这个想法时,基友一脸不屑说,iphone早已经自带了这种效果:

 

当时真是被泼冷水啊~不过,虽然已经有了这样的产品,那么我们可以了解下其中的实现原理,也不枉老夫的一片爱慕之心。

在iphone中,这种效果称为 【时刻】。可以理解,某张照片,记录某个时刻,某个时间,某个位置。假设某天boss也需要这样的需求,我们该如何思考来实现呢?

二、核心原理

整体需求我们可以分为两部分:

(1)拍摄照片

(2)地图显示

将照片显示到地图上,其实就是将图片作为Marker。本篇博客着重说第一步的实现方式,关于将照片显示到地图上的操作,可以看我之前写的一篇博客:

详解Android中玩转高德地图

在将照片显示到地图之前,当前拍照所在位置就已经确定下来。根据位置定位地图显示范围,并将照片显示到确定位置。OK,功能逻辑实现已经很清楚,我们先来看第一部的实现:

1. 拍摄照片,获取当前位置

实现也有两种方式:

(1)根据网络定位当前位置。

         需要集成定位功能,例如高德,百度等等。当拍摄好照片后,显示到地图当前位置。

(2)设置相机位置功能

         打开相机设置,打开储存位置信息即可,拍摄完毕后,解析照片头信息,获取当前位置。如下:

        

第一种方式相对来说比较简单,需要依赖第三方定位功能。今天我们来看第二种方式如何实现。

第二种实现方式核心原理就是从照片的头信息中获取经纬度,解析经纬度,然后根据经纬度定位当前位置。如何从照片中获取经纬度信息呢?

首先,照片中头信息经纬度为有效值,有两个前提条件:

(1)GPS必须开启

(2)必须有网络

因为照片头信息中的经纬度是根据GPS来决定,所以GPS功能必须为开启状态,且网络必须为有网状态,否则经纬度将为null。

三、具体实现

在原理中我们分析了具体的核心原理,接下来来看具体的实现:

(1)开启相机

 

(2)获取拍摄后的图片信息

 

(3)解析图片头信息

 

(4)转换经纬度信息

 

分析:

(1)打开相机,拍照后获取照片路径。

(2)使用ExifInterface根据图片路径读取图片,解析图片相关信息。

(3)获取经纬度信息,解析经纬度。

(4)得到具体经纬度数值。

通过以上操作,我们就完成了对照片头信息的解析采集,获取经纬度值,显示到地图相应位置即可。

以上就是全部内容了,核心还是ExifInterace的使用。不过这种方式不太稳定。使用第三方定位来实现,稳定性相对来说较好。代码很简单,就不再提供源码了,有问题的朋友可以给我留言啦~


1 0