跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java

Spring Boot 结合 Leaflet 实现省级旅游口号 WebGIS 可视化

基于 Spring Boot 后端与 Leaflet 前端构建省级旅游口号 WebGIS 可视化平台。通过 PostGIS 空间数据关联查询,实现省份行政区划与旅游口号的动态展示。文章涵盖数据库表设计、MyBatis Plus Mapper 编写、Controller 接口定义以及前端地图渲染逻辑,重点演示了如何使用 DivIcon 在地图上标注口号信息,并结合区域数据(如东北、长三角)进行可视化呈现,为地理信息系统在旅游行业的应用提供参考方案。

虚拟内存发布于 2026/4/9更新于 2026/6/2328 浏览
Spring Boot 结合 Leaflet 实现省级旅游口号 WebGIS 可视化

Spring Boot 结合 Leaflet 实现省级旅游口号 WebGIS 可视化

地理信息系统(GIS)在旅游行业的应用潜力巨大,尤其是将旅游口号与地理空间数据结合,能直观展示各地旅游资源。本文基于 Spring Boot 后端与 Leaflet 前端,构建一个省级旅游口号 WebGIS 可视化平台,通过地图交互形式呈现口号信息。

一、数据模型设计

为了实现空间关联查询,我们需要管理三张核心表:省级行政区划信息表、城市基本信息表以及旅游口号信息表。它们通过省级行政区划代码进行关联。

旅游口号信息表的物理结构主要包含口号内容、省份代码及活动状态标识。在空间挖掘时,系统会自动关联省份的空间几何信息。这里我们使用 province_code 作为关键关联字段。

文章配图

为了在地图上快速标注省会城市并展示口号,数据库层面需要执行空间属性关联查询。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

执行上述语句后,可获取包含城市经纬度、GeoJSON 几何对象及口号内容的完整数据集。

二、Spring Boot 后台实现

后端采用经典的 MVC 三层架构,利用 MyBatis Plus 简化 SQL 操作,提供稳定的数据接口。

1. Mapper 层数据查询

Mapper 接口中定义了核心查询方法,直接复用上述 SQL 逻辑。通过 @Select 注解动态拼接脚本,确保空间函数能被正确解析。

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();
}

2. 控制层接口实现

Controller 层主要负责路由分发和响应封装。除了跳转地图页面的入口外,核心在于提供一个供前端 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 是一款轻量级开源 JS 库,非常适合用于 WebGIS 开发。本节重点讲解如何将后端数据集成到地图中。

1. 省级数据展示逻辑

对于省级行政区划范围和旅游口号的展示,我们使用 Leaflet 组件。口号信息推荐使用 DivIcon 进行标绘,这样可以灵活定制 HTML 内容。

function buildShowInfo(index, color, data) {
    var result = "<div class='animation-spaceInDown' style='color:" + color + "'><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 ccolor = getRandomColor();
                    var areaLayer = L.geoJSON(JSON.parse(areaData.geomJson),{
                        style: {color:ccolor, fillColor:ccolor, 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, ccolor, 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: ccolor,
                        fillColor: ccolor,
                        fillOpacity: 0.8,
                        weight: 2
                    });
                }
                initLegend(legendData);
            }
        },
        error: function() {
            $.modal.alertWarning("获取空间信息失败");
        }
    });
}

2. 区域效果展示

系统运行后,不同区域的旅游口号呈现出不同的地域特色。

东北地区:宣传口号透露出北方的质朴与热情,如雪乡等元素。 文章配图

长三角城市群:从东三省转到长三角,能感受到江浙的文化底蕴,如水韵江苏、活力浙江等。 文章配图

珠三角地区:广西自治区和海南省的口号直抒胸臆,强调风景独好。 文章配图

西北地区:位于丝绸之路上的新疆和甘肃,口号中的丝丝关联让人产生旅行冲动。 文章配图

四、总结

本项目通过 Spring Boot 与 Leaflet 的深度结合,实现了省级旅游口号的 WebGIS 可视化。从数据库的空间表设计、MyBatis Plus 的 Mapper 编写,到前端的地图渲染逻辑,形成了一套完整的解决方案。这不仅为游客提供了便捷的规划工具,也为旅游管理部门提供了新的宣传渠道。后续可继续优化功能,拓展更多行业的地理信息可视化应用。

目录

  1. Spring Boot 结合 Leaflet 实现省级旅游口号 WebGIS 可视化
  2. 一、数据模型设计
  3. 二、Spring Boot 后台实现
  4. 1. Mapper 层数据查询
  5. 2. 控制层接口实现
  6. 三、Leaflet 集成与可视化
  7. 1. 省级数据展示逻辑
  8. 2. 区域效果展示
  9. 四、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 爬虫学习指南:从基础到逆向进阶
  • MCP 服务器大全:分类汇总与开发指南
  • VSCode Copilot 在 Win10 WSL2 环境连接失败问题及解决方案
  • OpenClaw 和 Claude Code、Cursor、Copilot 有什么区别
  • 华为 OD 机试:黑白棋移动范围计算
  • Python 中 == 与 is 操作符的本质区别与应用实践
  • C++ 模板进阶:非类型参数、特化与分离编译
  • ROS2+Gazebo+PX4 环境搭建与仿真飞行指南
  • 拆解 CASIC MOTOR 机器人底盘 14.8V 无刷减速电机
  • Python 制作大麦网抢票程序
  • VS2019下C++调用YOLOv3动态链接库实现目标检测
  • 双指针算法:三数之和与四数之和问题求解
  • JDK 下载与安装指南
  • Django REST Framework 企业级 API 架构实战
  • 网络安全入门指南:从零开始自学黑客技术
  • 大模型浪潮:是泡沫还是技术革命?
  • FMC 与 FMC+ 接口标准详解
  • 从零开始模拟实现 STL vector 容器
  • OpenClaw 新手指南:从零开始的 AI 机器人搭建完全攻略
  • Struts2 接收请求参数:基本类型与复合类型

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online