...
|
...
|
@@ -45,24 +45,42 @@ public class GeoUtil { |
45
|
45
|
}
|
46
|
46
|
|
47
|
47
|
public static synchronized boolean contains(String polygon, Coordinates coordinates) {
|
48
|
|
- ShapeFactory.PolygonBuilder polygonBuilder = jtsCtx.getShapeFactory().polygon();
|
49
|
48
|
JsonArray polygonArray = new JsonParser().parse(polygon).getAsJsonArray();
|
50
|
|
- boolean first = true;
|
|
49
|
+
|
|
50
|
+ JsonArray arrayWithCoords = polygonArray;
|
|
51
|
+ JsonArray innerArray = polygonArray.get(0).getAsJsonArray();
|
|
52
|
+ if (!containsPrimitives(innerArray)) {
|
|
53
|
+ arrayWithCoords = innerArray;
|
|
54
|
+ }
|
|
55
|
+
|
|
56
|
+ Shape shape = buildPolygonFromJsonCoords(arrayWithCoords);
|
|
57
|
+ Point point = jtsCtx.getShapeFactory().pointXY(coordinates.getLongitude(), coordinates.getLatitude());
|
|
58
|
+ return shape.relate(point).equals(SpatialRelation.CONTAINS);
|
|
59
|
+ }
|
|
60
|
+
|
|
61
|
+ private static Shape buildPolygonFromJsonCoords(JsonArray coordinates) {
|
|
62
|
+ ShapeFactory.PolygonBuilder polygonBuilder = jtsCtx.getShapeFactory().polygon();
|
|
63
|
+ boolean isFirst = true;
|
51
|
64
|
double firstLat = 0.0;
|
52
|
65
|
double firstLng = 0.0;
|
53
|
|
- for (JsonElement jsonElement : polygonArray) {
|
54
|
|
- double lat = jsonElement.getAsJsonArray().get(0).getAsDouble();
|
55
|
|
- double lng = jsonElement.getAsJsonArray().get(1).getAsDouble();
|
56
|
|
- if (first) {
|
|
66
|
+ for (JsonElement element : coordinates) {
|
|
67
|
+ double lat = element.getAsJsonArray().get(0).getAsDouble();
|
|
68
|
+ double lng = element.getAsJsonArray().get(1).getAsDouble();
|
|
69
|
+ if (isFirst) {
|
57
|
70
|
firstLat = lat;
|
58
|
71
|
firstLng = lng;
|
59
|
|
- first = false;
|
|
72
|
+ isFirst = false;
|
60
|
73
|
}
|
61
|
|
- polygonBuilder.pointXY(jtsCtx.getShapeFactory().normX(lng), jtsCtx.getShapeFactory().normY(lat));
|
|
74
|
+ polygonBuilder.pointXY(jtsCtx.getShapeFactory().normX(lng), jtsCtx.getShapeFactory().normX(lat));
|
62
|
75
|
}
|
63
|
|
- polygonBuilder.pointXY(jtsCtx.getShapeFactory().normX(firstLng), jtsCtx.getShapeFactory().normY(firstLat));
|
64
|
|
- Shape shape = polygonBuilder.buildOrRect();
|
65
|
|
- Point point = jtsCtx.getShapeFactory().pointXY(coordinates.getLongitude(), coordinates.getLatitude());
|
66
|
|
- return shape.relate(point).equals(SpatialRelation.CONTAINS);
|
|
76
|
+ polygonBuilder.pointXY(jtsCtx.getShapeFactory().normX(firstLng), jtsCtx.getShapeFactory().normX(firstLat));
|
|
77
|
+ return polygonBuilder.buildOrRect();
|
|
78
|
+ }
|
|
79
|
+
|
|
80
|
+ private static boolean containsPrimitives(JsonArray array) {
|
|
81
|
+ for (JsonElement element : array) {
|
|
82
|
+ return element.isJsonPrimitive();
|
|
83
|
+ }
|
|
84
|
+ return false;
|
67
|
85
|
}
|
68
|
86
|
} |
...
|
...
|
|