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

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

基于 Spring Boot 后端与 Leaflet 前端构建省级旅游口号 WebGIS 可视化系统。通过空间数据库关联省份与城市信息,利用 MyBatis Plus 查询 GeoJSON 数据,结合 JavaScript 在地图上动态渲染各省份口号及行政区划。实现了从数据设计、接口开发到地图交互展示的全流程,为地理信息与旅游宣传融合提供技术参考。

DockerOne发布于 2026/3/16更新于 2026/8/3041 浏览
Spring Boot 与 Leaflet 实现省级旅游口号 WebGIS 可视化

省级旅游口号 WebGIS 可视化实践

将旅游口号与地理空间数据结合,能更直观地展示地域文化。本项目采用 Spring Boot 搭建后端服务,Leaflet 实现前端地图可视化,完成省级旅游口号的空间关联与展示。

数据层设计与空间关联

核心在于将旅游口号表与地理空间表(省份、城市)进行关联。我们需要三张表:省级行政区划信息表、城市基本信息表、旅游口号信息表。通过省级行政区划代码建立连接。

在数据库中执行空间关联查询时,需提取省会坐标及省份几何图形(GeoJSON)。以下 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 三层架构。Controller 负责接收请求,Service 处理业务逻辑,Mapper 层对接数据库。

Mapper 数据查询

使用 MyBatis Plus 简化 SQL 映射。在 Mapper 接口中定义查询方法,直接复用上述空间关联逻辑:

package com.yelang.project.extend.scenicspot.mapper;

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.TourismSlogansInfoVO;
import java.util.List;

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();
}
控制层接口

控制器暴露两个接口:一个用于跳转地图页面,另一个供前端 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 库加载地图,通过 Ajax 获取后端数据后,动态绘制省份边界及口号标注。

核心渲染逻辑

为了在地图上清晰展示口号,我们使用 DivIcon 自定义标记样式。遍历返回的数据,解析 GeoJSON 绘制省份区域,并在省会位置添加带信息的标记。

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

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

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

更多推荐文章

查看全部
  • IT 行业热门岗位薪资分析与 Python 学习路线指南
  • Ubuntu 安装 MySQL 社区版
  • 前端监控实践:错误、性能与用户行为追踪
  • C++ 入门:命名空间、引用与函数重载详解
  • 基于 Rust 与 GLM-5 构建高性能 AI 翻译 CLI 工具
  • 轮腿机器人调试与代码实现补充
  • UV 包管理工具在 Ubuntu 24.04 下的实战指南
  • Kiro 与 Cursor 深度对比:AI 编程助手体验
  • OpenClaw 推出图形界面版 ClawX,简化 AI 智能体编排配置
  • 使用 ONNX 加载头部姿态评估模型并集成到 LLM Agent
  • SpringBoot 低代码 JSON 表单引擎与审批流实现
  • 开源大模型本地部署
  • OpenClaw 对接飞书机器人:消息无响应与 Gateway 断开排查
  • C++ 计算思维综合实践 II 课程设计选题与验收标准
  • 算法实战:双指针解决三数之和与四数之和
  • AI 领域 Skills 与 Workflow 的核心区别解析
  • TK X-Gnarly:基于 AI 辅助的 JSVMP 纯算还原方案
  • SpringBoot 整合 Neo4j 图数据库实战指南
  • 商汤开源 SenseNova-MARS 模型:实现多模态搜索推理新突破
  • TWIST2 全身 VR 遥操控制系统:基于视觉观测预测人形机器人关节位置

相关免费在线工具

  • 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