Geojson格式进行自定义坐标转换(java实现)
transformCoordinatesArray为自定义数组转换方法。其中convertCoordinates为自定义的单个坐标转换方法。进行文件的读取,然后分别对Geojson不同格式进行坐标转换。
·
引入依赖
<!-- JSON 库用于处理 GeoJSON -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20231013</version>
</dependency>
<!-- Proj4j 库用于坐标系转换 -->
<dependency>
<groupId>org.locationtech.proj4j</groupId>
<artifactId>proj4j</artifactId>
<version>1.1.0</version>
进行文件的读取,然后分别对Geojson不同格式进行坐标转换
for (int i = 0; i < features.length(); i++) {
JSONObject feature = features.getJSONObject(i);
JSONObject geometry = feature.getJSONObject("geometry");
String type = geometry.getString("type");
if (type.equals("Point")) {
JSONArray coordinates = geometry.getJSONArray("coordinates");
double[] transformedPoint = convertCoordinates(coordinates, transform);
geometry.put("coordinates", new JSONArray(transformedPoint));
} else if (type.equals("LineString") || type.equals("MultiPoint")) {
JSONArray coordinates = geometry.getJSONArray("coordinates");
geometry.put("coordinates", transformCoordinatesArray(coordinates, transform));
} else if (type.equals("Polygon") || type.equals("MultiLineString")) {
JSONArray rings = geometry.getJSONArray("coordinates");
for (int j = 0; j < rings.length(); j++) {
rings.put(j, transformCoordinatesArray(rings.getJSONArray(j), transform));
}
geometry.put("coordinates", rings);
} else if (type.equals("MultiPolygon")) {
JSONArray polygons = geometry.getJSONArray("coordinates");
for (int j = 0; j < polygons.length(); j++) {
JSONArray rings = polygons.getJSONArray(j);
for (int k = 0; k < rings.length(); k++) {
rings.put(k, transformCoordinatesArray(rings.getJSONArray(k), transform));
}
polygons.put(j, rings);
}
geometry.put("coordinates", polygons);
}
}
其中convertCoordinates为自定义的单个坐标转换方法
transformCoordinatesArray为自定义数组转换方法
更多推荐
所有评论(0)