/** * @param multiCurve * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiLineString( MultiCurve<Curve> multiCurve ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiLineString", multiCurve ); for ( Curve curve : multiCurve ) { if ( referenceExportStrategy.isObjectExported( curve.getId() ) ) { writer.writeEmptyElement( "gml", "lineStringMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + curve.getId() ); } else { writer.writeStartElement( "gml", "lineStringMember", GML21NS ); exportLineString( curve ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiLineString> }
private void exportOffsetCurve( OffsetCurve offsetCurve ) throws XMLStreamException, UnknownCRSException, TransformationException { writer.writeStartElement( "gml", "OffsetCurve", gmlNs ); Curve baseCurve = offsetCurve.getBaseCurve(); if ( baseCurve.getId() != null && referenceExportStrategy.isObjectExported( baseCurve.getId() ) ) { writer.writeEmptyElement( gmlNs, "offsetBase" ); writer.writeAttribute( "gml", gmlNs, "href", "#" + baseCurve.getId() ); } else { writer.writeStartElement( "gml", "offsetBase", gmlNs ); exportCurve( baseCurve ); writer.writeEndElement(); } writer.writeStartElement( "gml", "distance", gmlNs ); writer.writeAttribute( "uom", offsetCurve.getDistance( null ).getUomUri() ); writer.writeCharacters( String.valueOf( offsetCurve.getDistance( null ).getValue() ) ); writer.writeEndElement(); writer.writeStartElement( "gml", "refDirection", gmlNs ); exportAsPos( offsetCurve.getDirection() ); writer.writeEndElement(); writer.writeEndElement(); }
/** * Writes a CURVE * * @param geometry * @param writer * @throws IOException */ public void writeCurveGeometry( Curve geometry, Writer writer ) throws IOException { if ( flags.contains( WKTFlag.USE_DKT ) ) { writer.append( "CURVE " ); appendObjectProps( writer, geometry ); writer.append( '(' ); writeCurveSegments( geometry, writer ); writer.append( ')' ); } else if ( flags.contains( WKTFlag.USE_SQL_MM ) ) { // s.append( "COMPOUNDCURVE(" ); throw new UnsupportedOperationException( "Handling curves within 'SQL-MM Part 3' is not implemented yet." ); } else { CurveLinearizer cl = new CurveLinearizer( new GeometryFactory() ); LinearizationCriterion crit = new NumPointsCriterion( linearizedControlPoints ); Curve c = cl.linearize( geometry, crit ); LineString ls = new DefaultLineString( c.getId(), c.getCoordinateSystem(), c.getPrecision(), c.getControlPoints() ); writeLineString( ls, writer ); } }
/** * Writes the CURVE without the 'CURVE()'-specific envelope. <br/> * It writes just the CURVE-coordinates. * * @param geometry * @param writer * @throws IOException */ private void writeCurveGeometryWithoutPrefix( Curve geometry, Writer writer ) throws IOException { if ( flags.contains( WKTFlag.USE_SQL_MM ) ) { throw new UnsupportedOperationException( "Handling curves within 'SQL-MM Part 3' is not implemented yet." ); } CurveLinearizer cl = new CurveLinearizer( new GeometryFactory() ); LinearizationCriterion crit = new NumPointsCriterion( linearizedControlPoints ); Curve c = cl.linearize( geometry, crit ); LineString ls = new DefaultLineString( c.getId(), c.getCoordinateSystem(), c.getPrecision(), c.getControlPoints() ); writer.append( '(' ); writeLineStringWithoutPrefix( ls, writer ); writer.append( ')' ); }
linearSegments[i] = linearize( segments.get( i ), crit ); linearizedCurve = geomFac.createCurve( curve.getId(), curve.getCoordinateSystem(), linearSegments );
fixedCurve = new DefaultCompositeCurve( curve.getId(), curve.getCoordinateSystem(), curve.getPrecision(), fixedMemberCurves ); break; fixedCurve = new DefaultCurve( curve.getId(), curve.getCoordinateSystem(), curve.getPrecision(), fixedSegments ); break; fixedCurve = new DefaultLineString( curve.getId(), curve.getCoordinateSystem(), curve.getPrecision(), invertOrientation( lineString.getControlPoints() ) ); break; fixedCurve = new DefaultOrientableCurve( curve.getId(), curve.getCoordinateSystem(), invertOrientation( orientableCurve.getBaseCurve() ), orientableCurve.isReversed() );
LOG.warn( "Cannot fix " + lastSegment.getSegmentType() + " segments." ); fixedCurve = new DefaultCurve( curve.getId(), curve.getCoordinateSystem(), curve.getPrecision(), fixedSegments ); break; LineString lineString = (LineString) curve; Points fixedPoints = getFixedPoints( lineString.getControlPoints(), lastPoint ); fixedCurve = new DefaultLineString( curve.getId(), curve.getCoordinateSystem(), curve.getPrecision(), fixedPoints ); break; fixedMemberCurves.set( fixedMemberCurves.size() - 1, fixCurve( fixedMemberCurves.get( fixedMemberCurves.size() - 1 ), lastPoint ) ); fixedCurve = new DefaultCompositeCurve( curve.getId(), curve.getCoordinateSystem(), curve.getPrecision(), fixedMemberCurves ); break; OrientableCurve orientableCurve = (OrientableCurve) curve; Curve fixedBaseCurve = fixCurve( orientableCurve.getBaseCurve(), lastPoint ); fixedCurve = new DefaultOrientableCurve( curve.getId(), curve.getCoordinateSystem(), fixedBaseCurve, orientableCurve.isReversed() ); break;
for ( Curve curve : multiCurve ) { writer.writeStartElement( "gml", "curveMember", gmlNs ); if ( curve.getId() != null && referenceExportStrategy.isObjectExported( curve.getId() ) ) { writer.writeAttribute( XLNNS, "href", "#" + curve.getId() ); } else if ( curve instanceof CompositeCurve ) { exportCompositeCurve( (CompositeCurve) curve ); for ( Curve curve : multiCurve ) { writer.writeStartElement( "gml", "curveMember", gmlNs ); if ( curve.getId() != null && referenceExportStrategy.isObjectExported( curve.getId() ) ) { writer.writeAttribute( XLNNS, "href", "#" + curve.getId() ); } else if ( curve instanceof CompositeCurve ) { exportCompositeCurve( (CompositeCurve) curve );
curveSegments[i++] = transform( segment, trans ); result = geomFactory.createCurve( curve.getId(), getTargetCRS(), curveSegments ); if ( type == CurveType.OrientableCurve ) { result = geomFactory.createOrientableCurve( curve.getId(), result.getCoordinateSystem(), result, ( (OrientableCurve) curve ).isReversed() );