Commit 52d626882bc7fbfd3d9b85f2053163bbf53d625b

Authored by Swoq
Committed by Andrew Shvayka
1 parent 17f9eebe

Fix exception after changing polygon on widget

... ... @@ -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 }
... ...