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

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

基于 Spring Boot 后端与 Leaflet 前端构建省级旅游口号 WebGIS 可视化方案。通过 PostGIS 空间数据关联、MyBatis Plus 查询及地图交互展示,实现全国各省份旅游口号动态呈现。详解数据库设计、API 接口开发及前端地图集成细节,为地理信息可视化项目提供参考。

极光发布于 2026/4/7更新于 2026/5/2311 浏览
Spring Boot 结合 Leaflet 实现省级旅游口号 WebGIS 可视化

前言

地理信息系统(GIS)技术正在改变我们对世界的认知方式,尤其在旅游行业,它能显著提升游客体验和管理效率。省级旅游口号作为地域文化的载体,传统宣传方式难以直观展现其背后的地理与文化内涵。WebGIS 将 GIS 功能与互联网结合,而 Spring Boot 提供高效的后端支撑,Leaflet 则负责轻量级的地图可视化。本项目旨在通过这两者的深度结合,构建一个省级旅游口号 WebGIS 可视化平台,让用户能直观浏览全国各省份的旅游口号。

旅游口号信息管理

空间属性关联

为了在 WebGIS 中快速标注省份并查询对应信息,我们需要关联三张表:省级行政区划信息表、城市基本信息表和旅游口号信息表。三者通过省级行政区划代码进行关联。核心查询逻辑如下:

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

执行上述语句后,即可获取包含城市坐标、省份名称及旅游口号的结构化数据,便于后续渲染。

SpringBoot 后台实现

系统架构

采用经典的 MVC 三层架构,前端请求转发至控制器,调用 Service 层处理业务逻辑,最终由 Mapper 层执行数据库查询。数据返回后,前端将其映射到地图上展示。

Mapper 数据查询实现

利用 MyBatis Plus 封装 SQL 查询,核心代码如下:

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 逻辑与数据库层面的空间关联保持一致,通过 MyBatis Plus 简化了执行过程。

控制层接口实现

控制器主要提供两个接口:一个是跳转地图页面的入口,另一个是供前端 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 集成实现 WebGIS

省级数据展示及可视化

使用 Leaflet 组件展示省级行政区划范围和旅游口号。对于口号信息,我们使用 DivIcon 进行标绘,示例代码如下:

function buildShowInfo(index, color, data) {
    var result = "<div style='color:" + color + "; animation: slideInDown'><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 = 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("获取空间信息失败");
        }
    });
}

区域展示效果

系统运行后,可以查看不同区域的旅游口号展示效果。例如东北地区,口号中透露出北方的质朴和热情;长三角地区则展现了江浙的文化底蕴;珠三角和西北地区也各有特色。通过这种可视化形式,用户能更直观地感受各地旅游资源分布。

总结

本文通过讲解空间表设计、属性关联、前后端实现,展示了如何选取代表性省份进行宣传口号的展示。实践表明,Spring Boot 与 Leaflet 的结合能有效探索 WebGIS 领域的应用模式。这不仅为游客提供了便捷的规划工具,也为旅游管理部门提供了新的推广平台。未来可继续优化功能,拓展更多行业的地理信息可视化应用。

目录

  1. 前言
  2. 旅游口号信息管理
  3. 空间属性关联
  4. SpringBoot 后台实现
  5. 系统架构
  6. Mapper 数据查询实现
  7. 控制层接口实现
  8. Leaflet 集成实现 WebGIS
  9. 省级数据展示及可视化
  10. 区域展示效果
  11. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • AIGC 试用:AI 与软件开发过程 2
  • Java IO 流:从字节流到字符流
  • 基于 MC.JS WEBMC1.8 构建在线多人沙盒游戏
  • Spring Boot 数据访问与数据库集成详解
  • 写给一周岁儿子的信:关于成长与爱的期许
  • Java 核心面试知识点梳理与实战解析
  • 基于 SpringBoot 与 Vue3 的桂林旅游导游平台系统设计
  • Linux Do 注册及 Claude AI 本地工具配置教程
  • 从零实现 STL vector 源码解析
  • MCP 工具 npx 与 uvx 安装及使用方法
  • Python 网页解析库 BeautifulSoup4 使用指南
  • eNSP 基础网络配置命令速查指南
  • VSCode 在 WSL 环境下无法使用 Github Copilot 网络问题排查
  • 基于 RAG 技术的商品智能搜索高效解决方案
  • 人工智能数学基础:概率论中 KL 散度在变分自编码器中的应用
  • 去 AI 味提示词大全:25 个实用 Prompt 降低 AI 率
  • OpenClaw 本地部署与飞书机器人接入指南
  • 双指针算法实战:移动零与复写零详解
  • 贪心算法专题:最大子段和与纪念品分组
  • ThinkPHP 和 Laravel 框架的基于 Web 的在线考试答题游戏设计与实现

相关免费在线工具

  • 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