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

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

以上就是一個(gè)平平淡淡的過(guò)程......
2. 關(guān)于folium.Map()
在上一部分我們可以看到這個(gè)map玩意直接就是一個(gè)地圖啦,這里我們就介紹一下它常用的幾個(gè)參數(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級(jí),大約是一個(gè)城市的范圍; 其他常用參數(shù)包括:
width和height:地圖的長(zhǎng)寬,如果是int則表示像素值,如果是str則表示百分比;max_zoom:地圖可以手動(dòng)調(diào)節(jié)的最大比例,默認(rèn)為18級(jí);control_scale:是否在地圖上添加比例尺,默認(rèn)為False;no_touch:是否禁止手動(dòng)操作,默認(rèn)為False;tiles:地圖樣式,默認(rèn)為OpenStreetMap attr:如果設(shè)置非內(nèi)建地圖樣式,則需要傳入這個(gè)值,可以理解為你選擇的地圖樣式名稱
以上是常用的一些參數(shù),而最常用的莫過(guò)于 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)
我們簡(jiǎn)單試下location和zoo_start參數(shù):
import?folium
m?=?folium.Map([40.002694,?116.322373],
???????????????zoom_start=15,
???????????????control_scale=True
??????????????)
m
可以看到清華大學(xué)校區(qū)

以上對(duì)Map的參數(shù)進(jìn)行了簡(jiǎn)單的介紹,接下來(lái),我們就來(lái)看看地圖底圖樣式的選取情況吧~
3. 內(nèi)建地圖底圖樣式
我們看到folium其實(shí)有好幾種內(nèi)建地圖底圖樣式,其中部分需要去申請(qǐng)key,由于我這邊沒有申請(qǐng)成功就不做演示了。
"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)
地勢(shì)地形底圖
m?=?folium.Map([40.002694,?116.322373],
???????????????tiles='Stamen?Terrain',
???????????????zoom_start=15,
???????????????control_scale=True
??????????????)
m

黑白無(wú)標(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的大家可以去這個(gè)網(wǎng)站申請(qǐng):
http://openwhatevermap.xyz/(可惜我上不去)
另外,在這里也可以找到一些地圖底圖
http://leaflet-extras.github.io/leaflet-providers/preview/
我后續(xù)也會(huì)去研究這些地圖底圖樣式,試著分享更多有趣的地圖分享給大家。
當(dāng)然了,國(guó)內(nèi)咱們用的較多的地圖是高德、百度和騰訊地圖等,接下來(lái)我們就來(lá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='高德-中英文對(duì)照',
???????????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='高德-純英文對(duì)照',
???????????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
反正我覺得這個(gè)蠻好的,用起來(lái)簡(jiǎn)單
多種風(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

中國(guó)行政區(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='中國(guó)行政區(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/
需要注冊(cè)一個(gè)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

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