1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.geojson.converter.deserialization;
18
19 import static java.util.Objects.isNull;
20 import static org.bremersee.geojson.GeoJsonConstants.COORDINATES;
21 import static org.bremersee.geojson.GeoJsonConstants.LINESTRING;
22 import static org.bremersee.geojson.GeoJsonConstants.TYPE;
23
24 import java.io.Serial;
25 import java.util.Map;
26 import org.locationtech.jts.geom.CoordinateSequence;
27 import org.locationtech.jts.geom.GeometryFactory;
28 import org.locationtech.jts.geom.LineString;
29
30
31
32
33
34
35 class JsonToLineStringConverter extends AbstractJsonToGeometryConverter {
36
37 @Serial
38 private static final long serialVersionUID = 1L;
39
40 private final ObjectToCoordinateSequenceConverter coordinateSequenceConverter;
41
42
43
44
45
46
47
48 JsonToLineStringConverter(
49 GeometryFactory geometryFactory,
50 ObjectToCoordinateSequenceConverter coordinateSequenceConverter) {
51
52 super(geometryFactory);
53 if (isNull(coordinateSequenceConverter)) {
54 throw new IllegalArgumentException("Coordinate sequence converter must be present.");
55 }
56 this.coordinateSequenceConverter = coordinateSequenceConverter;
57 }
58
59
60
61
62
63
64
65 LineString convert(Map<String, Object> source) {
66 if (isNull(source)) {
67 return null;
68 }
69 if (!LINESTRING.equals(source.get(TYPE))) {
70 throw new IllegalArgumentException(String
71 .format("Source is not a %s: %s", LINESTRING, source));
72 }
73 return convertCoordinates(source.get(COORDINATES));
74 }
75
76
77
78
79
80
81
82 LineString convertCoordinates(Object source) {
83 CoordinateSequence coordinateSequence = coordinateSequenceConverter.convert(source);
84 return getGeometryFactory().createLineString(coordinateSequence);
85 }
86
87 }