【可视化】中国主要城市空气质量交互地图

【可视化】中国主要城市空气质量交互地图

随着工业化和城市化的快速发展,空气污染问题日益严重,对公众健康和环境的影响不容忽视。PM2.5(细颗粒物)作为空气污染的重要指标,已经成为衡量城市空气质量的关键参数。为了更好地了解全国主要城市的空气质量状况,本节将结合 GeoPandasFolium库进行数据处理和可视化,制作直观、交互式的空气质量地图。

相关库简介

GeoPandas 是一个基于 Python 的开源库,用于地理数据处理和分析。它扩展了 Pandas 库,使其能够轻松处理地理数据。

GeoPandas 主要功能

GeoSeriesGeoDataFrame:类似于 Pandas 的 Series 和 DataFrame,GeoPandas 提供了 GeoSeries 和 GeoDataFrame 对象,用于存储和操作地理数据。

读写地理数据格式:GeoPandas 可以轻松读取和写入多种地理数据格式,如 Shapefile、GeoJSON、KML 等。

空间操作:支持常见的地理操作,如缓冲区、交集、联合、差集等;提供了距离计算、点在多边形内的判断等功能。

Folium 是一个用于在 Python 中创建交互式地图的库,基于 Leaflet.js。它使得在 Jupyter Notebook 或 web 应用中创建动态和交互式地图变得非常简单。

Folium 主要功能

创建基础地图:使用简单的命令创建不同风格和缩放级别的基础地图,支持多种地图瓦片,包括 OpenStreetMap、Mapbox、Stamen Terrain 等。

添加图层和标记:可以在地图上添加不同类型的图层和标记,如点标记、折线、面、多边形等。

数据可视化:支持将 Pandas DataFrame 转换为地理数据,并在地图上进行可视化。,提供热力图、Choropleth 图等高级可视化功能。

交互功能:地图是交互式的,可以进行缩放、平移等操作,支持在地图上添加工具提示和弹出窗口,实现更多的交互功能。

与 Jupyter Notebook 的集成:可以直接在 Jupyter Notebook 中显示交互式地图,方便地进行地理数据分析和展示。

代码实现

导入相关库

# -*- coding: UTF-8 -*-
# 导入相关库
import pandas as pd
import numpy as np
import geopandas as gpd
import pandas as pd
from shapely.geometry import Point
import folium
from folium.plugins import MarkerCluster
from folium.features import GeoJson,GeoJsonPopup,GeoJsonTooltip
from folium.plugins import MiniMap
from folium.plugins import MarkerCluster
from folium.plugins import HeatMap
from folium.plugins import Geocoder
from folium import Choropleth

加载数据

使用的数据集从Echarts官网的示例数据转换而来,记录了中国主要城市空气质量。PM25_VALUE记录了城市名和PM2.5浓度值,geoCoordMap记录了城市经纬度坐标。

# 数据来源于Echarts官网
#读取数据并观察存储格式
PM25_data=np.load('PM25_VALUE.npy',allow_pickle=True)#读取城市PM2.5数据
geoCoordMap=np.load('geoCoordMap.npy',allow_pickle=True).item()#读取城市经纬度信息

构建包含城市名,城市坐标与PM2.5浓度值的Dataframe

#根据城市名匹配经纬度,返回包含[城市名,坐标,浓度值]的geo_data对象
def get_geo_data(data, geo_coord_map):
    geo_data = []
    #遍历PM2.5浓度数据
    for item in data:
        name = item["name"]
        value = item["value"]
        coord = geo_coord_map.get(name)#匹配城市经纬度信息
        if coord:
            geo_data.append((name, coord, value))
    return geo_data
#构建包含经纬度信息的城市PM2.5浓度列表
geo_data = get_geo_data(PM25_data, geoCoordMap)
#构建包含城市名,城市坐标与PM2.5浓度值的Dataframe
df=pd.DataFrame(geo_data)
df.columns=['城市','坐标','PM2.5浓度']
df.head(10)

处理后的数据如下:

绘制主要城市空气质量点聚类图

#定义点聚类图函数
def draw_cluster(m,gdf):
    #创建map,添加比例尺控件
    marker_cluster = MarkerCluster().add_to(m)
    # 添加聚类点
    for i in range(len(gdf)):
        temp=gdf.loc[i]
        label='位置:'+'lon:{},lat:{}'.format(temp["坐标"][0],temp["坐标"][1])+'\n'+"城市名:"+str(temp['城市'])+'\n'+"PM2.5浓度"+''.format(temp['PM2.5浓度'])+'(μg/m3)'#定义展示标签
        folium.Marker(
            location=[temp["坐标"][1], temp["坐标"][0]],
            icon=folium.Icon(color='blue',icon='cloud'),#定义符号样式
            popup=label,#定义展示标签
        ).add_to(marker_cluster)
    
    #将聚类对象添加到地图
    m.add_child(marker_cluster)
    #添加索引图
    minimap = MiniMap(toggle_display=True)
    m.add_child(minimap)
# 创建基础地图
m = folium.Map(location=[35.8617, 104.1954], zoom_start=5)
#在基础地图上绘制城市点聚类
draw_cluster(m,PM_gdf)
#展示地图
m 

空气质量分级显示

根据我国空气质量国家标准,对中国主要城市的空气质量进行分级显示。
参考下表:

PM2.5指数日均浓度值(ug/m3)空气质量等级
0-500-35一级(优)
50-10035-75二级(良)
100-15075-115三级(轻度污染)
150-200115-150四级(中度污染)
200-300150-250五级(重度污染)
300-500250-500六级(严重污染)

绘制中国主要城市空气质量交互地图

#根据国标设置分级显示策略
def style_function(feature):
    style = {}
    #从对象中获取属性值
    pm25=feature["properties"]['PM2.5浓度']
    if pm25 <= 50:
        style = {"radius":3,'fillColor':"green"}
    elif pm25 <= 100:
        style = {"radius":6,'fillColor':"blue"}
    elif pm25 <= 150:
        style = {"radius":9,'fillColor':'yellow'}
    elif pm25 <= 200:
        style = {"radius":12,'fillColor': 'orange'}
    elif pm25 <= 300:
        style = {"radius":15,'fillColor':'red'}
    else:
        style = {"radius":18,'fillColor':'purple'}
    return style
#初始化地图对象
m = folium.Map(location=[35.8617, 104.1954], zoom_start=5)
#定义标记点
circleMarker = folium.CircleMarker(
    radius=5,
    fill_color="orange",  # 填充颜色
    fill_opacity=0.6,     # 填充透明度
    color="black",         # 边界颜色
    weight=1               # 边界宽度
)
#构建地图几何对象
gjson=GeoJson(data=PM_gdf,
            style_function=style_function,
            marker=circleMarker,
            name="PM2.5浓度",
            ).add_to(m)
Geocoder(collapsed=True).add_to(m)
#添加单击显示
GeoJsonPopup(fields=['城市','坐标','PM2.5浓度','空气质量等级'],labels=True).add_to(gjson)
#添加鼠标移动显示
GeoJsonTooltip(fields=['城市','坐标','PM2.5浓度','空气质量等级'],labels=True).add_to(gjson)
#添加索引图
minimap = MiniMap(toggle_display=True)
m.add_child(minimap)
#添加图层切换控件
folium.LayerControl().add_to(m)
#显示地图
m
# #保存为html
# m.save('PM25.html')

结果展示

主要城市空气质量点聚类图

中国主要城市空气质量交互地图

推荐阅读

欢迎关注我的公众号“AI拾贝”,原创技术文章第一时间推送。后台发送geomap,自动回复源码和数据。

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值