您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Python如何實現folium交互地圖,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
leftlet給R語言提供了很好用的交互式動態地圖接口,其在Python中得API接口包名為folium(不知道包作者為何這樣起名字,和leaflet已經扯不上關系了),可以滿足我們平時常用的熱力圖、填充地圖、路徑圖、散點標記等高頻可視化場景。
主要介紹其在point、line、polygon這三個地理信息場景下得應用:
import pandas as pd
import numpy as np
import os
import folium
from folium import plugins
import webbrowser
import geopandas as gp
full = pd.read_excel("D:/Python/File/Cities2015.xlsx") full = full.dropna()
schools_map = folium.Map(location=[full['lat'].mean(), full['lon'].mean()], zoom_start=10)
marker_cluster = plugins.MarkerCluster().add_to(schools_map)for name,row in full.iterrows():
folium.Marker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"])).add_to(marker_cluster)
#folium.RegularPolygonMarker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"]),number_of_sides=10,radius=5).add_to(marker_cluster)
display(schools_map)
#schools_map.save('schools_map.html')
#webbrowser.open('schools_map.html')
display用于在編輯器內展示交互地圖,save方法可以將交互地圖以html文件得形式保存至本地磁盤,webbrowser.open方法可以調用默認瀏覽器打開本地html格式的交互地圖。
因為leaflet使用的在線地圖并不開放地址匹配功能,也就意味著我們無法通過直接輸入行政區名稱來獲取行政區劃邊界,所以在制作填充地圖時,仍然需要我們構建本地素材。
mydata = pd.read_csv("D:/R/rstudy/Province/geshengzhibiao.csv", encoding = 'gb18030')
china_map = gp.GeoDataFrame.from_file("D:/R/rstudy/CHN_adm/bou2_4p.shp", encoding = 'gb18030')
#china_map = gp.GeoDataFrame.from_file("D:/R/mapdata/State/china.geojson", encoding = 'gb18030')
China_map = folium.Map(location=[35,120], zoom_start=4)
China_map.choropleth(
geo_data=open('D:/R/mapdata/State/china.geojson',encoding = 'utf-8').read(),
data=mydata,
columns=['province', 'zhibiao'],
key_on= 'feature.properties.name',
fill_color='YlGn',
fill_opacity=0.7,
line_opacity=0.2)
display(China_map)
China_map.save("China_map.html")
好在folium的choropleth函數直接支持json格式地圖,僅需提供素材地址即可,data中應該包含與json素材中的屬性表和地理信息邊界保持一致得映射表,columns用于指定要用到的字段名稱。key_on用于指定json地圖數據中和你指定得data中對應得連接鍵(相當于主鍵)。
fill_color可以指定用于配色的colorBrewer調色板。
folium中得線圖制作也較為簡單,僅需提供給folium.PolyLine函數一組帶有嵌套列表或者元組得經緯度點即可。
mydata1 =full.sample(20).loc[:,["lat","lon"]].values.tolist() mydata2 =[(i,j) for i,j in full.sample(20).loc[:,["lat","lon"]].values.tolist()] oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4) folium.PolyLine(mydata1,color = 'black').add_to(oneUserMap) display(oneUserMap) oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4) folium.PolyLine(mydata2,color = 'black').add_to(oneUserMap) display(oneUserMap)
def map_fun():
myresult = full.loc[:,["lat","lon","cities","pop"]].values
oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4)
for e in myresult:
folium.RegularPolygonMarker(
[e[0],e[1]],
popup=str(e[2])+":"+str(e[3]),
fill_color='#769d96',
number_of_sides=10,
radius=10
).add_to(oneUserMap)
others = full.loc[full['cities']!='鄭州市',["lat","lon"]].values.tolist()
for i in range(len(others)):
zhengzhou = full.loc[full['cities']=='鄭州市',["lat","lon"]].values.tolist()
zhengzhou.append(others[i])
folium.PolyLine(
locations = zhengzhou,
color = 'black'
).add_to(oneUserMap)
display(oneUserMap)
return Noneif __name__ == '__main__':
map_fun()
上述就是小編為大家分享的Python如何實現folium交互地圖了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。