python找出在原图中的位置_用python写了一个识别照片地理位置的程序

通过网上查询资料学习,配合高德地图的开发者模块用python写了一个识别照片地理位置的程序。

本随笔仅供学习交流,切勿拿去做违法之事!

前提:

是安卓手机

手机拍摄有开启gps定位

照片是原图

import exifread

import json

import requests

import os

import re

import threading

class get_photo_wz(object):

def __init__(self):

self.key = '你的key'

self.url = 'https://restapi.amap.com/v3/geocode/regeo?output=json&location={0},{1}&key={2}&radius=1000&extensions=base'

self.name=None

def find_image(self):

path=os.getcwd()+'\image'

path2=path

for name in os.listdir(path):

if re.match('.+\.jpg|.+\.png',name):

path=f'{path2}\{name}'

self.name=name

print(path)

job1=threading.Thread(target=self.run,args=(path,))

job1.start()

def get_long_and_lot(self,photo):

"""

:param photo: 传入图片路径

:return:

"""

f = open(photo, 'rb') # 二进制打开图片

msg = exifread.process_file(f)

try:

exif_longitude = msg['GPS GPSLongitude'] # 图片经度

exif_latitude = msg['GPS GPSLatitude'] # 图片纬度

exif_create_date = msg['EXIF DateTimeOriginal'] # 创建图片日期

print(exif_longitude, exif_latitude, exif_create_date)

# 返回的值 [113, 20, 1574707/62500] [23, 8, 4155487/200000] 2019:12:09 14:57:32

return exif_longitude, exif_latitude, exif_create_date

except:

print('Error!!图片中不包含Gps信息')

return None,None,None

def get_location(self,exif_longitude, exif_latitude, exif_date,**kw):

"""

:param exif_longitude: 图片中的经度

:param exif_latitude: 图片中的纬度

:param exif_date: 创建图片的日期

:return:

"""

long = list(str(i) for i in exif_longitude.values)

longitude = int(long[0]) + int(long[1]) / 60 + int(long[2].split('/')[0]) / int(long[2].split('/')[1]) / 3600

longitude = round(longitude, 6) # 经度取小数点前6位

lat = list(str(i) for i in exif_latitude.values)

latitude = int(lat[0]) + int(lat[1]) / 60 + int(lat[2].split('/')[0]) / int(lat[2].split('/')[1]) / 3600

latitude = round(latitude, 6) # 纬度取小数点前6位

# 调用高德地图API

resp = requests.get(self.url.format(longitude, latitude , self.key))

# '返回的值为json,这里需要将json转换成为字典'

location_msg = json.loads(resp.text)

location = location_msg['regeocode']['formatted_address']

print('图片{}拍摄时间为:{}\n图片经度为:{}\n图片纬度为:{}\n地图拍摄的地址为:{}'.format(self.name,exif_date, longitude, latitude, location))

print('答案仅供参考,误差在1KM内')

# 图片拍摄时间为:2019:12:09 14:57:32

# 图片经度为:113.340332

# 图片纬度为:23.139105

# 地图拍摄的地址为:广东省广州市天河区xxxxxx

# 答案仅供参考,误差在1KM内

def run(self,photofile):

exif_longitude, exif_latitude, exif_create_date=self.get_long_and_lot(photofile)

if exif_longitude:

self.get_location(exif_longitude, exif_latitude, exif_create_date)

else:

pass

if __name__ == '__main__':

t=get_photo_wz()

t.find_image()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值