Python绘制交互式地图知识全攻略

大家好,这是小编的一位好朋友才哥

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

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

目录:

  • 1. 准备工作

  • 2. 标记点

  • 3. 标记圆形区域

  • 4. 标记连线

  • 5. 标记区域

  • 6. 鼠标点击事件

  • 7. 鼠标操作标记

  • 8. 双地图

  • 9. 测距与面积

  • 10. 热力图

1. 准备工作

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

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
d194c1d9edc901bc95d216fa47a35640.png

2. 标记点

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

folium.Marker(
    location=None,
    popup=None,
    tooltip=None,
    icon=None,
    draggable=False,
    **kwargs,
)
  • location:经纬度列表

  • popup:点击标记点时弹出的内容

  • tooltip:鼠标移动到标记点时弹出的提示

  • icon:标记点颜色

# 提示语
tooltip = "点我"
# 标记点
folium.Marker(
    # 标记的点经纬度
    [40.005711,116.32529], 
    # 点击标记出现的 文本
    popup="情人坡",
    # 提示语(鼠标放到标记点上的提示语)
    tooltip=tooltip
).add_to(m)
m
658f782871ba4af8d32ce84bac567a9d.gif
标记点

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

# 图书馆
location = [40.004774,116.3251]

folium.Marker(
    location, 
    # max_width设置每行显示字符数
    popup=folium.Popup("图书馆",max_width=10),
    tooltip=tooltip
).add_to(m)
m
8406dda1349109eed6b21e91c953c2d2.gif
标记点提示横向显示

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

  • iconcolor:标记图案颜色

  • icon:标记形状,比如cloudcnyinfo-sign

# 不同的标记点样式
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
1eafe519d9b83499c1f5bbccd57005fa.png
标记点属性

3. 标记圆形区域

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

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

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
937867eb106166d39055f00dac155e21.gif
标记点圆形区域

4. 标记连线

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

# 标记线
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
87df4a16789f26285fceea734ee13af0.png
标记连线

5. 标记区域

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

# 标记区域
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
5424b557dced5f0fa02ccd75d2d325a9.png
标记区域

6. 鼠标点击事件

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

点击显示经纬度

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

点击进行标记点

# 点击显示标记点
m.add_child(folium.ClickForMarker(popup="选中的点"))
efa78657216ba64d586b6398154ef054.gif
点击进行标记点

7. 鼠标操作标记

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

# 鼠标操作绘制地图标记
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

c8e262871d2627c6b56d3a82ff637250.gif

鼠标操作标记

8. 双地图

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

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
b9692cb8d0045df510af093ee6161538.png
双地图

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

a31c8797630210c032aae6e7ea3f9fa7.gif
不同瓦片经纬度差异

9. 测距与面积

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

m = folium.Map([40.003451,116.326398],
               tiles= tiles,
               attr='高德-常规图',
               zoom_start=15,
               control_scale=True,
               width='70%'
              )
m.add_child(plugins.MeasureControl())
m
90dd56d4da37b0205844d1886d1ade97.gif
测距与面积

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

5d5fb7bbbe2f56900fe2211a304fce1f.png

10. 热力图

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

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

3dea075e2994125150bdf64d347428f6.png

阅读更多

5363d56617ddccfa2271f33c2a3b6ff1.png

8个常用的Python数据分析库(附案例+源码)

2021-12-18

d678d50947ebfd70c6db76d7aca1e007.png

用Python定时发送图片到群消息,并艾特了所有人!

2021-12-16

eb7c596f7317ba438249024154eea25f.png

Python操作Excel自动化实战案例

2021-12-12

84f616846e68c7de345e1ad91fa6cc86.png

d8b9bc434ecea880cb04a5009998b6be.gif

  • 3
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值