前言 最近疫情真的是非常嚴重,據“百度疫情實時大數據報告”2022年3月27日19點實時數據顯示,上海較昨日新增確診51例,新增無癥狀2633例,形勢嚴峻。 不少在上海的朋友們也尤為關註其所在地周邊的疫情確診情況,涌現了一些小程式幫助我們通過地圖查看周邊的疫情情況。 而今天的文章,我就來帶大家學習如 ...
前言
最近疫情真的是非常嚴重,據“百度疫情實時大數據報告”2022年3月27日19點實時數據顯示,上海較昨日新增確診51例,新增無癥狀2633例,形勢嚴峻。
不少在上海的朋友們也尤為關註其所在地周邊的疫情確診情況,涌現了一些小程式幫助我們通過地圖查看周邊的疫情情況。
而今天的文章,我就來帶大家學習如何使用純Python,輕輕鬆鬆開發一款可自由探索地圖上疫情風險點分佈的應用,數據來源:https://tienzhao.github.io/covid-shanghai/shanghai.html,感謝分享。
而要完成這樣一款互動式地圖應用的開發,過程其實非常簡單,主要使用到Dash、dash-leaflet、geopandas以及由我開源的feffery-antd-components等框架,下麵我們分步驟介紹具體開發過程:
1 環境搭建
作為一款具有地圖空間分析功能的應用,我們除了常規的dash+fac開發套件之外,還需要安裝geopandas實現一些必須的空間分析,推薦使用conda進行虛擬環境的準備,參考命令如下:
Python學習交流Q群:903971231### conda create -n covid-shanghai python=3.7 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main -y conda activate covid-shanghai conda install geopandas=0.10.2 -c https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge -y pip uninstall rtree -y pip install rtree dash feffery-antd-components dash-leaflet dash_extensions -i https://pypi.douban.com/simple/
全部執行完成後我們的應用運行環境就準備好了~
2 界面搭建
應用界面的搭建非常簡單,其中地圖使用到dash-leaflet中的地圖功能,懸浮於地圖區域右上方的信息面板使用到我的開源組件庫feffery-antd-components中的AntdText()、AntdSpace()、AntdAlert()等功能,具體見本文源碼(【玩轉dash】公眾號後臺回覆【上海疫情】獲取全部源碼)。
3 地圖交互功能的實現
在這個應用中,我們需要實現的交互功能主要包含了監聽地圖縮放事件、監聽地圖範圍以及根據縮放級別和範圍計算得到合法範圍內的疫情點並渲染到地圖上。
因此我們在構建我們的dash應用回調函數時,將dl.Map()的zoom和bounds屬性作為回調函數的輸入,判斷當zoom>=15時,從原始疫情點數據中利用geopandas的within()空間關係,來找到當前地圖範圍內所有疫情點並處理後傳到地圖上進行渲染,並向右上角信息框中更新當前範圍內疫情點數量。
最後
疫情期間,大家都要做好防護,保護好自己。這一篇文章的源碼就不給大家了,感興趣的小伙伴可以自己動動手去試一下。到這裡就沒有了,下一篇見啦!