package org.activityinfo.geoadmin.writer; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.geotools.feature.FeatureCollection; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.io.OutputStreamOutStream; import com.vividsolutions.jts.io.WKBWriter; public class WkbOutput implements OutputWriter { private DataOutputStream dataOut; private WKBWriter writer = new WKBWriter(); private File outputFile; private ByteArrayOutputStream baos; private int numFeatures = 0; public WkbOutput(File outputDir, int adminLevelId) throws IOException { outputFile = new File(outputDir, adminLevelId + ".wkb.gz"); baos = new ByteArrayOutputStream(); dataOut = new DataOutputStream(baos); } public void start(FeatureCollection features) throws IOException { } public void write(int adminEntityId, Geometry geometry) throws IOException { if (!geometry.isValid()) { throw new IllegalStateException(adminEntityId + " has invalid geometry"); } dataOut.writeInt(adminEntityId); writer.write(geometry, new OutputStreamOutStream(dataOut)); numFeatures++; } public void close() throws IOException { DataOutputStream out = new DataOutputStream( new GZIPOutputStream( new FileOutputStream(outputFile))); out.writeInt(numFeatures); out.write(baos.toByteArray()); out.close(); } }