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.POINT;
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.Coordinate;
27 import org.locationtech.jts.geom.GeometryFactory;
28 import org.locationtech.jts.geom.Point;
29
30
31
32
33
34
35 class JsonToPointConverter extends AbstractJsonToGeometryConverter {
36
37 @Serial
38 private static final long serialVersionUID = 1L;
39
40 private final ObjectToCoordinateConverter coordinateConverter;
41
42
43
44
45
46
47
48 JsonToPointConverter(
49 GeometryFactory geometryFactory,
50 ObjectToCoordinateConverter coordinateConverter) {
51
52 super(geometryFactory);
53 if (isNull(coordinateConverter)) {
54 throw new IllegalArgumentException("Coordinate converter must be present.");
55 }
56 this.coordinateConverter = coordinateConverter;
57 }
58
59
60
61
62
63
64
65 Point convert(Map<String, Object> source) {
66 if (isNull(source)) {
67 return null;
68 }
69 if (!POINT.equals(source.get(TYPE))) {
70 throw new IllegalArgumentException(String
71 .format("Source is not a %s: %s", POINT, source));
72 }
73 return convertCoordinates(source.get(COORDINATES));
74 }
75
76
77
78
79
80
81
82 Point convertCoordinates(Object source) {
83 Coordinate coordinate;
84 if (isNull(source)) {
85 coordinate = null;
86 } else {
87 coordinate = coordinateConverter.convert(source);
88 }
89 return getGeometryFactory().createPoint(coordinate);
90 }
91
92 }