通过图片获取地理位置
github上发现的有趣小项目
GitHub:https://github.com/xingag/spider_python
项目的基础上添加了一些代码,为了直接可以查看地图更加直观。
使用了高德静态地图的API。
注册方法
打开高德开发平台:高德地图开发平台
注册账号,打开控制台
应用管理–>我的应用–>添加新应用
一定要选择web服务,完成后就会得到一串Key
查看官方文档 官方API文档
将参数拼接到URL中,使用到的参数 Key、location、zoom、size、scale、markers
运行下
浏览器自动打开显示相应的位置,并显示地图
main.py源码
import os
import exifread
from position_utils import *
import requests
import json
import datetime
import webbrowser# pip3 install exifreadclass Location(object):def __init__(self, image_path):self.img_path = image_pathself.api_key = ""self.url_get_position = 'https://restapi.amap.com/v3/geocode/regeo?key={}&location={}'def __get_address(self, location):"""根据坐标得到详细地址:param location: 经纬度值:return:"""resp = requests.get(self.url_get_position.format(self.api_key, location))location_data = json.loads(resp.text)address = location_data.get('regeocode').get('formatted_address')return addressdef run(self):coordinate = self.__get_image_ability()print(f'获取到经度、纬度是:{coordinate}')return coordinateif not coordinate:return# 根据经度和纬度,获取到详细地址address = self.__get_address(coordinate)# 检验坐标值# https://lbs.amap.com/console/show/pickerprint(f'图片拍摄于:{address}')def __format_lati_long_data(self, data):"""对经度和纬度数据做处理,保留6位小数:param data: 原始经度和纬度值:return:"""# 删除左右括号和空格data_list_tmp = str(data).replace('[', '').replace(']', '').split(',')data_list = [data.strip() for data in data_list_tmp]# 替换秒的值data_tmp = data_list[-1].split('/')# 秒的值data_sec = int(data_tmp[0]) / int(data_tmp[1]) / 3600# 替换分的值data_tmp = data_list[-2]# 分的值data_minute = int(data_tmp) / 60# 度的值data_degree = int(data_list[0])# 由于高德API只能识别到小数点后的6位# 需要转换为浮点数,并保留为6位小数result = "%.6f" % (data_degree + data_minute + data_sec)return float(result)def __get_image_ability(self):"""获取图片的属性值,包含:经纬度、拍摄时间等:param picture_name::return:"""# 利用exifread库,读取图片的属性img_exif = exifread.process_file(open(self.img_path, 'rb'))# 能够读取到属性if img_exif:# 纬度数latitude_gps = img_exif['GPS GPSLatitude']# N,S 南北纬方向latitude_direction = img_exif['GPS GPSLatitudeRef']# 经度数longitude_gps = img_exif['GPS GPSLongitude']# E,W 东西经方向longitude_direction = img_exif['GPS GPSLongitudeRef']# 拍摄时间take_time = img_exif['EXIF DateTimeOriginal']is_lie = self.judge_time_met(take_time)# if is_lie:# print('很遗憾的通知你,你的女朋友在撒谎!!!')# return# 纬度、经度、拍摄时间if latitude_gps and longitude_gps and take_time:# 对纬度、经度值原始值作进一步的处理latitude = self.__format_lati_long_data(latitude_gps)longitude = self.__format_lati_long_data(longitude_gps)# print(f'{longitude},{latitude}')# 注意:由于gps获取的坐标在国内高德等主流地图上逆编码不够精确,这里需要转换为火星坐标系location = wgs84togcj02(longitude, latitude)return f'{location[0]},{location[1]}'else:print(f'获取的图片数据属性不完整')return ''else:print('抱歉,图片不是原图,没法获取到图片属性。')return ''def judge_time_met(self, take_time):"""通知拍摄时间判断女朋友是否撒谎:param take_time::return:"""# 拍摄时间format_time = str(take_time).split(" ")[0].replace(":", "-")# 当天日期today = str(datetime.date.today())if format_time == today:return Falseelse:return Trueif __name__ == '__main__':# 发过来的图片【原图】location = Location('./pic/su.jpg')# 找到女朋友的地理位置loc = location.run()zoom = 17url = "https://restapi.amap.com/v3/staticmap?location="+loc+"&zoom="+str(zoom)+"&scale=2&size=1024*1024&markers=mid,,A:"+loc+"&key="webbrowser.open(url)
人生漫漫其修远兮,网安无止境。
一同前行,加油!
通过图片获取地理位置相关推荐
- 如何通过图片获取对方位置
你是否有在朋友圈/微博/QQ看见晒自拍,分享生活图片的习惯? 你是否会在微信代购群/淘宝/京东图片反馈好评的习惯? 你使用的是否是安卓手机? 如果是,那么请注意,地理位置可能会在5s内被对方获取!!! ...
- 用百度SDK获取地理位置和天气信息
以下实现通过百度SDK获取地理位置和天气信息,请參考百度开发文档 1. 在相关下载最新的库文件.将so文件的压缩文件解压出来,把相应架构下的so文件放入开发人员自己APP的相应架构下的目录中,建议所有 ...
- 微信小程序如何获取地理位置、地图显示,逆地址解析。
微信严格了获取客户位置的要求,需要申请地理位置权限和声明. 自 2022 年 7 月 14 日后发布的小程序,若使用地理位置接口,需要在 app.json 中进行声明. 申请时需要选择适合的小程序类目 ...
- 如何实现根据照片获取地理位置及如何防御照片泄漏地理位置
[阅读全文] 首先,说明一下python确实可以根据照片获取地理位置,但是也是有一定的限制条件的. 获取照片地理位置的实现思路是这样的:通过提取照片中的经纬度信息.然后通过经纬度信息找到具体的地理位置 ...
- Django博客来访人员地域分布大数据可视化---echarts绘图、geoip2获取地理位置
文章目录 Django博客来访人员地域分布大数据可视化---echarts绘图.geoip2获取地理位置 效果 echarts作图 geoip2获取地理位置 api接口开发 ajax前后端动态交互 D ...
- 微信 获取地理位置名称_使用地理名称的目标地理位置
微信 获取地理位置名称 Location-based applications are all the rage. What used to be prohibitively expensive GP ...
- html5实现获取地理位置信息并定位
html5实现获取地理位置信息并定位 一.总结 一句话总结:获取地理位置是分两步:获取经纬度和根据经纬度获取地址信息 a.HTML5的Geolocation(地理位置功能(Geolocation AP ...
- reactnative 获取定位_react native 获取地理位置的方法示例
react native 官网介绍了这个 api Geolocation 但是这个api只能返回 经纬度 所以要把经纬度 通过逆地理位置转义 http://recode.ditu.aliyun.com ...
- Flutter 中获取地理位置[Flutter专题61]
大家好,我是坚果,公众号"坚果前端" Flutter 中获取地理位置 如今,发现用户位置是移动应用程序非常常见且功能强大的用例.如果您曾经尝试过在 Android 中实现位置,您就 ...
- flutter利用高德如何获取地理位置信息bug处理
flutter中对于利用高德如何获取地理位置信息, 1.在高德开发平台,注册成为开发者,并获取key 2.安装依赖 对于如何安装第三方插件 请点击此处pub.dev amap_location 3.修 ...
最新文章
- Android开发--初探SQLiteDataBase/数据库的创建,更新,插入,查询
- python操作excel表格-Python学习—对excel表格的操作
- 使用QT制作桌面小工具(一)
- 让mysql支持emoji表情
- 面试: 14 个实用的数据库设计技巧,一次性教给你!
- Lang.String
- 《SAS编程与数据挖掘商业案例》学习笔记之十
- java 代码 点到线段的最短距离
- toj 4611 Repairing a Road
- 小于等于0_从0开始学ARMARM汇编指令其实很简单
- http://item.jd.com/1275996920.html
- 用 Handler 给图片加水印
- Kaggle竞赛实战系列(一):手写数字识别器(Digit Recognizer)得分99.53%、99.91%和100%
- RS485/RS422接线图
- 网页中那些遇到过的导航选中状态actived selected
- Excel第9享:DATEDIF函数及其应用
- 利用迪纳波利 (DINAPOLI) 等级进行交易
- 字符串全排列算法_C#版_剑指OFFER
- vue引用public目录下文件
- 喵呜-温暖治愈系社交应用