WebGIS视角:体感温度实证,哪座“火炉”火力全开?

WebGIS视角:体感温度实证,哪座“火炉”火力全开?

目录

前言

一、火炉城市空间分布及特点

1、空间分布

2、气候特点

二、数据来源及技术实现

1、数据来源介绍

2、技术路线简介

三、WebGIS系统实现

1、后端设计与实现

2、前端程序实现

四、成果展示

1、整体展示

2、蒸烤模式城市

3、舒适城市

五、总结


前言

        “火炉城市”是中国对夏季天气酷热的城市的夸张称呼。这一说法最早出现在民国时期,当时媒体有“三大火炉”之说,即重庆、武汉和南京,都是长江沿线的著名大城市,分别居于长江的上、中、下游,因夏季气温炎热,被媒体夸张地称为“火炉”。新中国成立后,又有了“四大火炉”之说,这有几种城市组合,多指长江流域的几个城市。第一种组合是武汉、南京、重庆、南昌;第二种组合是武汉、南京、重庆、长沙。

        随着时间的推移,火炉城市的名单也在发生变化。2017年,中国气象局国家气候中心发布榜单,通过综合分析中国省会城市和直辖市的气象资料,首次向公众权威公布中国夏季炎热城市情况。综合分析的结果是,夏季炎热程度靠前的10个省会城市或直辖市分别为:重庆、福州、杭州、南昌、长沙、武汉、西安、南京、合肥、南宁。其中,排在前列的重庆、福州、杭州、南昌四个城市被不少网民冠名为“新四大火炉”,武汉退出前四,位居第六。如下图所示:

        通过WebGIS技术进行体感温度的实证分析,可以实现对火炉城市“火力”的精细化评估。这种分析不仅可以帮助城市管理者更好地了解城市热环境的现状,为城市规划和公共设施布局提供科学依据,还可以为居民提供更准确的天气信息,帮助他们合理安排户外活动,减少高温天气对健康的影响。此外,体感温度的实证分析还可以为气候变化研究提供数据支持。在WebGIS技术的助力下,通过整合多源数据,实现对火炉城市“火力”的动态监测和精细化评估,不仅可以提高城市居民的生活质量,还可以为城市的可持续发展提供有力保障。本文将从WebGIS技术背景出发,结合火炉城市的相关知识,探讨如何通过体感温度的综合,揭示各火炉城市的“火力”现状。  

一、火炉城市空间分布及特点

        本节将简单介绍一下关于火炉城市的空间分布及其特点,不知道看文章的朋友是否就在这些城市当中呢?欢迎在评论区留言交流。

1、空间分布

        长江流域的集中分布

        传统火炉城市大多集中在长江流域,包括重庆、武汉、南京等。这些城市共同的地理特征是位于河谷、盆地地带,地形闭塞,四周被高山环绕,地势低洼,热空气不容易扩散,形成了“天然蒸笼”。例如:

  • 重庆:地处四川盆地,四周被大巴山、巫山、武陵山、大娄山等山脉环绕,地形封闭,夏季热量难以散发。
  • 武汉:位于长江中游的江汉平原,地势平坦,河湖众多,水汽蒸发加剧湿度,形成“蒸笼模式”。
  • 南京:地处长江下游,夏季受副热带高压控制,气温居高不下,且城市绿化较好,近年来高温天气有所缓解。

        河谷与盆地地形

        城市大多位于河谷或盆地地带,地形不利于热量的散发,导致高温天气持续时间长。例如:

  • 重庆:位于四川盆地,海拔较低,四周群山环绕,热空气难以扩散。
  • 南昌:位于鄱阳湖平原,三面环山,北临鄱阳湖,空气流动性差,夏季高温天数多。
  • 长沙:位于湘江流域,夏季湿度大,高温天气频繁,且受焚风效应影响,进一步加剧炎热。

        从流域分布来看,这些城市大多都是沿着长江流域分布,黄河流域只有西安一个城市,珠三角水系有南宁这个城市。

2、气候特点

        火炉城市具有以下共同特点:

  1. 高温天气:夏季高温持续时间较长,气温普遍超过35℃,最高气温甚至可达40℃以上。
  2. 潮湿天气:这些城市夏季湿度较大,空气潮湿,使得高温天气更加难以忍受。
  3. 热浪袭击:夏季,火炉城市常常出现热浪袭击,持续时间长,影响范围广。

        城市热岛效应

        随着城市化进程的加快,城市热岛效应也成为火炉城市高温天气的重要因素。例如:

  • 武汉:城市建筑密集,热岛效应显著,夏季城区温度比郊区高3-5℃。
  • 南昌:城市热岛效应明显,夏季夜间温度常居30℃以上。
  • 南京:通过增加城市绿道与湿地,体感温度有所下降。

        地理位置与季风影响

        这些城市大多位于亚热带季风气候区,夏季受副热带高压控制,气温高,湿度大。例如:

  • 重庆:夏季受副热带高压影响,气温上升,且冷空气难以翻越秦岭大巴山,台风也很难影响到重庆。
  • 武汉:夏季受副热带高压控制,气温高,湿度大,且河湖蒸发加剧湿度。
  • 南京:夏季受副热带高压控制,气温高,湿度大,但近年来通过城市绿化等措施,高温天气有所缓解。

        以博主生活工作的城市长沙为例,就是一个酷暑难耐的城市,加上城市的湿度大,体感真的跟蒸桑拿差不多。

二、数据来源及技术实现

        本节将介绍火炉城市展示时的天气数据来源和具体的技术路线。

1、数据来源介绍

        本博客使用的数据主要分为两类,第一类是空间数据,包括城市空间信息和城市所在经纬度信息。第二类是天气信息。详细见以下表格:

序号数据说明
1城市区域范围表,biz_city导入的国家地级市区域范围,Polygon面数据
2城市点位信息表,biz_geographic_name导入的城市地名位置信息表,Point点数据
3城市天气信息表百度实时天气接口,webAPI获取,数据时点:2025年8月30日13:00左右

        根据之前的火炉城市介绍,我们将城市名称和城市的行政区划代码整理如下,这个表格是后面工作开展的基础。

序号行政区划代码城市名称
1360100南昌市
2500000重庆市
3330100杭州市
4320100南京市
5420100武汉市
6340100合肥市
7350100福州市
8450100南宁市
9430100长沙市
10610100西安市

2、技术路线简介

        以上是简化的技术路线介绍,首先需要获取百度地图的天气接口,将实时天气信息缓存到本地,然后使用空间查询服务将城市区域信息和城市点位信息和天气信息进行时空关联检索,最后将检索数据进行渲染输出,叠加到WebGIS组件中,完成一个整体的从数据获取到关联和输出的过程。关于如何获取百度地图的天气信息和本次存储的落地,欢迎大家查看之前的系列文章GSON 框架下百度天气 JSON 数据转 JavaBean 的实战攻略基于 MybatisPlus 将百度天气数据存储至 PostgreSQL 数据库的实践,这里不再赘述。

三、WebGIS系统实现

        本节重点从前后端来进行火炉城市的WebGIS系统实现,详细讲解空间关联查询的具体实现等知识。

1、后端设计与实现

        与之前介绍过的省域区县天气查询的服务类似,这里我们依然需要关联天气实时信息和城市的行政区划范围和点位信息。关联查询的Mapper实现如下:

package com.yelang.project.meteorology.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yelang.project.meteorology.domain.AreaWeatherVO; import com.yelang.project.meteorology.domain.WeatherNow; public interface WeatherNowMapper extends BaseMapper<WeatherNow>{ final static String GET_THREEFURNACES_INFO = "<script>" + " SELECT t2.*,T.province_code,T.province_name,T.city_code,T.city_name, " + " st_asgeojson ( T.geom ) geomJson,st_x ( t1.geom ) lon,st_y ( t1.geom ) lat " + " FROM biz_weather_now t2,biz_city T,biz_geographic_name t1 " + " WHERE to_char( t2.uptime, 'YYYY-MM-DD' ) = #{day} " + " AND t2.location_code in ('350100','330100','360100','430100','420100','610100','320100','340100','450100','500000') " + " AND T.city_name = t1.NAME AND T.city_code = t2.location_code ORDER BY t2.feels_like desc " + "</script>"; /** * - 根据指定日期查询火炉城市天气信息列表 * @param day 日期信息 * @return */ @Select(GET_THREEFURNACES_INFO) List<AreaWeatherVO> getThreeFurnacesInfo(@Param("day") String day); }

        这里为了方便将上面的城市行政区划代码直接作为已知条件拼接到SQL语句当中了,这里仅仅为了方便演示,实际项目中,为了实现更大的通用性,建议将SQL提取出来,通过参数的形式传进去,这样的通用性和扩展性会更高。在控制层中传入统一时点,即2025年8月30日来调用上面的数据查询层,关键代码如下:

package com.yelang.project.meteorology.controller; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.yelang.framework.web.controller.BaseController; import com.yelang.framework.web.domain.AjaxResult; import com.yelang.project.meteorology.domain.AreaWeatherVO; import com.yelang.project.meteorology.service.IWeatherNowService; @Controller @RequestMapping("/met/threefurnaces/weather") public class ThreeFurnacesController extends BaseController{ private String prefix = "meteorology/weather"; @Autowired private IWeatherNowService weatherNowService; @RequiresPermissions("met:threefurnaces:weather:map") @GetMapping("/index") public String index(){ return prefix + "/threefurnacesmap"; } @RequiresPermissions("met:threefurnaces:weather:list") @GetMapping("/list") @ResponseBody public AjaxResult list(){ String day = "2025-08-30"; List<AreaWeatherVO> dataList = weatherNowService.getThreeFurnacesInfo(day); return AjaxResult.success().put("data", dataList); } }

2、前端程序实现

        前端采用Leaflet组件来进行WebGIS数据展示,需要展示的数据包括行政区划范围、城市点位以及体感温度数据,将温度信息叠加在空间范围和点位进行绑定,展示的代码如下:

function previewWeather(pid,provinceCode,name){ $.ajax({ type:"get", url:ctx + "/met/threefurnaces/weather/list", data:{}, dataType:"json", cache:false, processData:false, success:function(result){ if(result.code == web_status.SUCCESS){ collisionLayer.clearLayers(); var dataArray = result.data; if(dataArray != null && dataArray.length > 1){ var legendData = new Array(); for(var i = 0;i< dataArray.length;i++){ var areaData = dataArray[i]; var color = makeColor(areaData.feelsLike,-20,45,DIY_BLUE_GREEN_YELLOW_RED_SCHEME); var areaLayer = L.geoJSON(JSON.parse(areaData.geomJson),{style: {color:color,fillColor:color,weight:3,"opacity":0.65, fillOpacity: 0.65 }}).addTo(mymap); var myIcon = L.divIcon({ iconSize: null, className: '', popupAnchor:[5,5], shadowAnchor:[5,5], html: buildShowInfo(i,color,areaData) }); showLayerGroup.addLayer(areaLayer); //中心点位 L.marker([areaData.lat, areaData.lon], { icon: myIcon}).addTo(collisionLayer); } collisionLayer.addTo(showLayerGroup); } } }, error:function(){ $.modal.alertWarning("获取空间信息失败"); } }); }

        使用以上的代码即可完成后端的数据检索生成以及将数据成果渲染到前端WebGIS组件中。下面我们来看看整体的效果。

四、成果展示

        经过前面几个步骤,我们基本完成了数据来源和技术路线介绍,详细的介绍了WebGIS系统设计与实现,包括的前后端的具体实现。接下来结合WebGIS来看看这10个火炉城市到底哪些在慢慢熄火,哪些在持续发威。

1、整体展示

        从空间分布来看,这10个城市中,基本是位于我国东南部,长江流域中下游的城市。而体感最热的像杭州、南京、南京等,均到38度左右,长沙紧随其后37度,武汉和福州35度,南京32度。重庆和西安体感温度算舒适的,尤其是西安,都到了21度了,有秋天的感觉了。

2、蒸烤模式城市

        时间到了8月30日,还处在蒸笼模式的城市主要是这几个:杭州38度、南京38度、南昌38度,长沙37度,还记得以前从武汉汉口火车站转火车去上海的岁月,在汉口火车站里,确实是蒸笼的炙烤。经济最火热的长三角,天气也是一样的高燃。

3、舒适城市

        可能是纬度的缘故,也或许是时令的变化,重庆市和西安竟然意外的凉快,体感温度居然都是30度一下,西安甚至来到了20度左右,体感是非常舒适了,慢慢有了秋天的感觉。

五、总结

        以上就是本文的主要内容,本文通过WebGIS技术进行体感温度的实证分析,可以实现对火炉城市“火力”的精细化评估。这种分析不仅可以帮助城市管理者更好地了解城市热环境的现状,为城市规划和公共设施布局提供科学依据,还可以为居民提供更准确的天气信息,帮助他们合理安排户外活动,减少高温天气对健康的影响。此外,体感温度的实证分析还可以为气候变化研究提供数据支持。在WebGIS技术的助力下,通过整合多源数据,实现对火炉城市“火力”的动态监测和精细化评估,不仅可以提高城市居民的生活质量,还可以为城市的可持续发展提供有力保障。

        通过百度提供的天气接口,我们可以对传统的火炉城市的实时气温进行综合评估,通过实例可以看到,时间到了8月30日,我们的长三角地区的城市依然享受太阳的温暖怀抱,而西北和重庆则相对迎来凉爽的天气。行文仓促,受限于博主的知识量和才学,也受限于天气数据采样的时间点,对于体感温度的火炉发威信息进行了一个简单的比较,如有不准,在此恳请各位专家博主在评论区留言指出,十分感谢。

Read more

Flutter 三方库 serial_csv 的鸿蒙化适配指南 - 实现极速的流式 CSV 数据编解码、支持端侧超大规模表格数据的高效序列化实战

Flutter 三方库 serial_csv 的鸿蒙化适配指南 - 实现极速的流式 CSV 数据编解码、支持端侧超大规模表格数据的高效序列化实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 serial_csv 的鸿蒙化适配指南 - 实现极速的流式 CSV 数据编解码、支持端侧超大规模表格数据的高效序列化实战 前言 在进行 Flutter for OpenHarmony 的金融报表、工业数据采集或大型列表导出应用开发时,CSV(Comma-Separated Values)由于其通用的文本属性成为首选的数据交换格式。然而,当文件达到数万行甚至更庞大时,常规的字符串拼接会导致内存爆炸。serial_csv 是一款专为极致性能设计的流式解析库。本文将探讨如何在鸿蒙端构建稳健、低开销的大数据处理方案。 一、原原理性解析 / 概念介绍 1.1 基础原理 serial_csv 采用了一种“增量扫描(Incremental Scanning)”算法。在读取时,它不一次性将整个文件加载进内存,而是通过缓冲区轮询,

By Ne0inhk
鸿蒙金融理财全栈项目——上线与运维、用户反馈、持续迭代优化

鸿蒙金融理财全栈项目——上线与运维、用户反馈、持续迭代优化

《鸿蒙APP开发从入门到精通》第25篇:鸿蒙金融理财全栈项目——上线与运维、用户反馈、持续迭代优化 🚀📱🔧 内容承接与核心价值 这是《鸿蒙APP开发从入门到精通》的第25篇——上线与运维、用户反馈、持续迭代优化篇,100%承接第24篇的生态合作、用户运营优化、数据产品变现优化架构,并基于金融场景的上线与运维、用户反馈、持续迭代优化要求,设计并实现鸿蒙金融理财全栈项目的上线与运维、用户反馈、持续迭代优化功能。 学习目标: * 掌握鸿蒙金融理财项目的上线与运维优化设计与实现; * 实现应用上线优化、应用运维优化、应用监控优化; * 理解用户反馈在金融场景的核心优化设计与实现; * 实现用户反馈收集优化、用户反馈分析优化、用户反馈处理优化; * 掌握持续迭代优化在金融场景的设计与实现; * 实现持续集成优化、持续部署优化、持续交付优化; * 优化金融理财项目的用户体验(上线与运维、用户反馈、持续迭代优化)。 学习重点: * 鸿蒙金融理财项目的上线与运维优化设计原则; * 用户反馈在金融场景的优化应用; * 持续迭代优化在金融场景的设计要点。 一、

By Ne0inhk
Flutter 组件 cron_parser 的适配 鸿蒙Harmony 实战 - 驾驭 Cron 表达式解析、实现鸿蒙端高精度定时任务调度与触发逻辑预判方案

Flutter 组件 cron_parser 的适配 鸿蒙Harmony 实战 - 驾驭 Cron 表达式解析、实现鸿蒙端高精度定时任务调度与触发逻辑预判方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 cron_parser 的适配 鸿蒙Harmony 实战 - 驾驭 Cron 表达式解析、实现鸿蒙端高精度定时任务调度与触发逻辑预判方案 前言 在构建具备高度自动化能力的鸿蒙(OpenHarmony)应用时,“定时触发”是一个绕不开的核心需求。无论是每天凌晨三点的数据库自动化维护,还是每隔五分钟的环境温湿度同步录入,一套稳定、标准的定时规则描述符(Cron Expression)是支撑这些后台逻辑的核心心脏。 虽然简单的 Timer 能够处理定时的延时,但对于诸如“每个月最后一个周五的 14:00 运行”这种复杂的业务逻辑,手动编写判断代码将是维护者的噩梦。 cron_parser 是一款专为 Dart 设计的高性能 Cron 表达式解析器。它不仅支持标准的五段式、六段式语法,更提供了极低延迟的“

By Ne0inhk
Linux 动静态库完全指南:制作、使用、原理与实战

Linux 动静态库完全指南:制作、使用、原理与实战

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 库的基础认知:是什么?有哪些? * 1.1 库的本质 * 1.2 库的分类与系统位置 * 1.3 预备工作:自定义库源码 * 二. 静态库:编译时链接,独立运行 * 2.1 整体图示:理清思路 * 2.2 静态库制作流程(Makefile 自动化,更简便) * 2.3 静态库使用场景与命令 * 2.4 静态库核心特点 * 三. 动态库:运行时链接,

By Ne0inhk