Python+百度地图实现地址多点标注--用上BMap了

之前用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文件的,目前我一个都还没试成功,后续看下咋弄。

最后编辑于
© 著作权归作者所有,转载或内容合作请联系作者

推荐阅读 更多精彩内容