前言
在数字化浪潮中,地理信息系统(GIS)技术正深刻改变着我们对世界的认知。对于旅游行业而言,传统的宣传方式往往局限于文字或图片,难以直观展现旅游资源背后的地理分布与文化内涵。游客在规划行程时,很难快速将抽象的旅游口号与具体的地理位置对应起来。
WebGIS 的出现解决了这一痛点,它将 GIS 功能与互联网便捷性结合。配合 Spring Boot 轻量级后端框架与 Leaflet 开源地图库,我们可以构建一个高效、交互式的省级旅游口号展示平台。本文将分享如何打通从数据库空间查询到前端地图渲染的全链路实现。
一、数据层设计:空间属性关联
要实现地图上的精准标注,核心在于数据的空间关联。我们需要将旅游口号信息表与行政区划表、城市坐标表进行连接。
1. 表结构基础
旅游口号表主要存储口号文本及所属省份代码。为了在地图上定位,我们依赖 province_code(省级行政区划代码)作为关联键。虽然具体字段设计在之前的实践中已确定,但这里简要回顾关键逻辑:口号表需包含活动状态标识,确保只展示有效数据。
2. 空间 SQL 查询
在数据库中,我们需要筛选出省会城市或直辖市的坐标,并关联对应的省份几何图形。以下 SQL 语句展示了如何通过 PostGIS 函数提取经纬度并生成 GeoJSON 格式的空间数据:
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 简化 ORM 操作,提供 RESTful 接口供前端调用。
1. 系统调用流程
请求从前端发起,经过控制器路由分发至 Service 层处理业务逻辑,最终通过 Mapper 层执行空间查询。数据返回后,前端负责解析并渲染到地图上。
2. 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;
com.yelang.project.extend.scenicspot.domain.TourismSlogansInfoVO;
<TourismSlogansInfo>{
+
+
+
+
+
;
List<TourismSlogansInfoVO> ;
}



