Spring Boot携手Leaflet,点亮省级旅游口号WebGIS可视化之路

Spring Boot携手Leaflet,点亮省级旅游口号WebGIS可视化之路

目录

前言

一、旅游口号信息管理

1、写在前面的

2、空间属性关联

二、SpringBoot后台实现

1、系统调用时序图

2、Mapper数据查询实现

3、控制层接口实现

三、Leaflet集成实现WebGIS

1、省级数据展示及可视化

2、东北三省旅游口号

3、长三角城市群口号

4、珠三角旅游口号

5、西北地区旅游口号

四、总结


前言

        在当今数字化浪潮汹涌澎湃的时代,地理信息系统(GIS)技术正以前所未有的速度改变着我们对世界的认知与探索方式。它不仅为科学研究提供了强大的工具,更在旅游、城市规划、环境保护等诸多领域展现出巨大的应用潜力。而当我们将目光聚焦于旅游行业,一个充满活力与创新的领域,GIS技术的应用更是如鱼得水,为旅游体验的提升和旅        游管理的优化带来了全新的机遇。

        省级旅游口号作为各地旅游宣传的重要名片,承载着地域文化的精髓与旅游资源的亮点,是吸引游客、塑造旅游品牌形象的关键要素。然而,传统的旅游口号宣传方式往往局限于文字、图片等静态形式,难以直观地展现其背后丰富的地理与文化内涵。游客在规划旅行时,常常难以快速、全面地了解各地旅游口号所蕴含的独特魅力与旅游资源分布,这在一定程度上限制了旅游宣传的效果与游客的出行体验。随着Web技术的飞速发展,WebGIS应运而生,它将GIS的强大功能与互联网的便捷性完美结合,为地理信息的展示与共享提供了全新的平台。而Spring Boot作为一款轻量级的Java开发框架,以其简洁、高效的特性深受开发者的青睐,能够快速搭建起稳定、高效的后端服务架构,为WebGIS系统的数据处理与业务逻辑实现提供了坚实的支撑。Leaflet则是一款开源的JavaScript库,专注于为Web应用提供轻量级、高性能的地图可视化解决方案,它易于集成、功能丰富,能够轻松实现地图的交互式展示、地理数据的可视化渲染以及各种地图功能的定制开发,与Spring Boot搭配使用。

        基于这样的背景与需求,我们开启了“Spring Boot携手Leaflet,点亮省级旅游口号WebGIS可视化之路”的探索之旅。本项目旨在通过Spring Boot与Leaflet的深度结合,构建一个省级旅游口号WebGIS可视化平台,将各地的旅游口号与地理空间数据紧密相连,以直观、生动的地图可视化形式呈现给用户。用户可以通过该平台,快速浏览全国各省份的旅游口号。这不仅为游客提供了更加便捷、个性化的旅游规划工具,也为各地旅游管理部门提供了一个全新的宣传推广平台,有助于提升旅游口号的传播效果与旅游目的地的知名度。

一、旅游口号信息管理

        在之前的系列内容开发过程中,我们深入研究了Spring Boot的架构设计,利用其强大的依赖管理和自动化配置功能,快速搭建起后端服务模块,实现了旅游口号数据的存储、查询、更新等基础功能,以及与地理空间数据库的无缝对接,确保了地理数据的高效处理与准确传输。本节为了照顾第一次看到本文的朋友,依然将之前的系列内容进行简单介绍,让大家有一个直观地了解。

1、写在前面的

        在上一篇博文SpringBoot结合PostGIS在省级旅游口号管理中的应用实践中,我们对于如何管理省级旅游口号进行了详细的讲解,这里直接给出设计的表字段。在旅游口号表中,我们只需要关联省份信息表,在进行空间信息挖掘时,会自动的关联省份空间信息。旅游口号信息表的物理结构如下:

        这里我们使用province_code即省级行政区划代码来进行信息关联。

        省级旅游口号的列表管理界面如上图所示。

2、空间属性关联

        为了方便查询对应的省份信息,以及在WebGIS展示过程中,我们可以在省会城市中快速对省份进行标注,这里我们需要关联两张空间信息表。第一张是省级行政区划信息表,第二张是城市基本相信息表,第三张是旅游口号信息表。三者通过省级行政区划代码来进行数据关联,数据查询SQL如下:

SELECT T.NAME cityName, T.pinYin, T.bz, T.slx, tc.code provinceCode, tc.NAME provinceName, st_x ( T.geom ) cityLon, st_y ( T.geom ) cityLat, slogan.slogan, st_asgeojson ( tc.geom ) geomJson FROM biz_geographic_name T, biz_province tc, biz_tourism_slogans_info slogan WHERE T.bz IN ( '省会城市', '直辖市', '首都' ) AND st_contains ( tc.geom, T.geom ) AND slogan.province_code = tc.code AND slogan.activity_flag = 1

        在Navicat等数据库客户端中执行上述语句后,可以看到以下结果:

        以上就是在数据库中将三张表的信息进行空间关联查询的实现。

二、SpringBoot后台实现

        Spring Boot作为一款轻量级的Java开发框架,以其简洁、高效的特性深受开发者的青睐,能够快速搭建起稳定、高效的后端服务架构,为WebGIS系统的数据处理与业务逻辑实现提供了坚实的支撑。本节将从系统调用时序和Mapper数据查询实现以及控制层接口实现分别来进行介绍。

1、系统调用时序图

        本文采用的系统架构比较简单,使用经典MVC三层架构,系统的调用时序图如下图所示:

        前端用户发起页面访问,将页面请求转发到后台的控制器中,控制器中的响应方法会调用旅游口号service的查询方法,再继续调用数据库查询对象的省级旅游对象查询方法,在查询到数据以后再依次往上一层传递。最终把后台返回的数据和旅游宣传口号在地图上展示出来。

2、Mapper数据查询实现

        全国省份旅游口号查询方法核心代码如下:

package com.yelang.project.extend.scenicspot.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.extend.scenicspot.domain.TourismSlogansInfo; import com.yelang.project.extend.scenicspot.domain.TourismSlogansInfoVO; public interface TourismSlogansInfoMapper extends BaseMapper<TourismSlogansInfo>{ static final String FIND_PROVINCE_TOURISMSLOGANS_LIST = "<script>" + " SELECT T.name cityName,T.pinYin,T.bz,T.slx,tc.code provinceCode,tc.NAME provinceName, " + " st_x ( T.geom ) cityLon,st_y ( T.geom ) cityLat,slogan.slogan,st_asgeojson ( tc.geom ) geomJson " + " FROM biz_geographic_name T,biz_province tc,biz_tourism_slogans_info slogan " + " WHERE T.bz IN ( '省会城市', '直辖市', '首都' ) AND st_contains ( tc.geom, T.geom ) AND slogan.province_code = tc.code AND slogan.activity_flag = 1 " + "</script>"; @Select(FIND_PROVINCE_TOURISMSLOGANS_LIST) List<TourismSlogansInfoVO> findProvinceTourismSlogans(); }

        这里的查询方法所配置的sql语句与上一节的空间属性关联一致,功能是一样的,区别就是这里使用MybatisPlus来进行SQL语句的执行。

3、控制层接口实现

        控制层的实现比较简单,首先需要有一个跳转到地图界面的方法,然后需要提供一个供前端ajax调用的方法,用于返回全国的省级旅游口号列表,核心方法如下:

@RequiresPermissions("sspot:tourismslogans:map") @GetMapping("/map") public String map(){ return prefix + "/map"; } @RequiresPermissions("sspot:tourismslogans:list") @GetMapping("/maplist") @ResponseBody public AjaxResult mapList(){ List<TourismSlogansInfoVO> result = tourismslogansService.findProvinceTourismSlogans(); return AjaxResult.success().put("data", result); }

      通过以上的代码,我们就定义好了后端的服务接口,下面就可以使用Leaflet来进行调用,将获取的数据集成到Leaflet中进行展示。

三、Leaflet集成实现WebGIS

        Leaflet是一款开源的JavaScript库,专注于为Web应用提供轻量级、高性能的地图可视化解决方案,它易于集成、功能丰富,能够轻松实现地图的交互式展示、地理数据的可视化渲染以及各种地图功能的定制开发。本节将重点讲解使用Leaflet对各个省份的旅游口号展示效果。

1、省级数据展示及可视化

        对省级行政区划范围和旅游口号的展示采用我们常用的Leaflet组件,口号信息我们使用DivIcon来进行标绘,之前展示了很多相关的内容,下面给出一个参考的示例代码:

 

function buildShowInfo(index,color,data){ var result = "<div + color + ";' animation-spaceInDown><div>" + (index + 1) + "、" + data.provinceName +"<span></span></div>"; result += "<div>省会:"+data.cityName +"/" + data.provinceCode + "<span></span></div>"; result += "<div>口号:"+data.slogan+ "<span></span></div>"; result += "</div>"; return result; } function previewProvince(){ $.ajax({ type:"get", url:prefix + "/maplist", data:{}, dataType:"json", cache:false, processData:false, success:function(result){ if(result.code == web_status.SUCCESS){ showLayerGroup.clearLayers(); var legendData = new Array(); for(var i = 0;i< result.data.length;i++){ var areaData = result.data[i]; var color = ccolor = getRandomColor(); areaLayer = L.geoJSON(JSON.parse(areaData.geomJson),{style: {color:color,fillColor:color,weight:3,"opacity":0.65, fillOpacity: 0.65 }}).addTo(collisionLayer); var myIcon = L.divIcon({ iconSize: null, className: '', popupAnchor:[5,5], shadowAnchor:[5,5], html: buildShowInfo(i,color,areaData) }); showLayerGroup.addLayer(areaLayer); //中心点位 L.marker([areaData.cityLat,areaData.cityLon ], { icon: myIcon}).addTo(collisionLayer); showLayerGroup.addLayer(collisionLayer); legendData.push({ label: "\xa0\xa0"+areaData.provinceName, type: "rectangle", radius: 12, color: color, fillColor: color, fillOpacity: 0.8, weight: 2}); } initLegend(legendData); } }, error:function(){ $.modal.alertWarning("获取空间信息失败"); } }); }

2、东北三省旅游口号

        首先来看一下东北地区的省份旅游口号,系统运行效果图如下:

        东北三省的宣传口号中透露着浓浓的雪乡的味道,也足见北方的那份质朴和热情。

3、长三角城市群口号

        再来看一下长三角地区省份的旅游口号,从东三省转到长三角,一下子来到了诗情画意的江浙地区。从水韵江苏、诗意江南到诗意江南,活力浙江,能感受到江浙的文化底蕴。

4、珠三角旅游口号

        来到珠三角地区,广西自治区和海南省的口号直接就要把人接走了,妥妥的风景这边独好的直抒胸臆。

5、西北地区旅游口号

        最后来看看西北地区的旅游口号,位于丝绸之路上的新疆和甘肃,口号中的丝丝关联,让我们此时已经恨不得开启一场旅行了。当然其它更多的省的旅游口号受限篇幅,不能一一全都展示。

四、总结

        以上就是本文的主要内容,本文通过详细的讲解空间表的设计、空间属性的关联、前后端的设计与实现,最终选取了一些有代表性的省份进行宣传口号的展示。通过本项目的实践,我们不仅探索了Spring Boot与Leaflet在WebGIS领域的应用模式与技术实现路径,更深刻体会到了技术融合创新为旅游行业带来的变革力量。我们期待这个平台能够成为连接游客与各地旅游目的地的桥梁,让更多的人了解中国丰富多彩的旅游资源,激发他们的旅行热情,同时也为旅游行业的数字化转型与创新发展提供一个有益的参考案例。在未来的道路上,我们将继续探索与创新,不断优化平台功能,拓展应用领域,让Spring Boot携手Leaflet,为更多行业的地理信息可视化应用点亮前行之路。

Read more

2026年医疗AI的可信革命全栈实现(下)

2026年医疗AI的可信革命全栈实现(下)

9.3 向量索引构建示例 文档进入向量库前,应先清洗、切分、打标签、嵌入,再写入索引。以下示例展示一种最简流程,真实环境中可替换为Milvus或Qdrant SDK。 代码清单 9-2 文档切分与索引写入 from dataclasses import dataclass from typing import Iterable import hashlib @dataclass class Chunk:     chunk_id: str     text: str     metadata: dict def chunk_document(doc_id: str, title: str, text: str, source_type: str) ->

OpenClaw 实操指南 07:飞书 CLI 开源:让 AI 真正接管你的飞书全流程

OpenClaw 实操指南 07:飞书 CLI 开源:让 AI 真正接管你的飞书全流程

2026年3月28日,飞书官方开源larksuite/cli(v1.0.0),以200+命令、19个AI Agent Skills,将飞书2500+开放API封装为命令行接口,面向人类开发者与AI Agent双用户,重构办公协作的操作范式。这不仅是工具升级,更是飞书从“GUI服务人”到“GUI+CLI双态并行”的战略跃迁——GUI给人交互,CLI给AI执行,让AI真正成为办公的“执行者”而非“旁观者”。 一、飞书CLI是什么:从API到命令行的能力跃迁 1. 核心定位与架构 飞书CLI是官方开源、MIT协议、免费商用的命令行工具,核心定位是让AI Agent直接操控飞书全量数据与业务,而非仅做信息查询。其三层架构清晰划分能力边界: * Shortcuts层:高频快捷命令(如lark-cli calendar +agenda查今日日程),降低人类使用门槛。 * API Commands层:200+

从指令到执行:OpenClaw 底层原理深度拆解 —— 一台真正会 “动手” 的本地 AI 引擎

从指令到执行:OpenClaw 底层原理深度拆解 —— 一台真正会 “动手” 的本地 AI 引擎

前言 当我们对 OpenClaw 发出一句自然语言指令:“把桌面所有超过一周的截图归档到 D 盘,再把今天的工作记录整理成 Markdown 并推送到 GitHub。” 传统 AI 会给出步骤,而 OpenClaw 会直接做完。 绝大多数文章只告诉你 OpenClaw “能做什么”,却极少解释它到底是如何做到的: * 一段文字,是怎么变成可执行的系统操作? * 它凭什么能跨 IM、跨平台、跨模型统一工作? * 高权限执行,底层是如何保证安全与可控? * 本地运行、隐私闭环,在架构上究竟如何实现? 本文不讲功能、不讲教程,只讲原理。从意图解析、任务编排、执行引擎、权限沙箱到多模态交互,带你从 0 到 1 理解 OpenClaw 的技术本质:它不是一个聊天机器人,而是一套本地优先、可解释、可审计、

VibeVoice能否与Stable Diffusion联动生成视听一体内容?

VibeVoice与Stable Diffusion:能否共筑视听一体的内容生成新范式? 在AI内容创作的浪潮中,我们早已习惯“一张图”或“一段语音”的独立生成。但真正的沉浸式体验,从来都是声画交织的结果——就像电影,不是单纯的画面堆叠,也不是孤立的配音朗读,而是节奏、情绪、语调与构图、光影、动作的高度协同。 如今,随着VibeVoice-WEB-UI和Stable Diffusion这两项技术的成熟,一个大胆设想正变得触手可及:能否让同一段脚本,同时驱动高质量语音与匹配画面的生成,实现真正意义上的端到端视听一体化内容生产? 这不仅是效率的跃升,更是一次创作范式的变革。而关键,就在于如何打通“听觉语境”与“视觉语义”之间的鸿沟。 超低帧率语音表示:用7.5Hz重构语音建模逻辑 传统语音合成系统往往依赖高帧率特征(如每秒50帧的梅尔频谱),以确保音质细腻。但这带来了沉重的计算负担,尤其在处理长文本时,显存消耗呈线性增长,极易引发延迟、失真甚至中断。 VibeVoice 的突破,恰恰始于对这一底层逻辑的颠覆:它采用约 7.