Python + folium 制作美美的地圖~
??????關注我,和老表一起學Python、云服務器
今天跟大家介紹一下如何使用folium更換地圖底圖樣式
1. 準備工作
有朋友可能沒用過folium,它其實就是python的一個專業(yè)繪制地圖的第三方庫,所以在使用之前需要先安裝它。
pip?install?folium
在安裝完成之后,我們可以在jupyterlab進行演示如下:
import?folium
m?=?folium.Map()
m

對于上面的輸出,其實是一個可交互的地圖,支持放大縮寫拖拽等等。
如果你想將輸出存在本地,可以這樣來:
m.save('map.html')
可以看到本地就存了這個一個文件,瀏覽器打開就可以進行交互式操作了。

以上就是一個平平淡淡的過程......
2. 關于folium.Map()
在上一部分我們可以看到這個map玩意直接就是一個地圖啦,這里我們就介紹一下它常用的幾個參數(shù)。
folium.Map(
????location=None,
????width='100%',
????height='100%',
????left='0%',
????top='0%',
????position='relative',
????tiles='OpenStreetMap',
????attr=None,
????min_zoom=0,
????max_zoom=18,
????zoom_start=10,
????min_lat=-90,
????max_lat=90,
????min_lon=-180,
????max_lon=180,
????max_bounds=False,
????crs='EPSG3857',
????control_scale=False,
????prefer_canvas=False,
????no_touch=False,
????disable_3d=False,
????png_enabled=False,
????zoom_control=True,
????**kwargs,
)
參數(shù)可真多啊!!
沒有參數(shù)的
folium.Map()將得到一張世界地圖。
location:地圖中心,[40.002694, 116.322373]是清華大學校區(qū); zoom_start:比例尺,默認為10級,大約是一個城市的范圍; 其他常用參數(shù)包括:
width和height:地圖的長寬,如果是int則表示像素值,如果是str則表示百分比;max_zoom:地圖可以手動調(diào)節(jié)的最大比例,默認為18級;control_scale:是否在地圖上添加比例尺,默認為False;no_touch:是否禁止手動操作,默認為False;tiles:地圖樣式,默認為OpenStreetMap attr:如果設置非內(nèi)建地圖樣式,則需要傳入這個值,可以理解為你選擇的地圖樣式名稱
以上是常用的一些參數(shù),而最常用的莫過于 location、zoom_start和tiles等。
內(nèi)建地圖樣式還有一下幾種:
-?"OpenStreetMap"
-?"Mapbox?Bright"?(Limited?levels?of?zoom?for?free?tiles)
-?"Mapbox?Control?Room"?(Limited?levels?of?zoom?for?free?tiles)
-?"Stamen"?(Terrain,?Toner,?and?Watercolor)
-?"Cloudmade"?(Must?pass?API?key)
-?"Mapbox"?(Must?pass?API?key)
-?"CartoDB"?(positron?and?dark_matter)
我們簡單試下location和zoo_start參數(shù):
import?folium
m?=?folium.Map([40.002694,?116.322373],
???????????????zoom_start=15,
???????????????control_scale=True
??????????????)
m
可以看到清華大學校區(qū)

以上對Map的參數(shù)進行了簡單的介紹,接下來,我們就來看看地圖底圖樣式的選取情況吧~
3. 內(nèi)建地圖底圖樣式
我們看到folium其實有好幾種內(nèi)建地圖底圖樣式,其中部分需要去申請key,由于我這邊沒有申請成功就不做演示了。
"OpenStreetMap" "Mapbox Bright" (Limited levels of zoom for free tiles) "Mapbox Control Room" (Limited levels of zoom for free tiles) "Stamen" (Terrain, Toner, and Watercolor) "Cloudmade" (Must pass API key) "Mapbox" (Must pass API key) "CartoDB" (positron and dark_matter)
地勢地形底圖
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='Stamen?Terrain',
???????????????zoom_start=15,
???????????????control_scale=True
??????????????)
m

黑白無標記底圖
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='Stamen?Toner',
???????????????zoom_start=15,
???????????????control_scale=True
??????????????)
m

水墨畫底圖
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='Stamen?Watercolor',
???????????????zoom_start=15,
???????????????control_scale=True
??????????????)
m

以上就是內(nèi)建地圖底圖樣式的一些展示,部分需要key的大家可以去這個網(wǎng)站申請:
http://openwhatevermap.xyz/(可惜我上不去)
另外,在這里也可以找到一些地圖底圖
http://leaflet-extras.github.io/leaflet-providers/preview/
我后續(xù)也會去研究這些地圖底圖樣式,試著分享更多有趣的地圖分享給大家。
當然了,國內(nèi)咱們用的較多的地圖是高德、百度和騰訊地圖等,接下來我們就來玩玩!
4. 多種第三方地圖底圖樣式
這里我將演示高德地圖、智圖GeoQ和騰訊地圖等
4.1. 高德地圖
高德地圖的 中英文地圖、衛(wèi)星影像圖、街道圖與常規(guī)圖
中英文地圖
folium.Map([40.002694,?116.322373],
???????????tiles='https://webrd02.is.autonavi.com/appmaptile?lang=zh_en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
???????????attr='高德-中英文對照',
???????????zoom_start=15,
??????????)

純英文地圖
folium.Map([40.002694,?116.322373],
???????????tiles='https://webrd02.is.autonavi.com/appmaptile?lang=en&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
???????????attr='高德-純英文對照',
???????????zoom_start=15,
??????????)

衛(wèi)星影像圖
tiles?=?'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
folium.Map([40.002694,?116.322373],
???????????tiles=?tiles,
???????????attr='高德-衛(wèi)星影像圖',
???????????zoom_start=15,
??????????)

街道圖
folium.Map([40.002694,?116.322373],
???????????tiles=?'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8<ype=11',
???????????attr='高德-街道路網(wǎng)圖',
???????????zoom_start=10,
??????????)

常規(guī)圖
folium.Map([40.002694,?116.322373],
???????????tiles=?'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',
???????????attr='高德-常規(guī)圖',
???????????zoom_start=15,
??????????)

4.2. 智圖GeoQ
反正我覺得這個蠻好的,用起來簡單
多種風格地圖,即拿即用
彩色版
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}',
???????????????attr='彩色版',
???????????????zoom_start=15,
??????????????)
m

暖色版
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}',
???????????????attr='暖色版',
???????????????zoom_start=15,
??????????????)
m

灰色版
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetGray/MapServer/tile/{z}/{y}/{x}',
???????????????attr='灰色版',
???????????????zoom_start=15,
??????????????)
m

藍黑版
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',
???????????????attr='藍黑版',
???????????????zoom_start=15,
??????????????)
m

英文版
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunityENG/MapServer/tile/{z}/{y}/{x}',
???????????????attr='英文版',
???????????????zoom_start=15,
??????????????)
m

中國行政區(qū)劃邊界
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/administrative_division_boundaryandlabel/MapServer/tile/{z}/{y}/{x}',
???????????????attr='中國行政區(qū)劃邊界',
??????????????)
m

水系專題
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}',
???????????????attr='水系專題',
??????????????)
m

街道網(wǎng)圖
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://thematic.geoq.cn/arcgis/rest/services/StreetThematicMaps/Gray_OnlySymbol/MapServer/tile/{z}/{y}/{x}',
???????????????attr='街道網(wǎng)圖',
??????????????)
m

暖色街道網(wǎng)圖
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://thematic.geoq.cn/arcgis/rest/services/StreetThematicMaps/Warm_OnlySymbol/MapServer/tile/{z}/{y}/{x}',
???????????????attr='暖色-街道網(wǎng)圖',
??????????????)
m

4.3. 騰訊地圖
tiles?=??'https://rt0.map.gtimg.com/tile?z={z}&x={x}&y={-y}'
folium.Map([39.904989,?116.405285],
???????????tiles=?tiles,
???????????attr='騰訊地圖'??????????
??????????)

4.4. 天地圖
https://www.tianditu.gov.cn/
需要注冊一個key
天地圖影像
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://t7.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
???????????????attr='天地圖-影像'
??????????????)
m

天地圖影像注記
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://t7.tianditu.gov.cn/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
???????????????attr='天地圖-影像標注'
??????????????)
m

天地圖矢量
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://t7.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
???????????????attr='天地圖-矢量',
???????????????zoom_start=10,
??????????????)
m

天地圖矢量注記
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://t7.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
???????????????attr='天地圖-矢量注記'
??????????????)
m

天地圖地形
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://t7.tianditu.gov.cn/ter_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=ter&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
???????????????attr='天地圖-地形',
???????????????zoom_start=3,
??????????????)
m

天地圖地形注記
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://t7.tianditu.gov.cn/cta_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cta&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=',
???????????????attr='天地圖-地形標記',
???????????????zoom_start=3,
??????????????)
m

百度地圖我這邊測試失敗了,暫時沒有找到合適的替換方案。
5. 補充
其實,我們還可以找更多的地圖底圖瓦片URL來進行替換,多樣化我們的地圖繪制。
另外,大家在用經(jīng)緯度坐標點進行地圖繪制的時候,比如標記點、繪制區(qū)域、熱力圖繪制等等,需要考慮經(jīng)緯度坐標是哪個地圖系下面的,然后再用對應地圖系的相關底圖進行繪制才準確!
如何找到我:
