前言
在 WebGIS 开发中,数据格式的兼容性往往是痛点。数据库里存的是 WKT(Well-Known Text),前端地图库却偏爱 GeoJSON。如何高效转换这两者,直接决定了开发的流畅度。本文将分享几种从后台到前端的转换方案,并结合 Leaflet 演示实际加载效果。
一、后台转换实现
如果后端有空间数据库支持,或者能使用 Java 组件处理,直接在服务端完成转换是性能最优的选择。
1. 基于 PostGIS 实现
PostGIS 提供了强大的空间函数,可以直接将几何对象转为 GeoJSON 格式。以地震数据为例,查询语句如下:
select st_asewkt(geom), st_asgeojson(geom) from biz_ceic_earthquake limit 10;
执行后,第二列即为标准的 GeoJSON 字符串。这种方式本质是利用了数据库的空间计算能力,无需额外代码逻辑,适合数据量较大且数据库已部署的场景。
2. GeoTools 实现
若没有空间数据库,纯 Java 后端也可通过 GeoTools 库处理。首先在 pom.xml 引入依赖:
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>28.2</version>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>1.19.0</version>
</dependency>
核心转换逻辑利用 WKTReader 解析字符串为 Geometry 对象,再通过 GeometryJSON 输出 JSON:
package com.yelang.project.geotools.wkt2json;
import org.geotools.geojson.geom.GeometryJSON;
org.geotools.geometry.jts.JTSFactoryFinder;
org.locationtech.jts.geom.Geometry;
org.locationtech.jts.geom.GeometryFactory;
org.locationtech.jts.io.WKTReader;
java.io.StringWriter;
{
String {
;
{
JTSFactoryFinder.getGeometryFactory();
(geometryFactory);
reader.read(wkt);
();
();
geometryJson.write(geometry, writer);
json = writer.toString();
} (Exception e) {
e.printStackTrace();
}
json;
}
{
;
wktToJson(wkt);
System.out.println(geoJson);
}
}


