之前用Python+百度地图api实现了多点标注,偶然的机会又看到还有pyecharts这个东东,里面的BMap可以直接生成一个html,真香(试过BMap就知道pyecharts里面的Map或者Geo也不香了),于是趁过年没事赶紧给我的多点标注程序升级到BMap。
要用BMap,首先涉及到百度开放平台的ak,然后导入pyecharts。初学的教程看 这篇 ,从注册ak(比如注意填写*,还有类型选网页,都有讲到,照抄不会错),到导入pyecharts,再到初始化BMap,添加点,生成html,讲得详细又全面。
细节不清楚的,可以参考pyecharts的 官方说明 。
里面有几点不好上手,需要拿出来说一下:
1、添加点:add_coordinate(‘第一个参数是地点名’, ‘第二个参数是精度’, ‘第三个参数是纬度’),在有经纬度的情况下,写个循环就搞定了。
除此以外还可以用Json格式传值,详情参加官方说明,有示例。
2、初始化地图的那个add函数,里面有个data_pair列表:[('地点名(跟加坐标那个地点名一致)','数字或文字'),('……','……'),('……','……')]
因为BMap可以显示一个地点的状态或者数值,可以理解为这个data_pair是以相同地点名为索引,保存这个值或状态的。可能其他案例中都是保存数值的居多,比如做新冠肺炎数据统计,显示当地的确诊人数,除了存数值还可以存字符串。
3、set_series_opts里面,有个label_opts,是在地图里显示单个地址标签的,如果设置is_show=True,默认是显示经度的,这就坑了。相信很多人都应该是要显示地点名吧!如果要把标签值从经度改成地点名,要用到formatter,对于小白来说就非常不友好了。
首先,这里涉及到一个叫“函数回调”的东东,是啥我至今也没搞懂,感觉像是Python里用字符串嵌套了一个js?(写法在第一篇教程里写得很清楚了)
其次,最坑的是,原来Label数据的Value可以理解成是个列表,0是精度,1是纬度,2个data_pair里添加的那个数值或状态(第二个参数),就是没有地点名字,可把我给难坏了,直到看到 这个文章 。搞了半天原来label的值是这样的:
[
{"name":"赣州市","value":[ 经度,维度, 数值1,数值2 ] },
{"name":"天津市","value":[ 经度,维度, 数值1,数值2 ] },
]
所以我对照这个文章,把formatter的函数修改如下:
formatter=JsCode("function(params){return params.data.name;}"
才算改好这个标签。
真是翻了好多教程才抄到正确的代码。
4、BMap初始化的时候,需要设置地图的大小,我想做成自适应大小的,网上教程有说改Python源文件的,有说用bs4改html文件的,目前我一个都还没试成功,后续看下咋弄。