WKT 与 GeoJSON 转换方案
在 WebGIS 开发中,WKT(Well-Known Text)和 GeoJSON 是两种常见的地理空间数据格式。WKT 适合存储与交换,但在 Web 可视化上不如 GeoJSON 灵活。本文将介绍三种将 WKT 转换为 GeoJSON 的实用方案,并结合 Leaflet 实现地图加载。
一、基于 PostGIS 的后台转换
如果后端使用支持空间数据的 PostgreSQL 数据库,可以直接利用内置函数处理,无需额外代码。
查询 WKT 格式可使用 ST_AsEWKT,而直接获取 GeoJSON 则调用 ST_AsGeoJSON。示例 SQL:
SELECT ST_AsEWKT(geom), ST_AsGeoJSON(geom) FROM biz_ceic_earthquake LIMIT 10;
执行后返回结果集中,第二列即为标准的 GeoJSON 对象。这种方式性能最高,适合数据量大的场景。Java 层只需执行查询并将结果集序列化返回给前端即可。

二、基于 GeoTools 的纯 Java 实现
若无法直接使用数据库函数,可在 Java 服务层引入 GeoTools 库进行解析。首先配置 Maven 依赖:
<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 解析字符串为 JTS Geometry 对象,再利用 GeometryJSON 序列化为 GeoJSON 字符串:
package com.yelang.project.geotools.wkt2json;
import org.geotools.geojson.geom.GeometryJSON;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.io.WKTReader;
import java.io.StringWriter;
public class WKTToGeoJSON {
public static String wktToJson(String wkt) {
String json = null;
try {
// 创建工厂和读取器
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
WKTReader reader = new WKTReader(geometryFactory);
// 解析 WKT 为 Geometry 对象
Geometry geometry = reader.read(wkt);
// 转换为 GeoJSON 格式
GeometryJSON geometryJson = new GeometryJSON();
StringWriter writer = new StringWriter();
geometryJson.write(geometry, writer);
json = writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
public static void main(String[] args) {
String wkt = "POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))";
String geoJson = wktToJson(wkt);
System.out.println(geoJson);
}
}
运行后控制台输出标准 GeoJSON 结构,验证了转换逻辑的正确性。

三、前端 wellknown.js 集成 Leaflet
当只有前端环境且接口返回 WKT 字符串时,可以使用 Mapbox 开源的 wellknown.js 组件直接在浏览器端完成转换。
1. 资源引入
通过 <script> 标签引入 wellknown.js 文件:
<script src="/pcwater/static/js/wellknown.js"></script>
2. 转换与渲染
wellknown.js 提供了两个核心方法:parse() 用于 WKT 转 GeoJSON,stringify() 用于反向转换。结合 Leaflet 使用时,先解析再添加到地图图层:
// 定义样式配置
var myStyle = {
color: "red",
weight: 5,
opacity: 1,
fillOpacity: 0
};
// 假设 _tempPolyline 是后端传来的 WKT 字符串
var geojson = wellknown.parse(_tempPolyline);
// 创建 GeoJSON 图层并添加到地图
var areaLayer = L.geoJSON(geojson, {style: myStyle}).addTo(showLayerGroup);
这种方式无需后端介入,适合轻量级应用或临时数据展示。注意确保传入的 WKT 格式符合规范,否则 parse 可能返回 null。
总结
针对 WKT 到 GeoJSON 的转换需求,可根据技术栈选择不同方案:
- PostGIS:数据库层面直接转换,性能最优,适合大数据量。
- GeoTools:Java 服务端处理,灵活性高,不依赖特定数据库。
- wellknown.js:纯前端实现,响应快,适合轻量级交互。
配合 Leaflet 等前端地图引擎,这些方案都能有效支撑 WebGIS 应用的开发与部署。


