之前用Python+百度地圖api實(shí)現(xiàn)了多點(diǎn)標(biāo)注,偶然的機(jī)會(huì)又看到還有pyecharts這個(gè)東東,里面的BMap可以直接生成一個(gè)html,真香(試過BMap就知道pyecharts里面的Map或者Geo也不香了),于是趁過年沒事趕緊給我的多點(diǎn)標(biāo)注程序升級(jí)到BMap。
要用BMap,首先涉及到百度開放平臺(tái)的ak,然后導(dǎo)入pyecharts。初學(xué)的教程看這篇,從注冊(cè)ak(比如注意填寫*,還有類型選網(wǎng)頁,都有講到,照抄不會(huì)錯(cuò)),到導(dǎo)入pyecharts,再到初始化BMap,添加點(diǎn),生成html,講得詳細(xì)又全面。
細(xì)節(jié)不清楚的,可以參考pyecharts的官方說明。
里面有幾點(diǎn)不好上手,需要拿出來說一下:
1、添加點(diǎn):add_coordinate(‘第一個(gè)參數(shù)是地點(diǎn)名’, ‘第二個(gè)參數(shù)是精度’, ‘第三個(gè)參數(shù)是緯度’),在有經(jīng)緯度的情況下,寫個(gè)循環(huán)就搞定了。
除此以外還可以用Json格式傳值,詳情參加官方說明,有示例。
2、初始化地圖的那個(gè)add函數(shù),里面有個(gè)data_pair列表:[('地點(diǎn)名(跟加坐標(biāo)那個(gè)地點(diǎn)名一致)','數(shù)字或文字'),('……','……'),('……','……')]
因?yàn)锽Map可以顯示一個(gè)地點(diǎn)的狀態(tài)或者數(shù)值,可以理解為這個(gè)data_pair是以相同地點(diǎn)名為索引,保存這個(gè)值或狀態(tài)的??赡芷渌咐卸际潜4鏀?shù)值的居多,比如做新冠肺炎數(shù)據(jù)統(tǒng)計(jì),顯示當(dāng)?shù)氐拇_診人數(shù),除了存數(shù)值還可以存字符串。
3、set_series_opts里面,有個(gè)label_opts,是在地圖里顯示單個(gè)地址標(biāo)簽的,如果設(shè)置is_show=True,默認(rèn)是顯示經(jīng)度的,這就坑了。相信很多人都應(yīng)該是要顯示地點(diǎn)名吧!如果要把標(biāo)簽值從經(jīng)度改成地點(diǎn)名,要用到formatter,對(duì)于小白來說就非常不友好了。
首先,這里涉及到一個(gè)叫“函數(shù)回調(diào)”的東東,是啥我至今也沒搞懂,感覺像是Python里用字符串嵌套了一個(gè)js?(寫法在第一篇教程里寫得很清楚了)
其次,最坑的是,原來Label數(shù)據(jù)的Value可以理解成是個(gè)列表,0是精度,1是緯度,2個(gè)data_pair里添加的那個(gè)數(shù)值或狀態(tài)(第二個(gè)參數(shù)),就是沒有地點(diǎn)名字,可把我給難壞了,直到看到這個(gè)文章。搞了半天原來label的值是這樣的:
[
? {"name":"贛州市","value":[ 經(jīng)度,維度, 數(shù)值1,數(shù)值2? ] },
? {"name":"天津市","value":[ 經(jīng)度,維度, 數(shù)值1,數(shù)值2? ] },
]
所以我對(duì)照這個(gè)文章,把formatter的函數(shù)修改如下:
formatter=JsCode("function(params){return params.data.name;}"
才算改好這個(gè)標(biāo)簽。
真是翻了好多教程才抄到正確的代碼。
4、BMap初始化的時(shí)候,需要設(shè)置地圖的大小,我想做成自適應(yīng)大小的,網(wǎng)上教程有說改Python源文件的,有說用bs4改html文件的,目前我一個(gè)都還沒試成功,后續(xù)看下咋弄。