Hi,我是老鼠屎。最近在做地理信息可视化进度基本为龟速。但是探索的过程中发现了folium神器,在这里进行一些整理。
Folium可以让你用Python强大生态系统来处理数据,然后用Leaflet地图来展示。Folium内置一些来自OpenStreetMap、MapQuest Open、MapQuest Open Aerial、Mapbox和Stamen的地图元件(tilesets),并且支持用Mapbox或者Cloudmade API keys来自定义地图元件。Folium支持GeoJSON和TopJSON叠加(overlays),绑定数据来创造一个分级统计图(Choropleth map)。
关于folium的安装,直接pip install即可。然而这里需要注意的是,folium的安装依赖于branca、jinja2、requests和six等库。具体可以参考一下下图。
根据其官方demo,我们可以先创建一个非常基本的地图看一下效果。
import folium
m = folium.Map(location=[45.5236, -122.6750])
location是地图中心的位置。然而当我们想在jupyter notebook里面展示地图时,却无法显示。
这里老鼠屎的解决方案是:先把地图保存为html的格式,再通过webbrowser将其打开。
import folium
import webbrowser
m = folium.Map(location=[45.5236, -122.6750])
m.save("1.html")
webbrowser.open("1.html")
之后就可以在网页上显示地图。
默认的地图类型是OpenStreetMap,当然,其他类型的地图(Stamen Terrain,Stamen Toner,Mapbox Bright,Mapbox Control Room等)也是可以使用的。通过tiles参数即可进行选择。
import folium
import webbrowser
m = folium.Map(location=[45.5236, -122.6750],tiles='Stamen Toner',zoom_start=13)
m.save("1.html")
webbrowser.open("1.html")
这里加了zoom_start参数,表示地图的初始缩放级别。加载后的地图如下所示。
我们通过folium.Marker()方法,创建了一个简单的标记小部件,并通过add_to()将定义好的部件施加于先前创建的Map对象m之上。
import folium
import webbrowser
m = folium.Map(location=[45.5236, -122.6750],zoom_start=13)
folium.Marker([45.488869,-122.571034], popup='Mt. Hood Meadows').add_to(m)
m.save("1.html")
webbrowser.open("1.html")
这里,location:同folium.Map()中的同名参数,用于确定标记部件的经纬位置;popup:str型或folium.Popup()对象输入,用于控制标记部件的具体样式(folium内部自建了许多样式),默认为None,即不显示部件;icon:folium.Icon()对象,用于设置popup定义的部件的具体颜色、图标内容等。效果如下图所示。
import folium
import webbrowser
m = folium.Map(location=[100.0, 0.0],
zoom_start=6,
control_scale=True)
gj = folium.GeoJson(data={ "type": "MultiLineString",
"coordinates": [
[ [100.0, 0.0], [101.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]
})
gj.add_to(m)
m.save("1.html")
webbrowser.open("1.html")
效果如下图。