Java完成GeoJson和WKT之间的互相转换
/**
* wkt和geoJson互相转的工具类
*/
public class GeoUtils {
private static WKTReader reader = new WKTReader();
private static final String GEO_JSON_TYPE="GeometryCollection";
private static final String WKT_TYPE="GEOMETRYCOLLECTION";
public static void main(String[] args) {
String wkt = "GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))";
String wkt0="POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))";
JSONObject jsonObject = wktToJson(wkt);
System.out.println(jsonObject);
String s = jsonToWkt(jsonObject);
System.out.println("s = " + s);
}
/**
* wkt转Json
* @param wkt
* @return
*/
public static JSONObject wktToJson(String wkt) {
String json = null;
JSONObject jsonObject=new JSONObject();
try {
Geometry geometry = reader.read(wkt);
StringWriter writer = new StringWriter();
GeometryJSON geometryJSON=new GeometryJSON();
geometryJSON.write(geometry,writer);
json = writer.toString();
jsonObject = JSONObject.parseObject(json);
} catch (Exception e) {
System.out.println("WKT转GeoJson出现异常");
e.printStackTrace();
}
return jsonObject;
}
/**
* geoJson转wkt
* @param jsonObject
* @return
*/
public static String jsonToWkt(JSONObject jsonObject) {
String wkt = null;
String type = jsonObject.getString("type");
GeometryJSON gJson = new GeometryJSON();
try {
// {"geometries":[{"coordinates":[4,6],"type":"Point"},{"coordinates":[[4,6],[7,10]],"type":"LineString"}],"type":"GeometryCollection"}
if(GeoUtils.GEO_JSON_TYPE.equals(type)){
// 由于解析上面的json语句会出现这个geometries属性没有采用以下办法
JSONArray geometriesArray = jsonObject.getJSONArray("geometries");
// 定义一个数组装图形对象
int size = geometriesArray.size();
Geometry[] geometries=new Geometry[size];
for (int i=0;i<size;i++){
String str = geometriesArray.get(i).toString();
// 使用GeoUtil去读取str
Reader reader = GeoJSONUtil.toReader(str);
Geometry geometry = gJson.read(reader);
geometries[i]=geometry;
}
GeometryCollection geometryCollection = new GeometryCollection(geometries,new GeometryFactory());
wkt=geometryCollection.toText();
}else {
Reader reader = GeoJSONUtil.toReader(jsonObject.toString());
Geometry read = gJson.read(reader);
wkt=read.toText();
}
} catch (IOException e){
System.out.println("GeoJson转WKT出现异常");
e.printStackTrace();
}
return wkt;
}
}
需要导入的maven依赖
升级版本到25所需依赖如下,可以直接取
<geotools.version>25-SNAPSHOT</geotools.version>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>1.18.2</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-swing</artifactId>
<version>${geotools.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.geolatte/geolatte-geojson -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>${geotools.version}</version>
</dependency>
旧版本的依赖如下有需要的可以自取
<geotools.version>17.1</geotools.version>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geometry</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-epsg-hsql</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-jts-wrapper</artifactId>
<version>${geotools.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.geotools/gt-main -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-main</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-opengis</artifactId>
<version>${geotools.version}</version>
</dependency>
<!-- 引入json处理包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-referencing</artifactId>
<version>${geotools.version}</version>
</dependency>
jar包无法下载的pom文件中加入以下的代码即可正常下载
<repositories>
<repository>
<id>osgeo</id>
<name>OSGeo Release Repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
<snapshots><enabled>false</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</repository>
<repository>
<id>osgeo-snapshot</id>
<name>OSGeo Snapshot Repository</name>
<url>https://repo.osgeo.org/repository/snapshot/</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>false</enabled></releases>
</repository>
</repositories>