地图数据可视化库folium
生活随笔
收集整理的這篇文章主要介紹了
地图数据可视化库folium
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、簡介
folium是js上著名的地理信息可視化庫leaflet.js為Python提供的接口,通過它,我們可以通過在Python端編寫代碼操縱數據,來調用leaflet的相關功能。通過定義一個Map對象并不斷添加圖層元素,最后將Map對象保存為html文件并在瀏覽器中進行顯示。
二、安裝
pip3 install folium --user三、基本用法
#! /usr/bin/env pythonimport foliumdef run():'''創建Map對象'''m = folium.Map(location=[39.90,116.38], zoom_start=12, control_scale=True, tiles='CartoDB dark_matter') # 繪制地圖,確定聚焦點, # TianAnMen 東經116.38 北緯:39.90# location:tuple或list類型輸入,用于控制初始地圖中心點的坐標,格式為(緯度,經度)或[緯度,經度],默認為None# max_zoom:int型,控制地圖可以放大程度的上限,默認為18# control_scale:bool型,控制是否在地圖上添加比例尺,默認為False即不添加# height:控制地圖的高度,格式同width# width:int型或str型,int型時,傳入的是地圖寬度的像素值;str型時,傳入的是地圖寬度的百分比,形式為'xx%'。默認為'100%'# tiles:str型,用于控制繪圖調用的地圖樣式,默認為'OpenStreetMap',也有一些其他的內建地圖樣式;也可以傳入'None'來繪制一個沒有風格的樸素地圖,或傳入一個URL來使用其它的自選osm# 可選的樣式包括:OpenStreetMap、Stamen Terrain、Stamen Toner、Stamen Watercolor、CartoDB positron、CartoDB dark_matter、Mapbox Bright等# attr:str型,當在tiles中使用自選URL內的osm時使用,用于給自選osm命名'''畫點'''lat = 39.90lon = 116.38folium.Marker([lat,lon], popup='lat:{0:.2f}'.format(lat) + '\nlon:{0:.1f}'.format(lon)).add_to(m) # 定一個點,放到地圖m上folium.Marker([39.90,116.41], popup='<i>浮標上面的那個文字</i>', icon=folium.Icon(color='red')).add_to(m) # 把浮標變成紅色,i為斜體folium.Marker([39.90,116.35], popup='<b>浮標上面的那個文字</b>', icon=folium.Icon(color='green', icon='cloud')).add_to(m) # 浮標改圖樣,icon='info-sign',b為粗體# location:同folium.Map()中的同名參數,用于確定標記部件的經緯位置# popup:str型或folium.Popup()對象輸入,用于控制標記部件的具體樣式(folium內部自建了許多樣式),默認為None,即不顯示部件# icon:folium.Icon()對象,用于設置popup定義的部件的具體顏色、圖標內容等'''畫圓'''name = '天安門'position = '39.90,116.38'color = ['#FF66CC', '#E2DBF3', '#D3CAEE', '#B7A6E2', '#A895DD', '#9A83D7', '#8C71D1', '#7D60CC', '#6F4EC6','#613DC1', '#5938B0', '#50329E', '#472D8D', '#3E277B', '#35226A', '#2D1C58', '#241747', '#1B1135','#F0EDF9', '#E2DBF3', '#D3CAEE', '#C5B8E8', '#B7A6E2', '#A895DD', '#9A83D7', '#8C71D1', '#7D60CC','#6F4EC6', '#613DC1', '#5938B0', '#50329E', '#472D8D', '#3E277B', '#35226A', '#2D1C58', '#241747','#1B1135', '#F0EDF9'] # 38種folium.Circle(location=[39.90,116.38], radius=100, popup="{0}經緯度為:{1}".format(name, position), color='crimson', fill=True, fill_color=color[0]).add_to(m)# location:同folium.Map()中的location,用于控制圓圈的圓心坐標# radius:int型,用于控制圓圈的半徑,單位米,注意,在folium.Circle()中,radius因為半徑的單位是米,所以其大小隨著我們對地圖的縮放程度而進行相應的變化# 但在與folium.CircleMarker()方法中的radius參數單位為像素,即其為屏幕上大小固定的一個圓圈,隨著地圖的縮放,其大小也不會發生變化# popup:str型或folium.Popup()對象,用于控制圓圈的樣式,默認為None,即無樣式# color:str型,用于控制圓圈的顏色,默認為十六進制顏色'#3388ff',即一種藍色# fill:bool型,當為True時,圓圈內部將被填充上色彩,默認不填充# fill_color:str型,控制圓圈內部填充的色彩,默認與color參數一致'''畫多邊形'''ls = folium.PolyLine(locations=[[39.91,116.39],[39.89,116.39],[39.89,116.37],[39.91,116.37],[39.91,116.39]], color='blue')ls.add_to(m)# locations:二級嵌套的list,用于指定需要按順序連接的坐標點,若要繪制閉合的幾何圖像,需要在傳入列表的首尾傳入同樣的坐標[lat, lon]# color:str型,傳入十六進制的顏色,用于控制線條的顏色,默認為'#03f'# weight:float型,用于控制線條的寬度,默認為5# opacity:float型,用于控制線條的透明度,默認為0.5# popup:str型或folium.Popup()對象,用于控制線條樣式'''添加點擊顯示經緯度的子功能'''m.add_child(folium.LatLngPopup())'''點擊地圖任意位置產生一個新的圖標'''# m.add_child(folium.ClickForMarker())# m.add_child(folium.ClickForMarker(popup='Waypoint'))html_path = '/home/alan/alan_projects/folium_test/test.html'm.save(html_path) if __name__ == '__main__':run()四、常用案例:根據經緯度文件畫軌跡
軌跡文件:/tmp/route.txt
24.1764,117.8250 24.1766,117.8252 24.1761,117.8255 24.1762,117.8257 24.1759,117.8259 24.1687,117.8271 24.1735,117.8368 24.1761,117.8387 24.1747,117.8416 24.1703,117.8451 24.1637,117.856 24.1600,117.8718 24.1650,117.8839 24.1675,117.8957 24.1692,117.9002 24.1694,117.9094 24.1770,117.9234 24.1842,117.9245 24.1921,117.9201 24.2074,117.9280 24.2114,117.9280 24.2157,117.9339 24.2178,117.9434 24.2353,117.9627 24.2322,117.9780 24.2395,117.9804 24.2411,117.9977 24.2370,118.0014 24.2357,118.0066 24.2318,118.0100 #! /usr/bin/env pythonimport numpy as np import foliumdef run():file_path = "/tmp/route.txt"route = []lats, lons = [], []for line in open(file_path):latlon = line.split(',')lat = float(latlon[0])lon = float(latlon[1])lats.append(lat)lons.append(lon)route.append([lat, lon])center = np.mean(route, axis=0)bounds = [[min(lats), min(lons)], [max(lats), max(lons)]]# 高德地圖m = folium.Map(location=center,zoom_start=12,control_scale=True, tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',attr="http://ditu.amap.com/")folium.PolyLine(locations=route,color='blue',popup=folium.Popup('file_path: {}<br>'.format(file_path), max_width=400),opacity=1.0).add_to(m)folium.Circle(location=route[0],popup=folium.Popup('<b>Start</b><br>'+'lat: {}<br>'.format(route[0][0])+'lon: {}<br>'.format(route[0][1]), max_width=400),radius=100,color='green',fill_color='clear',fill=True,fill_opacity=0.5).add_to(m)folium.Circle(location=route[-1],popup=folium.Popup('<b>End</b><br>'+'lat: {}<br>'.format(route[-1][0])+'lon: {}<br>'.format(route[-1][1]), max_width=400),radius=100,color='red',fill_color='clear',fill=True,fill_opacity=0.5).add_to(m)folium.vector_layers.Polygon(locations=[[center[0],center[1]],[center[0]+0.01,center[1]],[center[0]+0.01,center[1]+0.01],[center[0],center[1]+0.01]],popup=folium.Popup('direction', max_width=400),color='cyan',weight=1,fill_opacity=0.2,opacity=0.5,fill=True).add_to(m)m.fit_bounds(bounds)html_path = '/tmp/test.html'm.save(html_path) if __name__ == '__main__':run()雙擊打開生成的html文件,即可在瀏覽器中看到軌跡?
參考:
官方文檔:https://python-visualization.github.io/folium/
官方案例:https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/?
import folium from folium.plugins import MousePosition from folium.plugins import MeasureControl from folium.features import DivIcon from folium.features import LatLngPopup from folium import IFrame
總結
以上是生活随笔為你收集整理的地图数据可视化库folium的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纺织品行业——瑞士蓝标Bluesign认
- 下一篇: git学习心得