前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python地图绘制工具folium基础知识全攻略

Python地图绘制工具folium基础知识全攻略

作者头像
可以叫我才哥
发布2021-12-28 08:10:28
6.6K0
发布2021-12-28 08:10:28
举报
文章被收录于专栏:可以叫我才哥可以叫我才哥

大家好,我是才哥。

之前我们介绍过《Python地图绘制工具folium更换地图底图样式全攻略》,今天我们就来学习基于folium进行地图绘制的基础知识点,让大家都可以用这个工具进行轻松的基于地图的可视化操作~

添加小编好友,回复地图领取本文全部演示代码~

目录:

  • 1. 准备工作
  • 2. 标记点
  • 3. 标记圆形区域
  • 4. 标记连线
  • 5. 标记区域
  • 6. 鼠标点击事件
  • 7. 鼠标操作标记
  • 8. 双地图
  • 9. 测距与面积
  • 10. 热力图

1. 准备工作

本案例以高德地图为底图样式,经纬度也是基于高德地图下!

代码语言:javascript
复制
import folium.plugins as plugins
import folium

tiles= 'https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7'

m = folium.Map([40.003451,116.326398],
               tiles=tiles ,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )

m

2. 标记点

标记点就是在地图是标记出某经纬度所在的位置,使用的是函数方法folium.Marker()

代码语言:javascript
复制
folium.Marker(
    location=None,
    popup=None,
    tooltip=None,
    icon=None,
    draggable=False,
    **kwargs,
)
  • location:经纬度列表
  • popup:点击标记点时弹出的内容
  • tooltip:鼠标移动到标记点时弹出的提示
  • icon:标记点颜色
代码语言:javascript
复制
# 提示语
tooltip = "点我"
# 标记点
folium.Marker(
    # 标记的点经纬度
    [40.005711,116.32529], 
    # 点击标记出现的 文本
    popup="情人坡",
    # 提示语(鼠标放到标记点上的提示语)
    tooltip=tooltip
).add_to(m)
m

标记点

有朋友可能会说,点击标记点的提示内容怎么是竖着显示的呀,要是太长的话不久太长了!!当然,我们可以通过设置参数max_width来解决这个问题,让文本信息横向显示~

代码语言:javascript
复制
# 图书馆
location = [40.004774,116.3251]

folium.Marker(
    location, 
    # max_width设置每行显示字符数
    popup=folium.Popup("图书馆",max_width=10),
    tooltip=tooltip
).add_to(m)
m

标记点提示横向显示

到这里,可能也有朋友会问,这个标记点显示的好单调,可以有比如修改颜色或者icon之类的操作吗!?当然,也是有的!

  • iconcolor:标记图案颜色
  • icon:标记形状,比如cloudcnyinfo-sign
代码语言:javascript
复制
# 不同的标记点样式
folium.Marker(
    [40.001528,116.32408], 
    popup="第一教学楼",
    icon=folium.Icon(icon="cloud", icon_color='yellow'),
).add_to(m)

folium.Marker(
    [39.998586,116.328908], 
    popup=folium.Popup("纳米科技楼", max_width=100),
    icon=folium.Icon(color="green", icon="cny"),
).add_to(m)

folium.Marker(
    location=[40.005251,116.322299],
    popup="体育场",
    icon=folium.Icon(color="red", icon="info-sign"),
).add_to(m)

m

标记点属性

3. 标记圆形区域

标记圆形区域有两种操作,分别是CircleCircleMarker,后者是一个始终与整个Map保持相对尺寸的Circle

区别于Circle就是Circle是绝对尺寸(以m为单位),当你放大地图时Circle会变小,因为它与地图的相对尺寸变小了;而CircleMarker不论你怎么缩放地图,它在地图都始终是那么大。

代码语言:javascript
复制
m = folium.Map([40.003451,116.326398],
               tiles= tiles,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )
# 标记圆形区域
folium.Circle(
    radius=50,
    location=[40.005062,116.321216],
    popup="西区体育馆",
    color="crimson",
    fill=False,
).add_to(m)

folium.CircleMarker(
    location=[40.004404,116.33239],
    radius=20,
    popup="体育中心",
    color="Blue",
    fill=True,
    fill_color="#3186cc",
).add_to(m)

m

标记点圆形区域

4. 标记连线

标记连线就比较简单了,就是按照给到的经纬度坐标点依次连线呗,咱们可以应用在比如知道了导航路径的经纬度列表,然后在地图上绘制导航路径之类的。这里用到的是函数方法PolyLine,具体大家看下面效果感受一下!

代码语言:javascript
复制
# 标记线
m = folium.Map([40.003451,116.326398],
               tiles= tiles,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )
              
folium.PolyLine(
    locations=[       
        [39.998586,116.328908],
        [40.001528,116.32408],
        [40.005251,116.322299],
    ],
    popup=folium.Popup('标记坐标点之间连线', max_width=200),
    color='red'
).add_to(m)

m              

标记连线

5. 标记区域

知道点之间的连线后,那么点之间围成的区域是不是被我们盯上了,来,交给Polygon安排~

代码语言:javascript
复制
# 标记区域
m = folium.Map([40.003451,116.326398],
               tiles= tiles,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )
folium.Polygon(
    locations=[
        [39.998586,116.328908],
        [40.001528,116.32408],
        [40.005251,116.322299],
    ],
    popup=folium.Popup('标记坐标点之间多边形区域', max_width=200),
    color='blue', # 线颜色
    fill=True, # 是否填充
    weight=3, # 边界线宽
).add_to(m)

m              

标记区域

6. 鼠标点击事件

鼠标点击事件顾名思义即可,这里将演示两种:点击显示经纬度点击进行标记点。用add_child来添加这类事件插件!

点击显示经纬度

代码语言:javascript
复制
# 添加点击触发事件
m = folium.Map([40.003451,116.326398],
               tiles= tiles,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )
# 点击显示经纬度
m.add_child(folium.LatLngPopup())              

点击显示经纬度

点击进行标记点

代码语言:javascript
复制
# 点击显示标记点
m.add_child(folium.ClickForMarker(popup="选中的点"))

点击进行标记点

7. 鼠标操作标记

其实,以上的各种操作还可以通过鼠标来一一操作,需要调用plugins.Draw()对象来完成~

代码语言:javascript
复制
# 鼠标操作绘制地图标记
m = folium.Map([40.003451,116.326398],
               tiles= tiles,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )
draw = plugins.Draw()
draw.add_to(m)
m

鼠标操作标记

8. 双地图

双地图就是同时演示两张地图的操作,这里呢我们可以同时显示常规地图和卫星地图,或者别的需求!

代码语言:javascript
复制
m = folium.plugins.DualMap([40.003451,116.326398],
                           tiles= tiles,
                           attr='高德-常规图',
                           zoom_start=15,
                           control_scale=True,
              )
folium.TileLayer().add_to(m.m1)
tiles1 = 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
folium.TileLayer(tiles1,attr='高德卫星地图').add_to(m.m2)
folium.LayerControl(collapsed=True).add_to(m)
m

双地图

我们也可以通过双地图发现在不同的地图瓦片样式下,经纬度存在一定的偏移,比如默认内置图和高德地图就有比较明显的区别。

不同瓦片经纬度差异

9. 测距与面积

folium绘制的地图中,其实还提供了测距测算面积的小插件,点点鼠标就可以完成,直呼666~

代码语言:javascript
复制
m = folium.Map([40.003451,116.326398],
               tiles= tiles,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )
m.add_child(plugins.MeasureControl())
m

测距与面积

我们看到最终结果大致是面积368万平方米,和网上查到的占地面积329万平方米差的也没太远。(当然这里我手动标记的区域不一定精准啦)

10. 热力图

热力图很强,参考之前《用Python分析过去10年地震分布~》,除了静态还有动态热力图案例哈!

以上就是本次关于folium的基础知识全部内容,后续我们会基于此进行更多的地图可视化的案例探索,为大家展现更多好玩有趣的知识分享~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可以叫我才哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档