1. 项目概述
地理难抵点(Pole of Inaccessibility)是一个有趣且实用的地理概念,它指的是在一个多边形区域内距离边界最远的点。这个概念在城市规划、资源勘探和军事部署等领域都有重要应用价值。最近我基于SpringBoot和PostGIS实现了一个省域级的地理难抵点计算与可视化系统,能够快速准确地找出各省份的"最纵深处"并在地图上直观展示。
这个项目的核心在于将地理空间计算与Web应用开发相结合。PostGIS提供了强大的空间数据处理能力,SpringBoot则构建了高效的后端服务,再加上Leaflet的前端可视化,形成了一套完整的技术解决方案。下面我将详细介绍这个项目的实现过程和技术细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 技术栈组成
整个系统采用了三层架构设计:
- 数据层:PostgreSQL + PostGIS组合,负责存储和处理空间数据
- 服务层:SpringBoot + MyBatis Plus,提供RESTful API接口
- 展示层:Leaflet + jQuery,实现交互式地图可视化
选择PostGIS是因为它提供了丰富的空间计算函数,特别是ST_MaximumInscribedCircle()这个函数可以直接计算最大内切圆,完美解决了我们的核心需求。SpringBoot则简化了后端开发流程,通过自动配置和starter依赖可以快速搭建服务。
2.2 数据库设计
在PostGIS中,我们创建了一个省份表(biz_province),主要字段包括:
- id: 主键
- name: 省份名称
- code: 行政区划代码
- geom: 几何图形字段(使用GEOMETRY类型存储)
数据来源于公开的Shapefile省域数据,通过PostGIS提供的shp2pgsql工具导入到数据库中。这里需要注意坐标系的统一,我们采用了SRID 4326(WGS84)坐标系,这是Web地图最常用的坐标系。
3. 核心算法实现
3.1 难抵点计算原理
地理难抵点的计算本质上是寻找多边形内的最大内切圆。这个圆的圆心就是难抵点,半径代表了该点到边界的最短距离。PostGIS的ST_MaximumInscribedCircle函数实现了这个算法,其基
