使用 Python 地圖繪制工具 -- folium 全攻略

1. 準(zhǔn)備工作

有朋友可能沒(méi)用過(guò)folium,它其實(shí)就是python的一個(gè)專業(yè)繪制地圖的第三方庫(kù)榕暇,所以在使用之前需要先安裝它箱硕。

pip install folium

在安裝完成之后,我們可以在jupyterlab進(jìn)行演示如下:

import folium

m = folium.Map()
m
默認(rèn)

對(duì)于上面的輸出掉奄,其實(shí)是一個(gè)可交互的地圖,支持放大縮寫拖拽等等凤薛。

如果你想將輸出存在本地姓建,可以這樣來(lái):

m.save('map.html')

可以看到本地就存了這個(gè)一個(gè)文件,瀏覽器打開就可以進(jìn)行交互式操作了缤苫。

map文件

以上就是一個(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ù)可真多盎盍帷;凉贰!

沒(méi)有參數(shù)的folium.Map()將得到一張世界地圖舒憾。

  • location:地圖中心屑柔,[40.002694, 116.322373]是清華大學(xué)校區(qū);
  • zoom_start:比例尺珍剑,默認(rèn)為10級(jí)掸宛,大約是一個(gè)城市的范圍;

其他常用參數(shù)包括:

  • widthheight:地圖的長(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_starttiles等。

內(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)單試下locationzoo_start參數(shù):

import folium

m = folium.Map([40.002694, 116.322373],
               zoom_start=15,
               control_scale=True
              )
m

可以看到清華大學(xué)校區(qū)

清華大學(xué)校區(qū)

以上對(duì)Map的參數(shù)進(jìn)行了簡(jiǎn)單的介紹服爷,接下來(lái)杜恰,我們就來(lái)看看地圖底圖樣式的選取情況吧~

3. 內(nèi)建地圖底圖樣式

我們看到folium其實(shí)有好幾種內(nèi)建地圖底圖樣式获诈,其中部分需要去申請(qǐng)key,由于我這邊沒(méi)有申請(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&ltype=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

反正我覺(jué)得這個(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í)沒(méi)有找到合適的替換方案伪窖。

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)確!

文末

您的點(diǎn)贊收藏就是對(duì)我最大的鼓勵(lì)钢颂!
歡迎關(guān)注我钞它,分享Python干貨,交流Python技術(shù)殊鞭。
對(duì)文章有何見解遭垛,或者有何技術(shù)問(wèn)題,歡迎在評(píng)論區(qū)一起留言討論操灿!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耻卡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牲尺,更是在濱河造成了極大的恐慌卵酪,老刑警劉巖幌蚊,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異溃卡,居然都是意外死亡溢豆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瘸羡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)漩仙,“玉大人,你說(shuō)我怎么就攤上這事犹赖《铀” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵峻村,是天一觀的道長(zhǎng)麸折。 經(jīng)常有香客問(wèn)我,道長(zhǎng)粘昨,這世上最難降的妖魔是什么垢啼? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮张肾,結(jié)果婚禮上芭析,老公的妹妹穿的比我還像新娘。我一直安慰自己吞瞪,他們只是感情好馁启,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芍秆,像睡著了一般进统。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浪听,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天螟碎,我揣著相機(jī)與錄音,去河邊找鬼迹栓。 笑死掉分,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的克伊。 我是一名探鬼主播酥郭,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愿吹!你這毒婦竟也來(lái)了不从?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤犁跪,失蹤者是張志新(化名)和其女友劉穎椿息,沒(méi)想到半個(gè)月后歹袁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寝优,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年条舔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乏矾。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孟抗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钻心,到底是詐尸還是另有隱情凄硼,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布捷沸,位于F島的核電站摊沉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏亿胸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一预皇、第九天 我趴在偏房一處隱蔽的房頂上張望侈玄。 院中可真熱鬧,春花似錦吟温、人聲如沸序仙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潘悼。三九已至,卻和暖如春爬橡,著一層夾襖步出監(jiān)牢的瞬間治唤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工糙申, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宾添,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓柜裸,卻偏偏與公主長(zhǎng)得像缕陕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疙挺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容