在地图项目中经常需要接收前端传过来的GeoJson串匹配后端的数据再返回前端,在转换时我们可以借用专业的工具类进行转换,例如 GeoToolsJts

依赖


<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两种