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

【AIGC前沿】MiniMax海螺AI视频——图片/文本生成高质量视频

【AIGC前沿】MiniMax海螺AI视频——图片/文本生成高质量视频

目录 1.MiniMax海螺AI视频简介 2.使用教程 1.MiniMax海螺AI视频简介 海螺视频,作为 MiniMax 旗下海螺 AI 平台精心打造的 AI 视频生成工具,致力于助力用户产出高品质视频内容。该工具依托 abab-video-1 模型,具备强大的文生视频功能。用户仅需输入关键词或简短语句,海螺视频就能据此创作出情节丰富的完整视频。此外,海螺视频运用 DiT 架构,能够精准模拟现实世界的物理规律,尤其在生成复杂场景与高动作场景时,展现出卓越的性能。 2.使用教程 点击如下链接,进入蓝耘元生代智算云平台主页 https://cloud.lanyun.net/#/registerPage?promoterCode=11f606c51e 点击主页上方栏的“MaaS平台” 然后点击左侧栏的“视觉模型”  可以看到可以免费体验一次I2V-01图片生成视频  点击如下红框处将图片上传  例如输入如下的图片 例如想让小狗动起来,可以在如下红框处输入相应的指令,然后点击立即生成

Amazon SageMaker 部署 AIGC 应用:训练 - 优化 - 部署 - Web 前端集成应用实践

Amazon SageMaker 部署 AIGC 应用:训练 - 优化 - 部署 - Web 前端集成应用实践

Amazon SageMaker 部署 AIGC 应用:训练 - 优化 - 部署 - Web 前端集成应用实践 背景 Amazon SageMaker 汇集广泛采用的亚马逊云科技机器学习和分析功能,统一访问所有数据,为分析和人工智能提供一体式体验,使用亚马逊云科技机工具进行模型开发、生成式人工智能、数据处理和 SQL 分析,在融通式合作开发工作室中加快协作和构建,借助强大的生成式人工智能软件开发助手 Amazon Q 开发者版提升效率,无论数据存储在数据湖、数据仓库,还是第三方或联合数据来源中,均可访问所有数据,同时内置治理功能可满足企业安全需求。 前言 本文将通过 Amazon SageMaker Notebook 实例完成 AIGC 模型的测试与验证,再将模型部署至 Amazon SageMaker Inference Endpoint 实现服务化,最后利用 Amazon

Android端Whisper中文语音识别实战:从模型部署到性能优化

快速体验 在开始今天关于 Android端Whisper中文语音识别实战:从模型部署到性能优化 的探讨之前,我想先分享一个最近让我觉得很有意思的全栈技术挑战。 我们常说 AI 是未来,但作为开发者,如何将大模型(LLM)真正落地为一个低延迟、可交互的实时系统,而不仅仅是调个 API? 这里有一个非常硬核的动手实验:基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。 从0到1构建生产级别应用,脱离Demo,点击打开 从0打造个人豆包实时通话AI动手实验 在Android设备上实现高效的语音识别一直是个挑战,尤其是处理中文这种复杂的语言。最近我尝试将OpenAI的Whisper模型集成到Android应用中,过程中遇到了不少坑,也总结了一些优化经验,分享给大家。 移动端语音识别的特殊挑战 1. 算力限制:相比服务器,手机CPU和GPU性能有限,特别是低端设备。

告别复杂操作:灵感画廊极简AI绘画体验

告别复杂操作:灵感画廊极简AI绘画体验 "见微知著,凝光成影。将梦境的碎片,凝结为永恒的视觉诗篇。" 你是否曾经被复杂的AI绘画工具劝退?参数太多、界面太乱、学习成本太高...现在,这一切都将成为过去。灵感画廊(Atelier of Light and Shadow)基于Stable Diffusion XL 1.0打造,却彻底摒弃了工业化的复杂界面,为你提供一个如艺术沙龙般恬静的创作空间。 1. 为什么选择灵感画廊? 传统的AI绘画工具往往让人望而生畏。密密麻麻的参数滑块、晦涩难懂的技术术语、需要反复调试的复杂设置...这些都不是创作者想要的。 灵感画廊完全不同。它相信:真正的创作应该专注于灵感本身,而不是技术细节。 这里没有"提示词",只有"梦境描述";没有"反向词"