基于SpringBoot与GeoServer构建自然资源综合档案管理系统实战指南

一、系统核心架构与选型依据

本系统采用前后端分离架构。后端使用SpringBoot 2.7.x,其内嵌Tomcat容器简化部署。空间数据引擎选用PostgreSQL 13+PostGIS 3.1扩展,这是存储自然资源矢量与栅格数据的行业标准。GIS服务发布采用GeoServer 2.21.x,用于将数据库中的空间数据发布为OGC标准的WMS、WFS服务。前端使用Vue 3 + Element Plus,并通过OpenLayers 7.x库调用地图服务。

二、基础开发环境搭建

1. 数据库与空间扩展安装

在Ubuntu 22.04 LTS系统上执行以下命令:

```bash sudo apt update sudo apt install postgresql-13 postgresql-13-postgis-3 sudo systemctl start postgresql ```

创建数据库与空间模式:

```sql sudo -u postgres psql CREATE USER nat_archive WITH PASSWORD 'YourStrongPassword123!'; CREATE DATABASE natural_archive_db WITH OWNER nat_archive ENCODING 'UTF8'; \c natural_archive_db CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; \q ```

2. GeoServer部署与基础配置

下载并安装GeoServer:

```bash wget https://sourceforge.net/projects/geoserver/files/GeoServer/2.21.4/geoserver-2.21.4-bin.zip unzip geoserver-2.21.4-bin.zip -d /opt/ cd /opt/geoserver-2.21.4/bin/ ./startup.sh & ```

访问http://你的服务器IP:8080/geoserver,使用默认账号admin/geoserver登录。进入后,首先修改管理员密码。随后,配置数据存储:在“数据”->“工作区”中创建名为“natural_archive”的工作区。接着在“数据”->“数据存储”中,添加新的PostGIS数据存储,关键参数如下:

工作区:natural_archive
数据源名称:archive_pg
数据库:natural_archive_db
主机:localhost
端口:5432
模式:public
用户:nat_archive
密码:YourStrongPassword123!

三、SpringBoot后端工程核心实现

1. 项目初始化与关键依赖

通过Spring Initializr生成项目,核心pom.xml依赖如下:

```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa org.postgresql postgresql runtime org.hibernate hibernate-spatial 5.6.15.Final org.geotools gt-geojson 27.2 ```

2. 空间实体类与数据库映射

定义自然资源档案的核心实体,例如“林地资源档案”:

```java import org.locationtech.jts.geom.Polygon; import javax.persistence.; @Entity @Table(name = "forest_archive") public class ForestArchive { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String archiveCode; // 档案编号 private String forestName; // 林地名称 @Column(columnDefinition = "geometry(Polygon, 4326)") private Polygon boundary; // 空间边界,WGS84坐标系 private Double area; // 面积(公顷) // 其他属性及getter/setter省略 } ```

在application.yml中配置数据库连接与JPA:

```yaml spring: datasource: url: jdbc:postgresql://localhost:5432/natural_archive_db username: nat_archive password: YourStrongPassword123! driver-class-name: org.postgresql.Driver jpa: database-platform: org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect hibernate: ddl-auto: update show-sql: true ```

3. 实现空间查询服务接口

创建Repository接口,继承JpaRepository并包含空间查询方法:

```java import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.locationtech.jts.geom.Point; import java.util.List; public interface ForestArchiveRepository extends JpaRepository { // 查询包含某点的档案 List findByBoundaryContains(Point point); // 自定义查询:查询与给定多边形相交的档案 @Query(value = "SELECT FROM forest_archive WHERE ST_Intersects(boundary, ST_GeomFromText(?1, 4326))", nativeQuery = true) List findIntersectingArchives(String polygonWkt); } ```

创建对应的Service和Controller,提供RESTful API,例如`GET /api/archive/forest?lng=116.4&lat=39.9`,用于查询某坐标点所在的林地档案。

四、前端地图模块集成

1. Vue项目初始化与地图组件

基于SpringBoot与GeoServer构建自然资源综合档案管理系统实战指南

创建Vue项目并安装依赖:

```bash npm create vue@latest natural-archive-frontend cd natural-archive-frontend npm install ol @geoapify/geocoder-autocomplete vue3-geolocation element-plus axios ```

创建地图组件`MapViewer.vue`:

```vue ```

2. 档案属性查询与联动

实现地图点击事件,查询并显示档案属性:

```javascript // 在initMap函数内添加 import { click } from 'ol/events/condition'; import { Select } from 'ol/interaction'; const selectInteraction = new Select({ condition: click, layers: [vectorLayer] }); map.value.addInteraction(selectInteraction); selectInteraction.on('select', (event) => { const selectedFeature = event.selected[0]; if (selectedFeature) { const archiveId = selectedFeature.getId(); // 调用后端API获取详细属性信息 axios.get(`/api/archive/forest/${archiveId}`) .then(res => { // 在侧边栏或弹窗中显示res.data }); } }); ```

五、系统部署与优化

1. 后端打包与Docker化部署

在SpringBoot项目根目录创建`Dockerfile`:

```dockerfile FROM openjdk:11-jre-slim VOLUME /tmp COPY target/natural-archive-backend-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-jar","-Djava.security.egd=file:/dev/./urandom","/app.jar"] ```

打包并构建镜像:

```bash mvn clean package -DskipTests docker build -t nat-archive-backend . docker run -d -p 8080:8080 --name archive-backend nat-archive-backend ```

2. GeoServer生产环境调优

编辑`/opt/geoserver-2.21.4/webapps/geoserver/WEB-INF/web.xml`,调整JVM内存参数:

```xml JAVA_OPTS -Xms2g -Xmx4g -XX:MaxPermSize=512m ```

对于大量空间数据发布,在数据存储的“连接参数”中增加:preparedStatements=true 以提升查询性能。

3. Nginx配置反向代理与前端部署

安装Nginx并配置`/etc/nginx/conf.d/archive.conf`:

```nginx server { listen 80; server_name your-domain.com; 替换为你的域名或IP location / { root /var/www/natural-archive-frontend/dist; index index.html; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /geoserver/ { proxy_pass http://localhost:8080/geoserver/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ```

将前端项目构建产物复制到Nginx目录:

```bash npm run build sudo cp -r dist/ /var/www/natural-archive-frontend/dist/ sudo systemctl restart nginx ```

至此,一个具备空间数据管理、查询、可视化功能的自然资源综合档案管理系统核心框架已完成部署。后续可根据具体业务需求,在此框架上扩展档案录入、版本管理、统计分析等模块。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统