Skip to content
Snippets Groups Projects
Commit 9fab74ee authored by Andrei Dalhikh [EPAM/GC]'s avatar Andrei Dalhikh [EPAM/GC] Committed by David Diederich
Browse files

Refactor geometry serialization

(cherry picked from commit 21051872)
parent 32360ab8
Branches
Tags
6 merge requests!604Merge Delta changes from M16 master to M18 master,!600Merge Delta changes from M16 master to M18 master,!599Merge Delta changes from M16 to M18 master,!598Merged from M16,!522M14 cherrypick to m16 master,!405Cherry-pick 'Geoshape decimation' into release/0.17
Showing
with 59 additions and 34 deletions
......@@ -17,7 +17,7 @@ package org.opengroup.osdu.indexer.model.geojson;
import java.util.ArrayList;
import java.util.List;
public abstract class Geometry<T> extends GeoJsonObject {
public abstract class Geometry<T> extends GeoJsonObject implements Positioned {
protected List<T> coordinates = new ArrayList<T>();
......
......@@ -27,7 +27,7 @@ import java.util.List;
@JsonSerialize(using = GeometryCollectionSerializer.class)
public class GeometryCollection extends GeoJsonObject implements Iterable<GeoJsonObject> {
private List<GeoJsonObject> geometries = new ArrayList<GeoJsonObject>();
private List<GeoJsonObject> geometries = new ArrayList<>();
@Override
public Iterator<GeoJsonObject> iterator() {
......
......@@ -15,9 +15,11 @@
package org.opengroup.osdu.indexer.model.geojson;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.util.List;
import lombok.NoArgsConstructor;
import org.opengroup.osdu.indexer.model.geojson.jackson.CoordinatesDeserializer;
import org.opengroup.osdu.indexer.model.geojson.jackson.GeoJsonConstants;
import java.util.List;
@NoArgsConstructor
public class LineString extends MultiPoint {
......@@ -31,4 +33,9 @@ public class LineString extends MultiPoint {
public void setCoordinates(List<Position> coordinates) {
super.setCoordinates(coordinates);
}
@Override
public String getType() {
return GeoJsonConstants.LINE_STRING;
}
}
......@@ -17,6 +17,7 @@ package org.opengroup.osdu.indexer.model.geojson;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.util.List;
import lombok.NoArgsConstructor;
import org.opengroup.osdu.indexer.model.geojson.jackson.GeoJsonConstants;
import org.opengroup.osdu.indexer.model.geojson.jackson.MultiLineStringDeserializer;
@NoArgsConstructor
......@@ -31,4 +32,9 @@ public class MultiLineString extends Geometry<List<Position>> {
public void setCoordinates(List<List<Position>> coordinates) {
super.setCoordinates(coordinates);
}
@Override
public String getType() {
return GeoJsonConstants.MULTI_LINE_STRING;
}
}
......@@ -18,6 +18,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.util.List;
import lombok.NoArgsConstructor;
import org.opengroup.osdu.indexer.model.geojson.jackson.CoordinatesDeserializer;
import org.opengroup.osdu.indexer.model.geojson.jackson.GeoJsonConstants;
@NoArgsConstructor
public class MultiPoint extends Geometry<Position> {
......@@ -31,4 +32,9 @@ public class MultiPoint extends Geometry<Position> {
public void setCoordinates(List<Position> coordinates) {
super.setCoordinates(coordinates);
}
@Override
public String getType() {
return GeoJsonConstants.MULTI_POINT;
}
}
......@@ -17,6 +17,7 @@ package org.opengroup.osdu.indexer.model.geojson;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.util.List;
import lombok.NoArgsConstructor;
import org.opengroup.osdu.indexer.model.geojson.jackson.GeoJsonConstants;
import org.opengroup.osdu.indexer.model.geojson.jackson.MultiPolygonDeserializer;
@NoArgsConstructor
......@@ -36,4 +37,9 @@ public class MultiPolygon extends Geometry<List<List<Position>>> {
public void setCoordinates(List<List<List<Position>>> coordinates) {
super.setCoordinates(coordinates);
}
@Override
public String getType() {
return GeoJsonConstants.MULTI_POLYGON;
}
}
......@@ -18,13 +18,14 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.opengroup.osdu.indexer.model.geojson.jackson.GeoJsonConstants;
import org.opengroup.osdu.indexer.model.geojson.jackson.PointDeserializer;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonDeserialize(using = PointDeserializer.class)
public class Point extends GeoJsonObject {
public class Point extends GeoJsonObject implements Positioned {
private Position coordinates;
......@@ -35,4 +36,9 @@ public class Point extends GeoJsonObject {
public Point(double longitude, double latitude, double altitude) {
coordinates = new Position(longitude, latitude, altitude);
}
@Override
public String getType() {
return GeoJsonConstants.POINT;
}
}
......@@ -16,6 +16,7 @@ package org.opengroup.osdu.indexer.model.geojson;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.NoArgsConstructor;
import org.opengroup.osdu.indexer.model.geojson.jackson.GeoJsonConstants;
import java.util.Arrays;
import java.util.List;
......@@ -31,6 +32,11 @@ public class Polygon extends Geometry<List<Position>> {
add(Arrays.asList(polygon));
}
@Override
public String getType() {
return GeoJsonConstants.POLYGON;
}
public void setExteriorRing(List<Position> points) {
if (coordinates.isEmpty()) {
coordinates.add(0, points);
......
package org.opengroup.osdu.indexer.model.geojson;
/**
* @author Andrei_Dalhikh
*/
public interface Positioned {
Object getCoordinates();
String getType();
}
......@@ -19,7 +19,10 @@ import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.opengroup.osdu.indexer.model.geojson.*;
import org.opengroup.osdu.indexer.model.geojson.GeoJsonObject;
import org.opengroup.osdu.indexer.model.geojson.GeometryCollection;
import org.opengroup.osdu.indexer.model.geojson.Positioned;
import java.io.IOException;
public class GeometryCollectionSerializer extends JsonSerializer<GeometryCollection> {
......@@ -38,41 +41,16 @@ public class GeometryCollectionSerializer extends JsonSerializer<GeometryCollect
@Override
public void serializeWithType(GeometryCollection value, JsonGenerator jsonGenerator, SerializerProvider provider, TypeSerializer typeSerializer)
throws IOException {
throws IOException {
serialize(value, jsonGenerator, provider);
}
private void serializeGeoShape(GeoJsonObject geoJsonObject, JsonGenerator jsonGenerator) throws IOException {
if (geoJsonObject instanceof Point) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(GeoJsonConstants.TYPE, GeoJsonConstants.POINT);
jsonGenerator.writeObjectField(GeoJsonConstants.COORDINATES, ((Point) geoJsonObject).getCoordinates());
jsonGenerator.writeEndObject();
} else if (geoJsonObject instanceof LineString) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(GeoJsonConstants.TYPE, GeoJsonConstants.LINE_STRING);
jsonGenerator.writeObjectField(GeoJsonConstants.COORDINATES, ((LineString) geoJsonObject).getCoordinates());
jsonGenerator.writeEndObject();
} else if (geoJsonObject instanceof Polygon) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(GeoJsonConstants.TYPE, GeoJsonConstants.POLYGON);
jsonGenerator.writeObjectField(GeoJsonConstants.COORDINATES, ((Polygon) geoJsonObject).getCoordinates());
jsonGenerator.writeEndObject();
} else if (geoJsonObject instanceof MultiPoint) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(GeoJsonConstants.TYPE, GeoJsonConstants.MULTI_POINT);
jsonGenerator.writeObjectField(GeoJsonConstants.COORDINATES, ((MultiPoint) geoJsonObject).getCoordinates());
jsonGenerator.writeEndObject();
} else if (geoJsonObject instanceof MultiLineString) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(GeoJsonConstants.TYPE, GeoJsonConstants.MULTI_LINE_STRING);
jsonGenerator.writeObjectField(GeoJsonConstants.COORDINATES, ((MultiLineString) geoJsonObject).getCoordinates());
jsonGenerator.writeEndObject();
} else if (geoJsonObject instanceof MultiPolygon) {
if(geoJsonObject instanceof Positioned) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField(GeoJsonConstants.TYPE, GeoJsonConstants.MULTI_POLYGON);
jsonGenerator.writeObjectField(GeoJsonConstants.COORDINATES, ((MultiPolygon) geoJsonObject).getCoordinates());
jsonGenerator.writeStringField(GeoJsonConstants.TYPE, ((Positioned)geoJsonObject).getType());
jsonGenerator.writeObjectField(GeoJsonConstants.COORDINATES, ((Positioned)geoJsonObject).getCoordinates());
jsonGenerator.writeEndObject();
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment