Folium 笔记:使用PopUp突出subzone的空间分布

news2024/11/22 21:34:14

0 效果图

点开某一个区域后,内容是这个区域的用地类型分布

1 读取数据

import folium
import matplotlib.pyplot as plt
import re
import geopandas as gpd
subzone=gpd.read_file('MasterPlan2019PlanningAreaBoundaryNoSea.geojson')
subzone

2 提取subzone 信息

对description列进行正则表达式操作,提取subzone信息

def extract_name_from_description(description):
    match = re.search(r"<th>PLN_AREA_N</th> <td>(.*?)</td>", description)
    #使用正则表达式查找subzone的名字
    #查找的是' <th>PLN_AREA_N</th> <td>BUKIT BATOK</td>'这一部分内容
    #BUKIT BATOK 是第一个group
    return match.group(1) if match else None
    #返回对应的subzone的名字


subzone['subzone_name']=subzone['Description'].apply(extract_name_from_description)
subzone=subzone[['subzone_name','geometry']]
subzone

3 找到地图的中心点,并绘制subzone图

center_sg=subzone.geometry.unary_union.centroid
print(center_sg)
#POINT (103.82073869660411 1.3524404921177333)

m = folium.Map(location=(list(center_sg.coords)[0][1],list(center_sg.coords)[0][0]), zoom_start=11)
#绘制地图

folium.GeoJson(subzone,
            style_function=lambda x: {"fillColor": "lightgrey", "color": "blue", "weight": 0.5},).add_to(m)
m
#将subzone数据作为GeoJson添加到map中

4 制造伪数据,四个区域的用地类型分布

data={'JURONG WEST':{'industry':12.1,
                     'residential':20.4,
                    'comercial':1.5,
                    'open space':36.3,
                    'others':100-12.1-20.4-1.5-36.3},
     'ORCHARD':{'industry':0,
                     'residential':49.1,
                    'comercial':20.2,
                    'open space':20.9,
                    'others':100-0-49.1-20.2-20.9},
     'BISHAN':{'industry':0,
                     'residential':48.2,
                    'comercial':3.1,
                    'open space':22.4,
                    'others':100-0-48.2-3.1-22.4},
     'TUAS':{'industry':62.7,
                     'residential':0,
                    'comercial':0,
                    'open space':19.8,
                    'others':100-62.7-0-0-19.8}}

5 绘制饼图

def pie_chart_popup(area_name, data):
    plt.figure(figsize=(5, 4))
    plt.pie([data[area_name]['industry'],data[area_name]['residential'],data[area_name]['comercial'],data[area_name]['open space'],data[area_name]['others']],
           labels=['industry', 'residential','comercial','open space','others'],
           autopct='%1.1f%%')
    plt.title('Land use of '+f"{area_name}")
    #绘制饼图
    
    plt.savefig(f'{area_name}'+'.png')
    return folium.Popup(f'<img src="{area_name}.png">', max_width=265)
    #Popup就是点这块区域,就会弹出后面的这个html,也就是我们所画的饼图

6 将饼图和folium图结合

for subzone_name in data.keys():
    row=subzone[subzone['subzone_name']==subzone_name]
    #找到subzone对应的行

    
    folium.GeoJson(
            row,
            style_function=lambda x: {"fillColor": "green", "color": "#000000", "weight": 0.5},
            tooltip=subzone_name,  
            popup=pie_chart_popup(subzone_name, data)
        ).add_to(m)
    #在地图中画出这个subzone
    #tooltip就是鼠标滑过这片区域,就会显示的字
    #popup就是点击后弹出对应的饼图

m.save('subzone_proportion.html')
#保存html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

thinkphp6

unexpected , expecting case (T_CASE) or default (T_DEFAULT) or } 在模板中应用{switch}{/switch}标签,报错,其实是switch的问题&#xff0c;模板解析后&#xff0c;switch:和第一个case:之间不能有有输出的&#xff0c;一个空格也不行&#xff0c;所以第一个要紧跟着 Thi…

【LeetCode刷题(数据结构)】:对称二叉树

给你一个二叉树的根节点 root 检查它是否轴对称 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a; 树中节点数目在范围 [1, 1000] 内 -100 < Node.val < 100 对称二叉…

芯片学习记录AM26LS31INSR

AM26LS31INSR 芯片介绍 AM26LS31 系列器件是四路互补输出线路驱动器&#xff0c;可 满足 ANSI TIA/EIA-422-B 和 ITU &#xff08;原 CCITT &#xff09;建议 V.11 的要求。三态输出可提供用于驱动双绞线或平行 双线传输线路等平衡线路的高电流&#xff0c;并在断电情况下处…

C# 解决从其他地方迁移项目,引用中大多数包是感叹号的问题

当在 Visual Studio 中复制别人的 C# 项目时&#xff0c;遇到许多包冒感叹号的问题通常是因为缺少相关的 NuGet 包或引用不正确导致的。这会在解决方案资源管理器中的引用下显示感叹号。 解决办法如下&#xff1a; 在 Visual Studio 中打开项目。 在解决方案资源管理器中&…

Ubuntu 上传项目到 GitHub

一、前言 GitHub 作为时下最大的开源代码管理项目&#xff0c;广泛被工程和科研人员使用&#xff0c;本文主要介绍如何如何将自己的项目程序上传到 GitHub 上。 要上传本地项目到 GitHub 上&#xff0c;主要分为两步&#xff0c;第一步是 二、创建 SSH keys 首先登录 GitHu…

[Linux打怪升级之路]-管道

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习目标&…

SystemVerilog Assertions应用指南 第一章(1.25章节 “throughout”运算符)

蕴含( (implication)是目前讨论到的允许定义前提条件的一项技术。例如,要对一个指定的序列进行检验,必须某个前提条件为真。也有这样的情况,要求在检验序列的整个过程中,某个条件必须一直为真。蕴含只在时钟边沿检验前提条件一次,然后就开始检验后续算子部分,因此它不检测先行算…

“一馆一策”保亚运,精准气象服务背后的数据魔法

第十九届杭州亚运会已隆重闭幕&#xff0c;十五个比赛日留下了无数精彩的瞬间&#xff1a;开幕式数字火炬手点燃主火炬、男女100米接力赛的激情澎湃、“时间孤勇者”丘索维金娜的坚持、围棋选手柯洁的泪洒赛场…… 作为亚洲水平最高的综合型运动会&#xff0c;本届杭州亚运会竞…

指令跳转:原来if...else就是goto

目录 CPU 是如何执行指令的&#xff1f; 从 if…else 来看程序的执行和跳转 如何通过 if…else 和 goto 来实现循环&#xff1f; 小结 你平时写的程序中&#xff0c;肯定不只有 int a 1 这样最最简单的代码或者指令。我们总是要用到 if…else 这样的条件判断语句、while 和…

教你怎么在电脑端下载西瓜视频源文件

家里长辈平时爱用西瓜视频&#xff0c;看到喜欢的广场舞就会收藏&#xff0c;甚至想下载到视频机&#xff0c;晚上去广场跟着跳&#x1f923;。 这时计算机专业出身的我&#xff0c;就派上用场了。不废话&#xff0c;直接上手&#xff1a; 打开西瓜视频官网&#xff0c;搜索到…

SystemVerilog Assertions应用指南 第一章(1.27章节 “within”运算符)

“ within”构造允许在一个序列中定义另一个序列。 seq1 within seq2 这表示seq1在seq2的开始到结束的范围内发生,且序列seq2的开始匹配点必须在seq1的开始匹配点之前发生,序列seq1的结束匹配点必须在seq2的结束匹配点之前结束。属性p32检查序列s32a在信号“ start”的上升沿和…

【Redis】Java客户端使用list命令

lpush/lrange rpush/rpop/lpop blpop/brpop llen

SQL Server——数据与表的操作

SQL Server 一、实验目的二、实验内容三、实验要求四、实验过程图形化界面完成此实验使用SQL语句进行创建数据库、表格&#xff0c;修改数据库内容、删除数据库 五、实验心得与体会&#xff1a; 一、实验目的 1)熟悉management studio环境。2)掌握management studio环境下创建…

Hadoop3教程(五):NameNode和SecondaryNameNode

文章目录 &#xff08;59&#xff09;NN和2NN的工作机制&#xff08;60&#xff09;FsImage镜像文件&#xff08;61&#xff09;Edits编辑日志&#xff08;62&#xff09;Checkpoint时间设置参考文献 &#xff08;59&#xff09;NN和2NN的工作机制 NameNode的数据是存储在磁盘…

TLP2168

学习记录一下TLP2168 光耦&#xff08;Optocoupler&#xff09;是一种将电气信号转换为光信号再转换回电气信号的装置。它通常由一个发光二极管&#xff08;LED&#xff09;和一个光敏三极管&#xff08;Phototransistor&#xff09;或光敏二极管组成。光耦在电子电路中起到隔…

带你清晰理解二叉树的递归与解题思路(框架思维!)

文章目录 前言&#xff1a;&#x1f415;啥叫“框架思维”&#x1f3e8;深入理解前中后序&#x1fa80;前序位置与后序位置区别 两种解题思路&#xff1a;下面用几道简单题来练习一下&#xff1a;&#x1f380;力扣 104.二叉树的最大深度&#x1f380;力扣 144.翻转二叉树 前言…

树莓派部署.net core控制台程序

1、在自己的电脑上使用VS写一个Net6.0的控制台程序&#xff0c;我假设我就写个Helloworld。 发布项目 使用mobaxterm上传程序 就传三个文件就行 回到在mobaxterm中&#xff0c;进入目录输入&#xff1a;cd consolepublish,运行程序&#xff1a; dotnet ConsoleApp1.dll 输出h…

亚马逊精细化运营是什么意思?旺季如何高效进行数据精细化运营?—站斧浏览器

亚马逊精细化运营是什么意思&#xff1f; 精细化运营是去精心打造一件产品&#xff0c;例如把店铺运作的某款产品挑出来着重分析。分析方式可以是把卖家所看中在亚马逊中排名较好的产品&#xff0c;用EXCEL电子表格对选中的产品&#xff0c;在平台相关数据表现做数据统计对比。…

unity ugui text 超链接和下划线,支持富文本

项目需要用到该功能&#xff0c; 搜索和参考了很多文章&#xff0c;要么不支持富文本&#xff0c;要不没有下划线&#xff0c;要么是错误的&#xff0c;修修改改后满足我的需求&#xff0c;代码如下 using System; using System.Collections.Generic; using System.Text; usin…

微信小程序备案流程操作详解,值得收藏

目录 一、小程序备案法律法规参考 二、备案前准备 2.1 备案入口 2.1.1、未上架小程序 2.1.2、已上架小程序 (二)备案类型 (三)备案材料准备 3.1、小程序备案材料 3.2、前置审批材料 3.3、个人备案 3.4、非个人备案 三、备案整体流程 (一)备案信息填写 1、主体信息…