利用GeoTools实现导出MySQL地理数据表为shp格式
概述
将数据库中的地理数据导出为Shp格式是常见的应用场景。本文利用Java的Geotools地理工具包将MySQL数据库的地理数据表导出为shp文件并压缩保存,通过Spring Boot框架提供一个REST api接口下载。
技术栈:Java、Spring Boot、Mybatis、Geotools、JTS、MySQL等。
导出结果:
关键代码
数据库表
数据库中geo字段是geometry类型,可以存储POINT、LINESTRING、POLYGON格式的空间数据。在实体类中,先用字符串类型存储查询到的WKT格式的数据,在代码中再将WKT转换为Geometry实例对象。当然,你也可以通过handleType的方式实现自动转换。
package org.example.demo;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.locationtech.jts.geom.Geometry;@Data
@TableName("geometries")
public class GeoModel {@TableIdprivate Long id;private String name;private String geo;private Geometry geometry;
}
依赖
- 添加仓库地址
<repositories><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https://repo.osgeo.org/repository/release/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled></releases></repository><repository><id>osgeo-snapshot</id><name>OSGeo Snapshot Repository</name><url>https://repo.osgeo.org/repository/snapshot/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></repository></repositories>
- gt-main、gt-shapefile、jts-core等关键依赖
注意:gt-shapefile等包中依赖了jts-core的包,如果两个包版本不兼容则程序会报错,提示确实某些图斑处理的方法。本文通过试验,使用了如下版本,并排除gt-shapefile等内部依赖包jts-core,实现解决兼容性问题。
<dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>25.2</version><!-- 排除旧版 JTS --><exclusions><exclusion><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>25.2</version><!-- 排除旧版 JTS --><exclusions><exclusion><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.20.0</version