文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在Python中使用folium绘制地图

2023-06-15 04:39

关注

这期内容当中小编将会给大家带来有关如何在Python中使用folium绘制地图,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、简介

folium 建立在 Python 生态系统的数据应用能力和 Leaflet.js 库的映射能力之上,在Python中操作数据,然后通过 folium 在 Leaflet 地图中可视化。

folium 相比较于国内百度的 pyecharts 灵活性更强,能够自定义绘制区域,并且展现形式更加多样化。

附:官方文档,官方示例,本文 notebook ,完整代码及数据。

二、安装方法

按照官方的教程即可,如果安装了 conda ,可以直接

conda install -c conda-forge folium

没有安装的话就使用

python3 -m pip install folium

三、主要功能

3.1 各级别地图

folium 显示地图的类为 folium.Map,类的声明如下

class folium.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)

讲几个重要的参数

 3.1.1 世界地图
import foliumprint(folium.__version__)# define the world mapworld_map = folium.Map()# display world mapworld_map

如何在Python中使用folium绘制地图

3.1.2 国家地图

# define the national mapnational_map = folium.Map(location=[35.3, 100.6], zoom_start=4)# display national mapnational_map

如何在Python中使用folium绘制地图

3.1.3 市级地图

其实改变地图显示就是改变显示的经纬度和缩放比例,省级、市级、县级用法雷同,这里举一个市级的例子为例,如北京市:

# define the city mapcity_map = folium.Map(location=[39.93, 116.40], zoom_start=10)# display city mapcity_map

如何在Python中使用folium绘制地图

显示效果确实是不如百度的?。

3.2 地图形式

除了上述正常的地图显示外,folium 还提供了非常丰富的多样化显示,控制显示效果的变量是tiles,样式有OpenStreetMap, Stamen Terrain, Stamen Toner, Mapbox Bright, Mapbox Control Room等等,这里挑选几个比较常见的

# define the city map,tiles='Stamen Toner'city_map = folium.Map(location=[39.93, 116.40], zoom_start=10, tiles='Stamen Toner')# display city mapcity_map
# define the city map, tiles='Stamen Terrain'city_map = folium.Map(location=[39.93, 116.40], zoom_start=10, tiles='Stamen Terrain')# display city mapcity_map

如何在Python中使用folium绘制地图

3.3 在地图上标记

3.3.1 普通标记

添加普通标记用 Marker

这里可以选择标记的图案。

bj_map = folium.Map(location=[39.93, 115.40], zoom_start=12, tiles='Stamen Terrain')folium.Marker(    location=[39.95, 115.33],    popup='Mt. Hood Meadows',    icon=folium.Icon(icon='cloud')).add_to(bj_map)folium.Marker(    location=[39.96, 115.32],    popup='Timberline Lodge',    icon=folium.Icon(color='green')).add_to(bj_map)folium.Marker(    location=[39.93, 115.34],    popup='Some Other Location',    icon=folium.Icon(color='red', icon='info-sign')).add_to(bj_map)bj_map

如何在Python中使用folium绘制地图

添加圆形标记用 Circle 以及 CircleMarker

bj_map = folium.Map(location=[39.93, 116.40], zoom_start=12, tiles='Stamen Toner')folium.Circle(    radius=200,    location=[39.92, 116.43],    popup='The Waterfront',    color='crimson',    fill=False,).add_to(bj_map)folium.CircleMarker(    location=[39.93, 116.38],    radius=50,    popup='Laurelhurst Park',    color='#3186cc',    fill=True,    fill_color='#3186cc').add_to(bj_map)bj_map

如何在Python中使用folium绘制地图

3.3.2 点击获取经纬度
m = folium.Map(location=[46.1991, -122.1889],tiles='Stamen Terrain',zoom_start=13)m.add_child(folium.LatLngPopup())m

通过点击鼠标便可以获取点击出的经纬度。

如何在Python中使用folium绘制地图

3.3.3 动态放置标记
m = folium.Map(    location=[46.8527, -121.7649],    tiles='Stamen Terrain',    zoom_start=13)folium.Marker(    [46.8354, -121.7325],    popup='Camp Muir').add_to(m)m.add_child(folium.ClickForMarker(popup='Waypoint'))m

如何在Python中使用folium绘制地图

3.4 热力图绘制

因为没有实际的经纬度坐标数据,所以这里只能模拟一些位置出来,另外每个位置还需要一个数值作为热力值。

# generated dataimport numpy as npdata = (    np.random.normal(size=(100, 3)) *    np.array([[0.1, 0.1, 0.1]]) +    np.array([[40, 116.5, 1]])).tolist()data[:3]

数据分布

[[40.04666663299843, 116.59569796477264, 0.9667425547098781], [39.86836537517533, 116.28201445195315, 0.8708549157348728], [40.08123232852134, 116.56884585184197, 0.9104952244371285]]

绘制热力图

# HeatMapfrom folium.plugins import HeatMapm = folium.Map([39.93, 116.38], tiles='stamentoner', zoom_start=6)HeatMap(data).add_to(m)# m.save(os.path.join('results', 'Heatmap.html'))m

如何在Python中使用folium绘制地图

3.5 密度地图绘制

folium 不仅可以绘制热力图,还可以绘制密度地图,按照经纬度进行举例聚类,然后在地图中显示。

from folium.plugins import MarkerClusterm = folium.Map([39.93, 116.38], tiles='stamentoner', zoom_start=10)# create a mark cluster objectmarker_cluster = MarkerCluster().add_to(m)# add data point to the mark clusterfor lat, lng, label in data:    folium.Marker(        location=[lat, lng],        icon=None,        popup=label,    ).add_to(marker_cluster)# add marker_cluster to mapm.add_child(marker_cluster)

如何在Python中使用folium绘制地图

3.6 自定义地图区域

folium 一个非常有优势的功能就是自定义区域的绘制了,只要有区域的边界数据,就可以在地图中以多种多样的形式展现出来,这里以 folium 官方的美国地图为例,源数据是一个 .json 文件,里面包含了各个地区(美国各州)的特征(包括边界经纬度列表、简称等),源数据传送门,其数据格式如下:

如何在Python中使用folium绘制地图

3.6.1 只绘制边界,不添加数据

如果只要求绘制边界,而不显示边界区域的相关信息,那么这个是比较容易的,代码如下

import jsonimport requests# read us-states border with open("us-states.json") as f:    us_states = json.load(f)us_map = folium.Map(location=[35.3, -97.6], zoom_start=4)folium.GeoJson(    us_states,    style_function=lambda feature: {        'fillColor': '#ffff00',        'color': 'black',        'weight': 2,        'dashArray': '5, 5'    }).add_to(us_map)#display mapus_map

如何在Python中使用folium绘制地图

3.6.2 绘制边界,添加数据

当需要在各个区域填充数据的时候,这个稍微麻烦点,不仅需要各个区域的边界数据,还需要各个区域的显示信息,这里同样也使用官方的美国各州的边界数据为例:

import geopandas as gpdimport pandas as pdimport folium, brancastates = gpd.GeoDataFrame.from_features(us_states, crs=fiona.crs.from_epsg(4326))states.head()

如何在Python中使用folium绘制地图

我们再把收入等数据连接到上表中

abbrs = pd.read_json(open("abbrs.json"))statesmerge = states.merge(abbrs,how='left', left_on='name', right_on='name')statesmerge['geometry']=statesmerge.geometry.simplify(.05)income = pd.read_csv("income.csv", dtype={"fips":str})income['income-2015']=pd.to_numeric(income['income-2015'], errors='coerce')income.groupby(by="state")[['state','income-2015']].median().head()statesmerge['medianincome']=statesmerge.merge(income.groupby(by="state")[['state','income-2015']].median(), how='left', left_on='alpha-2', right_on='state')['income-2015']statesmerge['change']=statesmerge.merge(income.groupby(by="state")[['state','change']].median(), how='left', left_on='alpha-2', right_on='state')['change']statesmerge.head()

如何在Python中使用folium绘制地图

最终绘制出的来的地图如下:

如何在Python中使用folium绘制地图

除此之外,还有很多非常有趣的功能,这里就不一一列举了,感兴趣的可以参考官方的文档。

四、竞品对比与优劣势

国内的竞品为百度的 pyecharts,和 folium 一样都可以实现普通的地图绘制功能,但是具体使用还有较大的区别,具体如下表

功能pyechartsfolium备注
世界地图可以可以
中文显示可以部分可以folium地图中标尺、文字不能正常显示,但是嵌入地图中的中文可以正常显示
交互性
区(县)级地图可以可以folium需要区(县)边界数据
市级地图可以可以folium需要市边界数据
收费自定义区域需要购买百度ak自定义区域功能免费
灵活性
省级地图可以可以folium需要省边界数据
美观度较好
自定义区域部分可以可以pyecharts需要百度 ak,folium免费

python有哪些常用库

python常用的库:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

上述就是小编为大家分享的如何在Python中使用folium绘制地图了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯