文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

python用folium绘制地图并设置弹窗效果

2024-04-02 19:55

关注

python–Folium

官方说明:folium.link.

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, jpg_enabled=False, zoom_control=True, **kwargs)

Parameters 参数说明

basic example


m = folium.Map(location=[45.523, -122.675], width=750, height=500)

m = folium.Map(location=[45.523, -122.675], tiles='cartodb positron')

m = folium.Map(

   location=[45.523, -122.675],

   zoom_start=2,

   tiles='https://api.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}.jpg?access_token=mytoken',

   attr='Mapbox attribution'
...)

Markers


m = folium.Map(location=[45.372, -121.6972], zoom_start=12, tiles="Stamen Terrain")

tooltip = "Click me!"

folium.Marker(
    [45.3288, -121.6625], popup="<i>Mt. Hood Meadows</i>", tooltip=tooltip
).add_to(m)

tooltip:点击标记后弹出的信息
popup:鼠标放标记上显示的信息

在这里插入图片描述

标记样式修改


m = folium.Map(location=[45.372, -121.6972], zoom_start=12, tiles="Stamen Terrain")

folium.Marker(
    location=[45.3288, -121.6625],
    popup="Mt. Hood Meadows",
    icon=folium.Icon(icon="cloud"),
).add_to(m)

folium.Marker(
    location=[45.3311, -121.7113],
    popup="Timberline Lodge",
    icon=folium.Icon(color="green"),
).add_to(m)

folium.Marker(
    location=[45.3300, -121.6823],
    popup="Some Other Location",
    icon=folium.Icon(color="red", icon="info-sign"),
).add_to(m)

在这里插入图片描述

标记圆形区域

在这里插入图片描述

点击任意位置出现经纬度folium.LatLngPopup()


m = folium.Map(location=[46.1991, -122.1889], tiles="Stamen Terrain", zoom_start=13)

m.add_child(folium.LatLngPopup())

Alt

打点功能:点击任意位置出现标记,再点击弹出信息


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"))

在这里插入图片描述

允许显示任何HTML对象


m = folium.Map(location=[46.3014, -123.7390], zoom_start=7, tiles="Stamen Terrain")

folium.Marker(
    location=[47.3489, -124.708],
    popup=folium.Popup(max_width=450).add_child(
        folium.Vega(vis1, width=450, height=250)
    ),
).add_to(m)

在这里插入图片描述

可以参考的代码
html参考链接

实战

用folium绘制中国的政策地图,城市的政策汇总在一个excel表中。要实现的效果是政策可视化,点击某一个城市,可以弹出这个城市所有的政策。


import folium
import webbrowser as wb
import numpy as np
import xlrd
import pandas as pd
from folium import CustomIcon

def get_data():
    '''
    return:
    df_data:返回城市对应的编号,经纬度
    df_policy:返回城市的政策名称、链接、编号
    '''
    file_name = 'policy.xls'
    all_data = xlrd.open_workbook(file_name)
    table = all_data.sheet_by_name('num_lat_lon')
    df_data = pd.DataFrame(columns=['city','number','latitude','longitude'])
    for i in range(1,table.nrows):
        df_data.loc[i] = table.row_values(i)

    table_policy = all_data.sheet_by_name('policy')
    df_policy = pd.DataFrame(columns=['number','name','link'])
    for i in range(1,table_policy.nrows):
        df_policy.loc[i,'number'] = table_policy.cell(i,3).value
        df_policy.loc[i,'name'] = table_policy.cell(i,1).value
        df_policy.loc[i,'link'] = table_policy.cell(i,2).value

    return df_data, df_policy

    # 中文转换
def parse_zhch(s):
        return str(str(s).encode('ascii' , 'xmlcharrefreplace'))[2:-1]

def show_map(df_data,df_policy):
    '''
    可以使用高德地图或默认地图
    m = folium.Map(zoom_start=4,zoom_control=True,tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',attr='default')
    '''
    # 默认地图
    m = folium.Map(location=[39.904,116.408],zoom_start=4,zoom_control=True,tiles='OpenStreetMap')
    for i in range(1,len(df_data)):
        # 得到该城市的编号、经纬度
        number = df_data.loc[i,'number']
        latitude = df_data.loc[i,'latitude']
        longitude = df_data.loc[i,'longitude']
        tip = df_data.loc[i,'city']

        # 获取城市编号对应的所有政策和链接的行索引
        city_index = df_policy[df_policy.number == number].index.tolist()
        # 将城市名称和链接放同一个list中
        s=[]
        for i in city_index:
            s.append(df_policy.loc[i,'name']) 
            s.append(df_policy.loc[i,'link'])
        # 计算最大长度
        length = []
        for i in range(len(s)):
            length.append(len(s[i]))
        WIDTH = max(length)
        # 点击弹出内容和弹出框大小设置
        ss=''
        for i in range(len(s)):
            ss = ss + s[i] + '</br>' 
        pop = folium.Popup(html=ss,max_width=WIDTH*10)
        icon = CustomIcon(icon_image ='loc.jpg',icon_size=(20, 20))
        # tooltip:悬浮弹出信息;popup:点击出现信息
        folium.Marker([latitude,longitude],icon=icon, popup=pop,tooltip=parse_zhch(tip)).add_to(m)

    m.save('map.html')
    wb.open('map.html')


if __name__ == '__main__':

    df_data,df_policy = get_data()
    show_map(df_data,df_policy)

实现效果:

在这里插入图片描述

到此这篇关于python用folium绘制地图并设置弹窗效果的文章就介绍到这了,更多相关python folium绘制地图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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