Python地圖繪制工具 folium 更換地圖底圖 樣式全攻略

作者 | 道才
來源 | 可以叫我才哥
咱們用folium進(jìn)行過多次地圖繪制,有粉絲反饋在進(jìn)行地圖繪制的時候坐標(biāo)點(diǎn)可能是百度地圖經(jīng)緯度、高德地圖經(jīng)緯度或者騰訊地圖經(jīng)緯度等情況,然后發(fā)現(xiàn)用默認(rèn)的地圖底圖繪制的時候存在明顯的偏移;另外,還有粉絲進(jìn)行地圖繪制用于論文的發(fā)表,而論文要求地圖是英文或者中英文顯示;同樣的,還有粉絲表示想用衛(wèi)星影像圖顯示等等。
那么,今天我們就針對這些情況來介紹一下folium更換地圖底圖樣式的全攻略!
目錄:
1. 準(zhǔn)備工作
2. 關(guān)于folium.Map()
3. 內(nèi)建地圖底圖樣式
4. 多種第三方地圖底圖樣式
4.1. 高德地圖
4.2. 智圖GeoQ
4.3. 騰訊地圖
4.4. 天地圖
5. 補(bǔ)充
1. 準(zhǔn)備工作
有朋友可能沒用過folium,它其實(shí)就是python的一個專業(yè)繪制地圖的第三方庫,所以在使用之前需要先安裝它。
pip?install?folium
在安裝完成之后,我們可以在jupyterlab進(jìn)行演示如下:
import?folium
m?=?folium.Map()
m

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

以上就是一個平平淡淡的過程......
2. 關(guān)于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]是清華大學(xué)校區(qū); zoom_start:比例尺,默認(rèn)為10級,大約是一個城市的范圍; 其他常用參數(shù)包括:
width和height:地圖的長寬,如果是int則表示像素值,如果是str則表示百分比;max_zoom:地圖可以手動調(diào)節(jié)的最大比例,默認(rèn)為18級;control_scale:是否在地圖上添加比例尺,默認(rèn)為False;no_touch:是否禁止手動操作,默認(rèn)為False;tiles:地圖樣式,默認(rèn)為OpenStreetMap attr:如果設(shè)置非內(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
可以看到清華大學(xué)校區(qū)

以上對Map的參數(shù)進(jìn)行了簡單的介紹,接下來,我們就來看看地圖底圖樣式的選取情況吧~
3. 內(nèi)建地圖底圖樣式
我們看到folium其實(shí)有好幾種內(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

黑白無標(biāo)記底圖
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ù)也會去研究這些地圖底圖樣式,試著分享更多有趣的地圖分享給大家。
當(dāng)然了,國內(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
反正我覺得這個蠻好的,用起來簡單
多種風(fēng)格地圖,即拿即用
彩色版
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

藍(lán)黑版
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',
???????????????attr='藍(lán)黑版',
???????????????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='天地圖-影像標(biāo)注'
??????????????)
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='天地圖-地形標(biāo)記',
???????????????zoom_start=3,
??????????????)
m

百度地圖我這邊測試失敗了,暫時沒有找到合適的替換方案。
5. 補(bǔ)充
其實(shí),我們還可以找更多的地圖底圖瓦片URL來進(jìn)行替換,多樣化我們的地圖繪制。
另外,大家在用經(jīng)緯度坐標(biāo)點(diǎn)進(jìn)行地圖繪制的時候,比如標(biāo)記點(diǎn)、繪制區(qū)域、熱力圖繪制等等,需要考慮經(jīng)緯度坐標(biāo)是哪個地圖系下面的,然后再用對應(yīng)地圖系的相關(guān)底圖進(jìn)行繪制才準(zhǔn)確!
后續(xù)我們將繼續(xù)介紹folium地圖繪制的更多操作技巧,敬請期待~
以上就是本次全部內(nèi)容,如果對你有用,還希望點(diǎn)贊+在看,謝謝~~
更多優(yōu)質(zhì)文章可以關(guān)注才哥??
