# picmapPython **Repository Path**: kelioc/picmap-python ## Basic Information - **Project Name**: picmapPython - **Description**: 桌面版实现 图片地图 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-07-29 - **Last Updated**: 2024-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目名称: picmap 图片地图 桌面版:https://gitee.com/kelioc/picmap-python 手机版: https://gitee.com/kelioc/picmap 项目概况: 目的学习python 另外实现一个有意思的小功能: 我们手机拍照片已经很流行了,但是经常有这种情景发生, 这个地方我几年前来过,但是具体时间不知道了,有个地方很有意思 那时候我还拍了照片我想给朋友介绍这个地方但是翻起图片来太多太不好找了。 于是这个项目诞生了 读取图片坐标信息放到数据里存储,通过当前坐标定位获取这附近的图片 数量的方式展示到地图上 通过进一步的筛选快速定位图片的目的。 中间过程 本来是想直接android上去实现的 但是讨厌java语法的唠叨就先拿python开刀。 一来是之前接触过一些语法分析过一个python项目 二来都说python现在很流行而且脚本花成型快 所以就像那他先把流程走一遍再到android上比葫芦画瓢。 总体思路 0 表 ok(包括地图历史时间轴) 1 读取图片位置信息到库 (文件操作(列表,位置信息读取),sqlite数据库操作,默认路径和自定义路径的添加 ) 2 表信息更新 (图片新增事件 数据库中记录一个最后更新日期 按照日期再搜索) 3 baidu map地图数量展示 (百度地图api 范围获取数据库读汇总取画数量显示,点击进入图片界面,实现地点搜索,获取当前坐标地图显示) 4 图片列表展示 5 运动轨迹 记录与展示 时间和地点 changelog: 4月29号 思考地图图片展示 项目 5.14号开始启动项目开发 当天完成表结构设计,android下的各种实现方法 5.17 下载了baidu地图的android.demo 尝试运行但是虚拟好像有问题了 还待处理 5.18号决定先用python实现一下也就是现在这个项目 2021-05-20 不过由于其他准备离职的事情和新项目的事情项目停止了 1 sqlite3 操作 , 获取图片坐标信息, 2 尝试地图绘制 没有api 浏览器嵌入 扩展 6月 实现 sqllite操作 图片坐标获取 path列表展示 目录选择 24号 baidu地图 html demo 28号 分析map.fang.com原理 29号 百度地图实现了bmap.html的显示 7月 1 2号周四周五 定制baidu地图 界面拆分layout httpserver代码定制 周五 http调试 库表初始化 周六 文件搜索与存储 周天 前后台通信 展示库数据 通过位数截取位数统计实现 分类代码编写 7.5 task 1 进程通信实现图片展示功能和目录添加弹框 2 内部html2渲染 最好实现内部桥接不要走httpserver 初步想法是信号实现 3 搜索条件添加 当前条件与选项展示 图片展示要不要写个前段展示页面 pic存储要不要使用相对路径 多进程下关闭不退出问题 7.5 晚上实现了搜索条件添加 当前条件与选项展示 7.6 task: html图片展示 图片展示 ok 进程通信 包括关闭后台和后台到前台唤起 ok wx进程通信 ok 列表操作数据刷新和进度 pic存储相对路径 ok html内嵌展示 和网页图片展示 手机端样子 7.5 周一 数据的后台的时间区域过滤 地图端的展示算是完事了 折腾到1点睡到2点 7.6 周二 html图片展示,python图片展示, 进程间通信信号方式实现 , 列表操作进度条 coding 晚上 调试图片展示 相对路径 进程通信 列表操作状态栏 晚上折腾到 1:55 周三 图片展示放大与缩小(留下一个小bug隐藏之前的没有实现) 目录列表操作 模态 状态栏到主窗口ok,晚上在公司 实现目录列表显示宽度优化与刷新 图片的展示切换阴影修复 周四 图片展示背景重叠问题修复 10点半到家 睡不着 晚上找浏览器方案折腾到2点 周五 浏览器嵌入壳子放弃 把前后台通信完成了 最终实现晚也单击唤起后台弹框 ,图片缩放实现 ,图片列表条件筛选编码ok 周六周天 xy位置置反修正,滚轮缩放修正, 汇总项目待处理问题,重置操作不要重置path列表 位置不准问题修复 百度调用函数修正 第三方算法势无效 百度自己的方法遇到网页鉴权问题, 尝试爬虫浏览器注入方式实现遇到全坐标转换问题放弃, 尝试高德地图实现同样网页鉴权问题, 尝试高德浏览器注入解决网页鉴权最终发现偏移问题未得到正确坐标 7.12 看看界面上还能做些什么 进入android的开发 暂停这个项目的维护 7.13 android baidu地图实例重新跑ok 合并周末的py.picmap修改 尝试修复定位问题 学习 适配器模式, android布局 2021-07-14 android百度地图显示ok (尝试一下百度的点聚合功能) ,sqlite3操作ok android更新(清理磁盘 增大tmp空间) bmap尝试单页跑起来 (看百度地图点聚合代码) py.picmap重写级数缩减方式 学到了 : py.format java.@Override final 2021-07-15 闪屏日志 查看 原来astdio里能看日志的 所有问题解决 闪屏问题也处理了 图标替换 浮层按钮添加 标题去除, 架构model 复写map类框架,系统日志类,获取当前坐标代码, copy了半天 图片列表 视图 2021-07-16 学习astdio快捷键 db类ok, T类封装编写 pic类编写 图片展示类编写 2021-07-20 1 虚拟机安装 ok 2 读取图片列表 ok 3 读取图片坐标信息 入库 ok 2021-07-21 图片列表页和图片全屏展示ok (晚上回家搞,公司总是报错 没法加载图片 ) 2021-07-29 开发完成图片的缩放与移动 picmap, 硬盘数据恢复 ,地图历史时间轴 ,cpu原理图 图片拖拽与缩放, 详情展示 选择和分享实现 ,时间筛选实现 地图页面坐标点关联 与搜索条件 地图页面更多按钮 浮层操作 配置页面开发 暂时只是显示一下基本信息吧 类似于关于一样 实现实时定位 搜索 全屏 图片打开方式注册 地图显示 工具注册 实现黑屏功能 2021-07-30 am: config.listview 仿照百度实现 T待实现的几个方法 自增 inc, 正则表达式封装 replace,match 数组函数封装 merage,column,combine,map,sort,ksort,shuffle,unique,search,filter,sum,filp, 算了新启动一个数组类吧 def.dict 增加keys,values实现 def.list 增加range实现 pm: db.Query model.load与save 实现 config展示 2021-07-31 am:pm: 连接三个页面 配置页列表展示,地图页定位区域 搜索坐标 点聚合的单击跳转,图片展示页面的左右滑动事件 2021-08-01 1 配置页调试添加 动态效果 , ok 关于放置到最后一个, ok 坐标修正 ok 返回按钮和重置按钮 冲突暂时不理会 2 地图展示页面 重构事件定位,ok 采用读取完成事件处理 id改称图片id和组的形式 ok 3 图片展示页面 拖拽与缩放验证 , ok 添加单击更多按钮现实 横屏按钮,切换效果 暂时去掉选择功能 ok 4 实现附加信息搜索功能 Arrays.sort() ,Collections.sort, String.join 三个页面进一步优化 1 配置页面刷新失败 startActivity方式ok 2 地图展示 第一次进入不显示 做了一个特玄的加载效果 地图上的数字点击有时候会报错处理完毕 原因id传递初始化-1超限 3 大小现实和位置都重新来一次, 缩放和拖拽也已经ok event除了不少坑中间点不对,开始位置偏移 三个页面接下来的优化安排 配置页面自定义标题栏 ,后台服务模式跑数据 地图页面 添加定位功能 全面屏幕 实现日期过滤 图片页面 添加单击现实详情和选择分享功能 ,横屏幕展示 ,还有双击放大 2021-08-06 python项目初始化方法 import picmap if __name__ == "__main__": picmap.start() 2021-08-07 早上python.picmap 坐标点修正与python语法熟悉 下午实现 拖拽(鼠标和键盘实现) 晚上实现了鼠标所在点缩放双击缩放 参考: baidu map地图 https://lbsyun.baidu.com/index.php?title=%E7%82%B9%E8%81%9A%E5%90%88 获取图片坐标信息 https://blog.csdn.net/nju_zjy/article/details/91426936 https://github.com/xmliu/photo-location/blob/master/app/src/main/java/com/xmliu/xmphoto/MainActivity.java , https://blog.csdn.net/diyangxia/article/details/50995253 ExifInterface exifInterface = new ExifInterface(imagePath); String datetime = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);// 拍摄时间 String latValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE); String lngValue = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE); String latRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); String lngRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); if (latValue != null && latRef != null && lngValue != null && lngRef != null) { output1 = convertRationalLatLonToFloat(latValue, latRef); output2 = convertRationalLatLonToFloat(lngValue, lngRef); } setDiffColor(latlngTV, "经纬度:" + output1 + ";" + output2); 2 初识MediaProvider https://blog.csdn.net/qq_30591155/article/details/105517452 必须得在linux下能获取这些信息才行 否则手机里存的图片肯定是有限的 3 ContentResolver https://blog.csdn.net/cycwind/article/details/6902636 ,https://blog.csdn.net/carson_ho/article/details/76101093 public Uri insert(Uri uri, ContentValues values) // 外部进程向 ContentProvider 中添加数据 public int delete(Uri uri, String selection, String[] selectionArgs) // 外部进程 删除 ContentProvider 中的数据 public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) // 外部进程更新 ContentProvider 中的数据 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)  // 外部应用 获取 ContentProvider 中的数据