在地图项目中经常需要接收前端传过来的GeoJson串匹配后端的数据再返回前端,在转换时我们可以借用专业的工具类进行转换,例如 GeoTools 、Jts 等
依赖
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-io-common</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>27.0</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-main</artifactId>
<version>27.0</version>
</dependency>
GeoTools
@SneakyThrows
public static String convertGeoJsonGeometryToWkt(String geoJsonGeometry){
// 读取GeoJSON
GeometryJSON gjson = new GeometryJSON();
StringReader reader = new StringReader(geoJsonGeometry);
Geometry geometry = gjson.read(reader);
return geometry.toText();
}
注意!!!如果是Feature格式的GeoJson则无法解析
示例如下:
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[116.403, 39.914],
[116.405, 39.914],
[116.405, 39.916],
[116.403, 39.916],
[116.403, 39.914]
]
]
}
}
可以解析的为geometry格式的Json,格式如下:
{
"type": "Polygon",
"coordinates": [
[
[116.403, 39.914],
[116.405, 39.914],
[116.405, 39.916],
[116.403, 39.916],
[116.403, 39.914]
]
]
}
jts
不使用GeoTools也可以解析GeoJson数据,jts具备单独解析GeoJson数据的方法,并且可以兼容Feature和geometry两种格式的json串
@SneakyThrows
public static String convertGeoJsonFeatureToWkt(String geoJsonFeature){
GeoJsonReader geoJsonReader = new GeoJsonReader();
Geometry geometry = geoJsonReader.read(geoJsonFeature);
WKTWriter wktWriter = new WKTWriter();
return wktWriter.write(geometry);
}
jts一个方法就可以解析FeatureJson和GeometryJson两种