/* * ShapeExporter.java * * Created on April 13, 2007, 3:41 PM * */ package ika.geoexport; import ika.geo.GeoSet; import ika.table.DBFExporter; import ika.table.TableLink; import ika.table.TableLinkExporter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; /** * * @author Bernhard Jenny, Institute of Cartography, ETH Zurich. */ public class ShapeExporter extends GeoSetExporter implements TableLinkExporter { private ShapeGeometryExporter shapeGeometryExporter = new ShapeGeometryExporter(); private boolean shapeTypeSet = false; /** Creates a new instance of ShapeExporter */ public ShapeExporter() { } public String getFileFormatName() { return "Shape"; } public String getFileExtension() { return "shp"; } protected void write(GeoSet geoSet, OutputStream outputStream) throws IOException { if (!this.shapeTypeSet) shapeGeometryExporter.setShapeTypeFromFirstGeoObject(geoSet); shapeGeometryExporter.write(geoSet, outputStream); } public int getFeatureCount() { return this.shapeGeometryExporter.getWrittenRecordCount(); } public void exportTableForGeometry(String geometryFilePath, TableLink tableLink) throws IOException { FileOutputStream dbfOutputStream = null; FileOutputStream shxOutputStream = null; try { ika.table.Table table = tableLink.getTable(); String dbfPath = ika.utils.FileUtils.replaceExtension(geometryFilePath, "dbf"); dbfOutputStream = new FileOutputStream(dbfPath); new DBFExporter().exportTable(dbfOutputStream, table); String shxPath = ika.utils.FileUtils.replaceExtension(geometryFilePath, "shx"); shxOutputStream = new FileOutputStream(shxPath); shapeGeometryExporter.writeSHXFile(shxOutputStream, tableLink.getGeoSet()); } finally { if (dbfOutputStream != null) dbfOutputStream.close(); if (shxOutputStream != null) shxOutputStream.close(); } } /** * Overwrite setBezierConversionTolerance to propagate bezierConversionTolerance * to private ShapeGeometryExporter. */ @Override public void setBezierConversionTolerance(double bezierConversionTolerance) { super.setBezierConversionTolerance(bezierConversionTolerance); this.shapeGeometryExporter.setBezierConversionTolerance(bezierConversionTolerance); } /** * Set the type of shape file that will be generated. Valid values are * POINT_SHAPE_TYPE, POLYLINE_SHAPE_TYPE, and POLYGON_SHAPE_TYPE. * The default value is POLYLINE_SHAPE_TYPE. */ public void setShapeType(int shapeType) { this.shapeTypeSet = true; this.shapeGeometryExporter.setShapeType(shapeType); } }