public Geoshape polygon(List<double[]> coordinates) { Preconditions.checkArgument(coordinates.size() >= 4, "Too few coordinate pairs provided"); Preconditions.checkArgument(Arrays.equals(coordinates.get(0), coordinates.get(coordinates.size()-1)), "Polygon is not closed"); final PolygonBuilder builder = this.getContext().getShapeFactory().polygon(); for (double[] coordinate : coordinates) { Preconditions.checkArgument(coordinate.length==2 && Geoshape.isValidCoordinate(coordinate[1], coordinate[0]), "Invalid coordinate provided"); builder.pointXY(coordinate[0], coordinate[1]); } return new Geoshape(builder.build()); }
@Override public MultiPolygonBuilder add(PolygonBuilder polygonBuilder) { shapes.add(polygonBuilder.build()); return this; }
protected Shape readPolygon(XReader reader) throws IOException { ShapeFactory.PolygonBuilder polyBuilder = shpFactory.polygon(); reader.readPoints(polyBuilder); if(!reader.isDone() && reader.peek()==PolyshapeWriter.KEY_ARG_START) { List<LinearRing> list = new ArrayList<LinearRing>(); while(reader.isEvent() && reader.peek()==PolyshapeWriter.KEY_ARG_START) { reader.readKey(); // eat the event; reader.readPoints(polyBuilder.hole()).endHole(); } } return polyBuilder.build(); }
@SuppressWarnings("unchecked") @Override public Shape build() { GeoCompositeAreaShape areaShape = new GeoCompositeAreaShape(planetModel); for (PolygonBuilder builder : builders) { Geo3dShape<GeoPolygon> shape = (Geo3dShape<GeoPolygon>) builder.build(); areaShape.addShape(shape.shape); } return new Geo3dShape<>(areaShape, context); } }