/** * Creates a new KmlPolygon object. Parses only one outer boundary and no or many inner * boundaries containing the coordinates. * * @return KmlPolygon object */ private static KmlPolygon createPolygon(XmlPullParser parser) throws XmlPullParserException, IOException { // Indicates if an outer boundary needs to be defined Boolean isOuterBoundary = false; List<LatLng> outerBoundary = new ArrayList<>(); List<List<LatLng>> innerBoundaries = new ArrayList<>(); int eventType = parser.getEventType(); while (!(eventType == END_TAG && parser.getName().equals("Polygon"))) { if (eventType == START_TAG) { if (parser.getName().matches(BOUNDARY_REGEX)) { isOuterBoundary = parser.getName().equals("outerBoundaryIs"); } else if (parser.getName().equals("coordinates")) { if (isOuterBoundary) { outerBoundary = convertToLatLngArray(parser.nextText()); } else { innerBoundaries.add(convertToLatLngArray(parser.nextText())); } } } eventType = parser.next(); } return new KmlPolygon(outerBoundary, innerBoundaries); }