在关于我页面,有个个人足迹的图片。
这个图片最早是通过google maps的足迹地图来生成的。
然而,好景不常,这个东西现在也下架了,今年又去了很多地方,但是这个图片要更新就变得非常麻烦,总不能用ps往上打点吧?这也有点太智障了。于是想着通过地图来实现这个功能,高德或者百度,上午试了一下高德,发现免费的静态地图,最多只能添加10个marker,这尼玛是出来恶心姐姐我的吗?就离谱。
下午看了下百度的要好很多,于是下午折腾了一下,把足迹点,通过代码拼成url直接添加图片就能显示了,这个还是不错的,最终效果如下:
其中粉色点点是最起码呆过一段时间的,黄色的点点是途径点。
处理的代码也比较简单,不过最开始用的高德,于是gps坐标获取用的高德的api,需要提供高德的key。
静态地图用的百度的,所以又需要百度地图的ak,这个ak必须用服务端的ak哈。全部代码如下,没做配置功能,需要的自己改改代码就行了(运行前 pip install requests 依赖库):
import time import requests def amap_geodecode(addr): try: para = { 'key': '高德的key', # 高德地图开放平台申请的key 'address': addr # 传入地址参数 } url = 'https://restapi.amap.com/v3/geocode/geo?' # 高德地图API接口 req = requests.get(url, para) req = req.json() print('-' * 30) print(req) m = req['geocodes'][0]['location'] print(addr) print(m) except: return None return m # 按装订区域中的绿色按钮以运行脚本。 if __name__ == '__main__': url_bast = 'https://api.map.baidu.com/staticimage/v2?ak=<百度的ak>&width=900&height=800&zoom=5¢er=103.8319522831,36.0615585627&markerStyles=0xFF0000|0x808000&markers=' city_list = ['北京','上海','深圳', '东营','连云港','锡林郭勒盟','赤峰','承德','济南','泰安','枣庄','昆明','长沙','湘潭','株洲','日照','威海','烟台','深圳','广州','西安','临沂','潍坊','青岛','大理','清迈','海口','三亚','蜈支洲岛','清莱'] pass_city_list = ['天津','德州','景德镇','衢州','佛山','无锡'] print('添加点亮城市:') cord_list = [] visited_marker_style_list = [] for c in city_list: m = amap_geodecode(c) if m: v = '' + m cord_list.append(v) visited_marker_style_list.append('m,V,0xFF69B4') time.sleep(2) print('添加途径城市:') for c in pass_city_list: m = amap_geodecode(c) if m: v = '' + m cord_list.append(v) visited_marker_style_list.append('s,P,0xFFFF00') time.sleep(2) print(cord_list) print('|'.join(cord_list)) print('最终url:') print(url_bast + '&markerStyles=' + '|'.join(visited_marker_style_list) + '&markers=' + '|'.join(cord_list))
别问为啥这么搞,问就是懒得改了,哈哈哈。添加图片直接使用最后的url即可。以后足迹点多了之后,修改list重新生成url即可。
唯一的缺点,不支持国外的坐标,我的泰国的坐标标不上,不过也无所谓了,反正就一个泰国而已。
更多定制化功能,参考百度地图的相关开发文档:
https://lbsyun.baidu.com/faq/api?title=static/prepare
https://lbsyun.baidu.com/faq/api?title=static/markerStatic
https://lbsyun.baidu.com/faq/api?title=static/heightStatic