背景
在 WebGIS 开发中,WKT(Well-Known Text)和 GeoJSON 是两种常见的地理空间数据格式。WKT 常用于数据存储与交换,而 GeoJSON 因其简洁的 JSON 结构更契合 Web 前端需求,便于与各种框架集成实现地图渲染与交互。本文将介绍 WKT 转换为 GeoJSON 的多种方案,并结合 Leaflet 库演示如何加载转换后的数据。
一、后台转换实现
本节以 PostGIS 空间数据库和 Java 后台为例,介绍基于空间数据库和 GeoTools 库实现 WKT 转为 GeoJSON。
1、基于 PostGIS 实现
如果开发数据库中包含空间数据库,可以直接利用空间函数进行处理。例如查询空间属性的 WKT 格式:
SELECT ST_AsEWKT(geom) FROM biz_ceic_earthquake LIMIT 10;
若需将 WKT 转为 GeoJSON,可使用 ST_AsGeoJSON 函数:
SELECT ST_AsEWKT(geom), ST_AsGeoJSON(geom) FROM biz_ceic_earthquake LIMIT 10;
返回结果集中第二列即为 GeoJSON 类型。结合 SQL 查询可将结果返回给前端。
2、GeoTools 实现
基于 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>
核心转换代码如下:
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);
Geometry geometry = reader.read(wkt);
GeometryJSON geometryJson = new GeometryJSON();
StringWriter writer = new StringWriter();
geometryJson.write(geometry, writer);
json = writer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
}
该代码使用 WKTReader 读取字符串转为 Geometry,再通过 GeometryJSON 格式化输出。
二、wellknown.js 转换
若仅有前端环境且无后台支撑,可使用前端组件 wellknown.js 进行转换。
1、wellknown.js 简介
wellknown.js 是 Mapbox 开源的成熟组件,用于解析和序列化 Well-Known Text 到 GeoJSON。
支持 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon、GeometryCollection 等几何类型。
2、核心方法
主要提供两个核心函数:
parse(wkt):接收 WKT 字符串,返回 GeoJSON 几何对象或 null。
stringify(geojson):接收 GeoJSON 对象,返回 WKT 字符串。
三、在 Leaflet.js 中集成 wellknown.js
1、资源引入
在 Leaflet 页面中通过 Script 标签引入 wellknown.js:
<script src="/pcwater/static/js/wellknown.js"></script>
2、将 WKT 转为 GeoJSON
调用 API 实现转换并加载到地图:
var myStyle = {color: "red", weight: 5, opacity: 1, fillOpacity: 0};
const geojson = wellknown.parse(_tempPolyline);
var areaLayer = L.geoJSON(geojson, {style: myStyle}).addTo(showLayerGroup);
指定展示样式后,调用 Leaflet 的 L.geoJSON 方法即可实现空间属性展示。
四、总结
本文介绍了三种 WKT 转 GeoJSON 的方案:基于 PostGIS 数据库函数、Java GeoTools 库以及前端 wellknown.js 组件。结合 Leaflet 地图库,可实现不同场景下的数据可视化与交互功能,满足 WebGIS 应用的数据处理需求。