转载出处:https://www.helplib.com/Java_API_Classes/article_67172
以下是展示如何使用com.vividsolutions.jts.geom.MultiPolygon的最佳示例。 我们使用了代码质量辨别算法从开源项目中提取出了最佳的优秀示例。
private String transformMultiPolygonToJsonPolygonArray(MultiPolygon multipolygon){ LOGGER.info("Transforming multipolygon to JSON polygon array"); /* * For a multi polygon, we make several simple polygons and put them into an array */ String polygonArray = "["; boolean firstElement = true; for (int i = 0; i < multipolygon.getNumGeometries(); i++){ Polygon polygon = (Polygon) multipolygon.getGeometryN(i); String aPolygon = transformPolygonToJsonPolygon(polygon); if (firstElement){ polygonArray = polygonArray.concat(aPolygon); firstElement = false; } else { polygonArray = polygonArray.concat(", " + aPolygon); } } return polygonArray; }
protected static Geometry transformMultiPolygon(CoordinateTransform ct, MultiPolygon multiPolygon) { Polygon[] polygon = new Polygon[multiPolygon.getNumGeometries()]; for (int i = 0; i < polygon.length; ++i) { polygon[i] = multiPolygon.getFactory().createPolygon(transformCoordinates(ct, multiPolygon.getGeometryN(i).getCoordinates())); } return multiPolygon.getFactory().createMultiPolygon(polygon); }
/** * Converts a @link com.vividsolutions.jts.geom.MultiPolygon to a @link net.opengis.gml.v_3_2_1.MultiSurfaceType * Note: MultiPolygon maps to gml MultiSurfaceType * * @param multiPolygon * @return MultiSurfaceType */ public static MultiSurfaceType convertToMultiSurfaceType(MultiPolygon multiPolygon, String srsName) { MultiSurfaceType multiSurfaceType = GML320_OBJECT_FACTORY.createMultiSurfaceType(); for (int i = 0; i < multiPolygon.getNumGeometries(); i++) { Polygon poly = (Polygon) multiPolygon.getGeometryN(i); PolygonType polygonType = convertToPolygonType(poly, srsName); JAXBElement<PolygonType> polygonTypeJAXBElement = GML320_OBJECT_FACTORY .createPolygon(polygonType); SurfacePropertyType surfacePropertyType = GML320_OBJECT_FACTORY .createSurfacePropertyType(); surfacePropertyType.setAbstractSurface(polygonTypeJAXBElement); multiSurfaceType.getSurfaceMember().add(surfacePropertyType); } multiSurfaceType.setSrsName(srsName); return multiSurfaceType; }
private static void addElemInfo(List elemInfoList, MultiPolygon polys, final int STARTING_OFFSET, final int GTYPE) { Polygon poly; int offset = STARTING_OFFSET; int LEN = D(GTYPE) + L(GTYPE); for (int i = 0; i < polys.getNumGeometries(); i++) { poly = (Polygon) polys.getGeometryN(i); addElemInfo(elemInfoList, poly, offset, GTYPE); if( isRectangle( poly )){ offset += (2 * LEN); } else { offset += (poly.getNumPoints() * LEN); } } }
public int getLength(Object geometry) { MultiPolygon multi; if (geometry instanceof MultiPolygon) { multi = (MultiPolygon) geometry; } else { multi = geometryFactory .createMultiPolygon(new Polygon[] { (Polygon) geometry }); } int nrings = 0; for (int t = 0; t < multi.getNumGeometries(); t++) { Polygon p; p = (Polygon) multi.getGeometryN(t); nrings = nrings + 1 + p.getNumInteriorRing(); } int npoints = multi.getNumPoints(); int length; if (shapeType == ShapeType.POLYGONZ) { length = 44 + (4 * nrings) + (16 * npoints) + (8 * npoints) + 16 + (8 * npoints) + 16; } else if (shapeType == ShapeType.POLYGONM) { length = 44 + (4 * nrings) + (16 * npoints) + (8 * npoints) + 16; } else if (shapeType == ShapeType.POLYGON) { length = 44 + (4 * nrings) + (16 * npoints); } else { throw new IllegalStateException( "Expected ShapeType of Polygon, got " + shapeType); } return length; }
protected void writeGeometry(Geometry geom) throws IOException { MultiPolygon mpoly = (MultiPolygon) geom; for (int i = 0; i < mpoly.getNumGeometries(); i++) { super.writeGeometry(mpoly.getGeometryN(i)); } }
public void encodeMultiSurface(MultiPolygon mp, StringBuffer buff, Map<String, String> abstractGeometryAttributeMap, int srsDimension) { encodeStartTag("MultiSurface", buff, abstractGeometryAttributeMap); encodeStartTag("surfaceMembers", buff, null); for (int i = 0; i < mp.getNumGeometries(); i++) { Polygon p = (Polygon) mp.getGeometryN(i); encodePolygon(p, buff, null, srsDimension); } encodeEndTag("surfaceMembers", buff); encodeEndTag("MultiSurface", buff); }
/** * Tests a valid multipolygon deserialization * * @throws java.io.IOException When an unexpected exception is thrown (fails the test) */ @Test public void testMultiPolygon() throws IOException { String testString = "{ "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:EPSG:7.6:31370"}}, "type": "MultiPolygon", "coordinates": [ [[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]]], [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]], [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]] ]}"; MultiPolygon result = (MultiPolygon) JTS.to(assembler.fromTransferObject(mapper.readValue(testString, MultiPolygonTo.class))); Assert.assertEquals(LAMBERT72.getCode(), result.getSRID()); Assert.assertEquals(2, result.getNumGeometries()); com.vividsolutions.jts.geom.Geometry first = result.getGeometryN(0); com.vividsolutions.jts.geom.Geometry second = result.getGeometryN(1); Assert.assertTrue(first instanceof Polygon); Assert.assertTrue(second instanceof Polygon); Polygon polygon = (Polygon) first; Assert.assertEquals(LAMBERT72.getCode(), polygon.getSRID()); Assert.assertEquals(0, polygon.getNumInteriorRing()); LineString ls = polygon.getExteriorRing(); Assert.assertEquals(LAMBERT72.getCode(), ls.getSRID()); Coordinate[] coords = ls.getCoordinates(); Assert.assertEquals(5, coords.length); Assert.assertEquals(coords[0], coords[4]); polygon = (Polygon) second; Assert.assertEquals(LAMBERT72.getCode(), polygon.getSRID()); Assert.assertEquals(1, polygon.getNumInteriorRing()); ls = polygon.getExteriorRing(); Assert.assertEquals(LAMBERT72.getCode(), ls.getSRID()); coords = ls.getCoordinates(); Assert.assertEquals(5, coords.length); Assert.assertEquals(coords[0], coords[4]); ls = polygon.getInteriorRingN(0); Assert.assertEquals(LAMBERT72.getCode(), ls.getSRID()); coords = ls.getCoordinates(); Assert.assertEquals(5, coords.length); Assert.assertEquals(coords[0], coords[4]); }
public void testMultiSurface() { GeometryAttribute[] array = new GeometryAttribute[2]; AbstractPolicy p1 = TestSupport.policyFromFile(TestSupport.getGeoXACMLFNFor("gml3", "MultiSurfacePolicy.xml")); array[0] = TestSupport.getGeometryAttribute(p1); AbstractPolicy p2 = policyFromAttributeEncoding(array[0], xmlTemplate); array[1] = TestSupport.getGeometryAttribute(p2); for (GeometryAttribute attr : array) { assertTrue(attr.getSrsName().equals("EPSG:4326")); assertTrue(attr.getGid().equals("MultiSurface")); assertTrue(attr.getGmlVersion() == GMLVersion.Version3); MultiPolygon mpoly = (MultiPolygon) attr.getGeometry(); Polygon poly = (Polygon) mpoly.getGeometryN(0); Coordinate[] coords = poly.getExteriorRing().getCoordinates(); assertTrue(coords[0].x == 0); assertTrue(coords[0].y == 0); assertTrue(coords[1].x == 0); assertTrue(coords[1].y == 100); assertTrue(coords[2].x == 100); assertTrue(coords[2].y == 100); assertTrue(coords[3].x == 100); assertTrue(coords[3].y == 0); assertTrue(coords[4].x == 0); assertTrue(coords[4].y == 0); poly = (Polygon) mpoly.getGeometryN(1); coords = poly.getExteriorRing().getCoordinates(); assertTrue(coords[0].x == 0); assertTrue(coords[0].y == 0); assertTrue(coords[1].x == 0); assertTrue(coords[1].y == -100); assertTrue(coords[2].x == -100); assertTrue(coords[2].y == -100); assertTrue(coords[3].x == -100); assertTrue(coords[3].y == 0); assertTrue(coords[4].x == 0); assertTrue(coords[4].y == 0); } }
/** * Returns a completed multi type. * * @param geometryFactory The factory this method should use to create the * multi type. * * @return Appropriate multi geometry type. */ public Geometry create(GeometryFactory geometryFactory) { if (internalType.equals("Point")) { Point[] pointArray = geometryFactory.toPointArray(geometries); MultiPoint multiPoint = geometryFactory.createMultiPoint(pointArray); multiPoint.setUserData( getSRS() ); multiPoint.setSRID( getSRID() ); LOGGER.fine("created " + multiPoint); return multiPoint; } else if (internalType.equals("LineString")) { LineString[] lineStringArray = geometryFactory .toLineStringArray(geometries); MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStringArray); multiLineString.setUserData( getSRS() ); multiLineString.setSRID( getSRID() ); LOGGER.fine("created " + multiLineString); return multiLineString; } else if (internalType.equals("Polygon")) { Polygon[] polygonArray = geometryFactory.toPolygonArray(geometries); MultiPolygon multiPolygon = geometryFactory.createMultiPolygon(polygonArray); multiPolygon.setUserData( getSRS() ); multiPolygon.setSRID( getSRID() ); LOGGER.fine("created " + multiPolygon); return multiPolygon; } else { return null; } }
private MultiPolygon randomMultiPolygon(int srid) { MultiPolygon geometry = geometryFactory.createMultiPolygon(new Polygon[] { randomPolygon(srid), randomPolygon(srid), randomPolygon(srid) }); geometry.setSRID(srid); return geometry; }
/** * Returns a completed multi type. * * @param geometryFactory The factory this method should use to create the * multi type. * * @return Appropriate multi geometry type. */ public Geometry create(GeometryFactory geometryFactory) { if (internalType.equals("Point")) { Point[] pointArray = geometryFactory.toPointArray(geometries); MultiPoint multiPoint = geometryFactory.createMultiPoint(pointArray); multiPoint.setUserData( getSRS() ); multiPoint.setSRID( getSRID() ); LOGGER.fine("created " + multiPoint); return multiPoint; } else if (internalType.equals("LineString")) { LineString[] lineStringArray = geometryFactory .toLineStringArray(geometries); MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStringArray); multiLineString.setUserData( getSRS() ); multiLineString.setSRID( getSRID() ); LOGGER.fine("created " + multiLineString); return multiLineString; } else if (internalType.equals("Polygon")) { Polygon[] polygonArray = geometryFactory.toPolygonArray(geometries); MultiPolygon multiPolygon = geometryFactory.createMultiPolygon(polygonArray); multiPolygon.setUserData( getSRS() ); multiPolygon.setSRID( getSRID() ); LOGGER.fine("created " + multiPolygon); return multiPolygon; } else { return null; } }
/** * Returns a completed multi type. * * @param geometryFactory The factory this method should use to create the * multi type. * * @return Appropriate multi geometry type. */ public Geometry create(GeometryFactory geometryFactory) { if (internalType.equals("Point")) { Point[] pointArray = geometryFactory.toPointArray(geometries); MultiPoint multiPoint = geometryFactory.createMultiPoint(pointArray); multiPoint.setUserData( getSRS() ); multiPoint.setSRID( getSRID() ); LOGGER.fine("created " + multiPoint); return multiPoint; } else if (internalType.equals("LineString")) { LineString[] lineStringArray = geometryFactory .toLineStringArray(geometries); MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStringArray); multiLineString.setUserData( getSRS() ); multiLineString.setSRID( getSRID() ); LOGGER.fine("created " + multiLineString); return multiLineString; } else if (internalType.equals("Polygon")) { Polygon[] polygonArray = geometryFactory.toPolygonArray(geometries); MultiPolygon multiPolygon = geometryFactory.createMultiPolygon(polygonArray); multiPolygon.setUserData( getSRS() ); multiPolygon.setSRID( getSRID() ); LOGGER.fine("created " + multiPolygon); return multiPolygon; } else { return null; } }
protected MultiPolygon buildMultiPolygon(String multip) { try { WKTReader reader = new WKTReader(); MultiPolygon mp = (MultiPolygon) reader.read(multip); mp.setSRID(4326); return mp; } catch (ParseException ex) { throw new RuntimeException("Unexpected exception: " + ex.getMessage(), ex); } }
@Test public void multiPolygonToISOTest() throws Exception { GeometryFactory fact = new GeometryFactory(); final Coordinate[] coordinates = new Coordinate[5]; coordinates[0] = new Coordinate(0, 0); coordinates[1] = new Coordinate(0, 1); coordinates[2] = new Coordinate(1, 1); coordinates[3] = new Coordinate(1, 0); coordinates[4] = new Coordinate(0, 0); LinearRing linear = new GeometryFactory().createLinearRing(coordinates); Polygon poly = new Polygon(linear, null, fact); poly.setSRID(2154); final Coordinate[] coordinates2 = new Coordinate[5]; coordinates2[0] = new Coordinate(10, 10); coordinates2[1] = new Coordinate(10, 11); coordinates2[2] = new Coordinate(11, 11); coordinates2[3] = new Coordinate(11, 10); coordinates2[4] = new Coordinate(10, 10); LinearRing linear2 = new GeometryFactory().createLinearRing(coordinates2); Polygon poly2 = new Polygon(linear2, null, fact); poly2.setSRID(2154); Polygon[] polygons = new Polygon[2]; polygons[0] = poly; polygons[1] = poly2; MultiPolygon m = new MultiPolygon(polygons, fact); m.setSRID(2154); AbstractGeometry gml = JTStoGeometry.toGML("3.2.1", m); final Geometry geom = GeometrytoJTS.toJTS(gml); //System.out.println(geom); System.out.println("SRID:"+ geom.getSRID()); }