} else if ( geom instanceof MultiCurve ) { MultiCurve<Curve> mc = (MultiCurve<Curve>) geom; List<Curve> linearizedMembers = new ArrayList<Curve>( mc.size() ); for ( Curve curve : mc ) { linearizedMembers.add( curveLinearizer.linearize( curve, crit ) ); linearized = (T) geomFac.createMultiCurve( geom.getId(), geom.getCoordinateSystem(), linearizedMembers ); } else if ( geom instanceof MultiPolygon ) { MultiPolygon mp = (MultiPolygon) geom; List<Polygon> linearizedMembers = new ArrayList<Polygon>( mp.size() ); for ( Polygon polygon : mp ) { linearizedMembers.add( sfLinearizer.linearize( polygon, crit ) ); linearized = (T) geomFac.createMultiPolygon( geom.getId(), geom.getCoordinateSystem(), linearizedMembers ); } else if ( geom instanceof MultiSurface ) { MultiSurface<Surface> ms = (MultiSurface<Surface>) geom; List<Surface> linearizedMembers = new ArrayList<Surface>( ms.size() ); for ( Surface polygon : ms ) { linearizedMembers.add( sfLinearizer.linearize( polygon, crit ) ); linearized = (T) geomFac.createMultiSurface( geom.getId(), geom.getCoordinateSystem(), linearizedMembers ); } else { List<Geometry> linearizedMembers = new ArrayList<Geometry>( geom.size() ); for ( Object member : geom ) { linearizedMembers.add( linearize( (Geometry) member, crit ) ); linearized = (T) geomFac.createMultiGeometry( geom.getId(), geom.getCoordinateSystem(), linearizedMembers );
switch ( geometry.getMultiGeometryType() ) { case MULTI_LINE_STRING: case MULTI_POINT: { List<LineString> simplifiedMembers = new ArrayList<LineString>( mc.size() ); for ( Curve member : mc ) { simplifiedMembers.add( simplify( member ) ); simplified = geomFac.createMultiLineString( mc.getId(), mc.getCoordinateSystem(), simplifiedMembers ); break; List<Geometry> simplifiedMembers = new ArrayList<Geometry>( mg.size() ); for ( Geometry member : mg ) { simplifiedMembers.add( simplify( member ) ); simplified = geomFac.createMultiGeometry( mg.getId(), mg.getCoordinateSystem(), simplifiedMembers ); break; List<Polygon> simplifiedMembers = new ArrayList<Polygon>( mp.size() ); for ( Polygon member : mp ) { simplifiedMembers.add( (Polygon) simplify( member ) ); simplified = geomFac.createMultiPolygon( mp.getId(), mp.getCoordinateSystem(), simplifiedMembers ); break; List<Polygon> simplifiedMembers = new ArrayList<Polygon>( ms.size() ); for ( Surface member : ms ) { Geometry simplifiedMember = simplify( member );
/** * Writes the multiPolygon. * * @param geometry * @param writer * @throws IOException */ public void writeMultiPolygon( MultiPolygon geometry, Writer writer ) throws IOException { writer.append( "MULTIPOLYGON " ); if ( flags.contains( WKTFlag.USE_DKT ) ) { appendObjectProps( writer, geometry ); } writer.append( '(' ); for ( int i = 0; i < geometry.size(); i++ ) { writePolygonWithoutPrefix( geometry.get( i ), writer ); if ( i < geometry.size() - 1 ) { writer.append( ',' ); } } writer.append( ')' ); }
@SuppressWarnings("unchecked") private static Geometry fixOrientation( MultiGeometry<?> geom, ICRS defaultCrs ) { ICRS crs = geom.getCoordinateSystem(); if ( crs == null ) { crs = defaultCrs; } List fixedMembers = new ArrayList<Object>( geom.size() ); for ( Geometry member : geom ) { Geometry fixedMember = fixOrientation( member, crs ); fixedMembers.add( fixedMember ); } switch ( geom.getMultiGeometryType() ) { case MULTI_GEOMETRY: return new DefaultMultiGeometry<Geometry>( null, crs, null, (List<Geometry>) fixedMembers ); case MULTI_POLYGON: return new DefaultMultiPolygon( null, crs, null, (List<Polygon>) fixedMembers ); case MULTI_SURFACE: return new DefaultMultiSurface( null, crs, null, (List<Surface>) fixedMembers ); default: throw new UnsupportedOperationException(); } }
List<?> deepMembers = new ArrayList<Object>( geometry.size() ); for ( Geometry member : geometry ) { collectMembersDeep( member, (List<GeometricPrimitive>) deepMembers ); homogenized = new GeometryFactory().createMultiPoint( geometry.getId(), geometry.getCoordinateSystem(), Collections.EMPTY_LIST ); break; homogenized = new GeometryFactory().createMultiPoint( geometry.getId(), geometry.getCoordinateSystem(), (List<Point>) deepMembers ); break; homogenized = new GeometryFactory().createMultiLineString( geometry.getId(), geometry.getCoordinateSystem(), (List<LineString>) deepMembers ); break; homogenized = new GeometryFactory().createMultiPolygon( geometry.getId(), geometry.getCoordinateSystem(), (List<Polygon>) deepMembers ); break;
MultiGeometry<?> result = null; final MultiGeometryType geometryType = geom.getMultiGeometryType(); switch ( geometryType ) { case MULTI_CURVE: mg.add( tG ); result = geomFactory.createMultiGeometry( geom.getId(), getTargetCRS(), mg ); break; case MULTI_LINE_STRING:
throws XMLStreamException, TransformationException, UnknownCRSException { switch ( multiGeometry.getMultiGeometryType() ) { case MULTI_POINT: { exportMultiPoint( (MultiPoint) multiGeometry );
private MultiPolygon transform( MultiPolygon multiPolygon, Transformation trans ) throws TransformationException { ArrayList<Polygon> polys = new ArrayList<Polygon>( multiPolygon.size() ); for ( Polygon g : multiPolygon ) { polys.add( transform( g, trans ) ); } return geomFactory.createMultiPolygon( multiPolygon.getId(), getTargetCRS(), polys ); }
/** * Writes a multiCurve. * * @param geometry * @param writer * @throws IOException */ public void writeMultiCurve( MultiCurve<Curve> geometry, Writer writer ) throws IOException { writer.append( "MULTILINESTRING " ); if ( flags.contains( WKTFlag.USE_DKT ) ) { appendObjectProps( writer, geometry ); } writer.append( '(' ); for ( int i = 0; i < geometry.size(); i++ ) { writeCurveGeometryWithoutPrefix( geometry.get( i ), writer ); if ( i < geometry.size() - 1 ) { writer.append( ',' ); } } writer.append( ')' ); }
/** * Writes the multiLineString. * * @param geometry * @param writer * @throws IOException */ public void writeMultiLineString( MultiLineString geometry, Writer writer ) throws IOException { writer.append( "MULTILINESTRING " ); if ( flags.contains( WKTFlag.USE_DKT ) ) { appendObjectProps( writer, geometry ); } writer.append( '(' ); for ( int i = 0; i < geometry.size(); i++ ) { writer.append( '(' ); writeLineStringWithoutPrefix( geometry.get( i ), writer ); if ( i < geometry.size() - 1 ) { writer.append( ',' ); } writer.append( ')' ); } writer.append( ')' ); }
/** * Writes a multiSurface. * * @param geometry * @param writer * @throws IOException */ public void writeMultiSurface( MultiSurface<Surface> geometry, Writer writer ) throws IOException { writer.append( "MULTIPOLYGON " ); if ( flags.contains( WKTFlag.USE_DKT ) ) { appendObjectProps( writer, geometry ); } writer.append( '(' ); for ( int i = 0; i < geometry.size(); i++ ) { writePolygonWithoutPrefix( geometry.get( i ), writer ); if ( i < geometry.size() - 1 ) { writer.append( ',' ); } } writer.append( ')' ); }
/** * Writes the multiPoint. * * @param geometry * @param writer * @throws IOException */ public void writeMultiPoint( MultiPoint geometry, Writer writer ) throws IOException { writer.append( "MULTIPOINT " ); if ( flags.contains( WKTFlag.USE_DKT ) ) { appendObjectProps( writer, geometry ); } writer.append( '(' ); for ( int i = 0; i < geometry.size(); i++ ) { writePointWithoutPrefix( geometry.get( i ), writer ); if ( i < geometry.size() - 1 ) { writer.append( ',' ); } } writer.append( ')' ); }
/** * transforms the submitted multi point to the target coordinate reference system * * @throws TransformationException */ private MultiPoint transform( MultiPoint geo, Transformation trans ) throws TransformationException { List<Point> points = new ArrayList<Point>( geo.size() ); for ( Point p : geo ) { points.add( transform( p, trans ) ); } return geomFactory.createMultiPoint( geo.getId(), getTargetCRS(), points ); }
private MultiLineString transform( MultiLineString geo, Transformation trans ) throws TransformationException { List<LineString> lines = new ArrayList<LineString>( geo.size() ); for ( LineString line : geo ) { lines.add( transform( line, trans ) ); } return geomFactory.createMultiLineString( geo.getId(), getTargetCRS(), lines ); }
/** * transforms the submitted multi curve to the target coordinate reference system * * @throws TransformationException */ private MultiCurve<Curve> transform( MultiCurve<Curve> geo, Transformation trans ) throws TransformationException { List<Curve> curves = new ArrayList<Curve>( geo.size() ); for ( Curve curve : geo ) { curves.add( transform( curve, trans ) ); } return geomFactory.createMultiCurve( geo.getId(), getTargetCRS(), curves ); }
/** * transforms the submitted multi surface to the target coordinate reference system * * @throws TransformationException */ private MultiSurface<Surface> transform( MultiSurface<Surface> multiSurface, Transformation trans ) throws TransformationException { List<Surface> surfaces = new ArrayList<Surface>( multiSurface.size() ); for ( Surface surface : multiSurface ) { surfaces.add( transform( surface, trans ) ); } return geomFactory.createMultiSurface( multiSurface.getId(), getTargetCRS(), surfaces ); }
multiCurve.setType( type ); multiCurve.setProperties( props );
multiSurface.setType( type ); multiSurface.setProperties( props );
private MultiSolid transform( MultiSolid geom, Transformation trans ) throws TransformationException { List<Solid> transformedSolids = new LinkedList<Solid>(); for ( Solid s : geom ) { Solid ts = transform( s, trans ); transformedSolids.add( ts ); } return geomFactory.createMultiSolid( geom.getId(), getTargetCRS(), transformedSolids ); }
throws IOException { switch ( geometry.getMultiGeometryType() ) { case MULTI_GEOMETRY: writeMultiGeometryGeometry( geometry, writer );