private StringBuilder appendPoints(final ComposedGeospatial<Point> points, final Boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale, final Boolean isUnicode, final StringBuilder result) throws EdmPrimitiveTypeException { for (final Iterator<Point> itor = points.iterator(); itor.hasNext();) { result.append(point(itor.next(), isNullable, maxLength, precision, scale, isUnicode)); if (itor.hasNext()) { result.append(','); } } return result; }
@Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } final Polygon polygon = (Polygon) o; return dimension == polygon.dimension && (srid == null ? polygon.srid == null : srid.equals(polygon.srid)) && (interior == null ? polygon.interior == null : interior.equals(polygon.interior)) && (exterior == null ? polygon.exterior == null : exterior.equals(polygon.exterior)); }
@Override public int hashCode() { int result = dimension == null ? 0 : dimension.hashCode(); result = 31 * result + (srid == null ? 0 : srid.hashCode()); result = 31 * result + (interior == null ? 0 : interior.hashCode()); result = 31 * result + (exterior == null ? 0 : exterior.hashCode()); return result; } }
private void polygons(final XMLStreamWriter writer, final Iterator<Polygon> itor, final boolean wrap) throws XMLStreamException { while (itor.hasNext()) { final Polygon polygon = itor.next(); if (wrap) { writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON, Constants.NS_GML); } if (!polygon.getExterior().isEmpty()) { writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_EXTERIOR, Constants.NS_GML); writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_LINEARRING, Constants.NS_GML); points(writer, polygon.getExterior().iterator(), false); writer.writeEndElement(); writer.writeEndElement(); } if (!polygon.getInterior().isEmpty()) { writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_INTERIOR, Constants.NS_GML); writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_LINEARRING, Constants.NS_GML); points(writer, polygon.getInterior().iterator(), false); writer.writeEndElement(); writer.writeEndElement(); } if (wrap) { writer.writeEndElement(); } } }
private void polygon(final JsonGenerator jgen, final Polygon polygon) throws IOException { if (!polygon.getExterior().isEmpty()) { jgen.writeStartArray(); lineString(jgen, polygon.getExterior()); jgen.writeEndArray(); } if (!polygon.getInterior().isEmpty()) { jgen.writeStartArray(); lineString(jgen, polygon.getInterior()); jgen.writeEndArray(); } }
private void polygons(final XMLStreamWriter writer, final Iterator<Polygon> itor, final boolean wrap) throws XMLStreamException { while (itor.hasNext()) { final Polygon polygon = itor.next(); if (wrap) { writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON, Constants.NS_GML); } if (!polygon.getExterior().isEmpty()) { writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_EXTERIOR, Constants.NS_GML); writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_LINEARRING, Constants.NS_GML); points(writer, polygon.getExterior().iterator(), false); writer.writeEndElement(); writer.writeEndElement(); } for (int i = 0; i < polygon.getNumberOfInteriorRings(); i++) { writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_INTERIOR, Constants.NS_GML); writer.writeStartElement(Constants.PREFIX_GML, Constants.ELEM_POLYGON_LINEARRING, Constants.NS_GML); points(writer, polygon.getInterior(i).iterator(), false); writer.writeEndElement(); writer.writeEndElement(); } if (wrap) { writer.writeEndElement(); } } }
private void writeGeoPolygon(JsonGenerator json, final Polygon polygon) throws IOException { json.writeStartArray(); writeGeoPoints(json, polygon.getExterior()); json.writeEndArray(); if (!polygon.getInterior().isEmpty()) { json.writeStartArray(); writeGeoPoints(json, polygon.getInterior()); json.writeEndArray(); } }
static private com.vividsolutions.jts.geom.Polygon convertPolygon( Polygon polygon) throws AssertionError { Coordinate[] coords = convertLineStringToPoints(polygon.getExterior()); LinearRing shell = GeometryUtils.GEOMETRY_FACTORY.createLinearRing(coords); LinearRing[] holes = null; if (polygon.getInterior() != null && polygon.getInterior().isEmpty()) { holes = new LinearRing[1]; holes[0] = GeometryUtils.GEOMETRY_FACTORY.createLinearRing(convertLineStringToPoints(polygon.getExterior())); } return GeometryUtils.GEOMETRY_FACTORY.createPolygon(shell, holes); }
private String polygon(final Polygon polygon, final Boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException { final StringBuilder result = new StringBuilder(); result.append('('); for (final Iterator<Point> itor = polygon.getInterior().iterator(); itor.hasNext();) { result.append(point(itor.next(), isNullable, maxLength, precision, scale, isUnicode)); if (itor.hasNext()) { result.append(','); } } result.append("),("); for (final Iterator<Point> itor = polygon.getExterior().iterator(); itor.hasNext();) { result.append(point(itor.next(), isNullable, maxLength, precision, scale, isUnicode)); if (itor.hasNext()) { result.append(','); } } return result.append(')').toString(); }
@Override public int hashCode() { int result = dimension == null ? 0 : dimension.hashCode(); result = 31 * result + (srid == null ? 0 : srid.hashCode()); result = 31 * result + (interiorRings == null ? 0 : interiorRings.hashCode()); result = 31 * result + (exterior == null ? 0 : exterior.hashCode()); return result; } }
@Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } final Polygon polygon = (Polygon) o; return dimension == polygon.dimension && (srid == null ? polygon.srid == null : srid.equals(polygon.srid)) && (interiorRings == null ? polygon.interiorRings == null : interiorRings.equals(polygon.interiorRings)) && (exterior == null ? polygon.exterior == null : exterior.equals(polygon.exterior)); }
static private com.vividsolutions.jts.geom.Polygon convertPolygon( Polygon polygon) throws AssertionError { Coordinate[] coords = convertLineStringToPoints(polygon.getExterior()); LinearRing shell = GeometryUtils.GEOMETRY_FACTORY.createLinearRing(coords); LinearRing[] holes = null; if (polygon.getInterior() != null && polygon.getInterior().isEmpty()) { holes = new LinearRing[1]; holes[0] = GeometryUtils.GEOMETRY_FACTORY.createLinearRing(convertLineStringToPoints(polygon.getExterior())); } return GeometryUtils.GEOMETRY_FACTORY.createPolygon(shell, holes); }
@Test public void testPolygon() throws EdmPrimitiveTypeException { ODataWKTWriter writer = new ODataWKTWriter(); GeometryFactory factory = new GeometryFactory(); Polygon polygon = factory .createPolygon( factory.createLinearRing(new Coordinate[] { new Coordinate(0, 0), new Coordinate(3, 0), new Coordinate(3, 3), new Coordinate(0, 3), new Coordinate(0, 0) }), new LinearRing[] { factory.createLinearRing( new Coordinate[] { new Coordinate(1, 1), new Coordinate(2, 1), new Coordinate(2, 2), new Coordinate(1, 2), new Coordinate(1, 1) }) }); //hole first, no space between rings assertEquals("Polygon((1.0 1.0,2.0 1.0,2.0 2.0,1.0 2.0,1.0 1.0)," + "(0.0 0.0,3.0 0.0,3.0 3.0,0.0 3.0,0.0 0.0))", writer.write(polygon)); String uriValue = ODataTypeManager.geometryToODataValueString(polygon, true); org.apache.olingo.commons.api.edm.geo.Polygon olingoPolygon = (org.apache.olingo.commons.api.edm.geo.Polygon) EdmGeometryPolygon.getInstance().valueOfString(uriValue, null, null, null, null, null, EdmGeometryPolygon.getInstance().getDefaultType()); assertEquals(0, olingoPolygon.getExterior().iterator().next().getX(), 0); assertEquals(1, olingoPolygon.getInterior().iterator().next().getX(), 0); }