    001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/tools/shape/ShapefileMerger.java $
    002    /*----------------------------------------------------------------------------
    003     This file is part of deegree, http://deegree.org/
    004     Copyright (C) 2001-2009 by:
    005       Department of Geography, University of Bonn
    006     and
    007       lat/lon GmbH
    008
    009     This library is free software; you can redistribute it and/or modify it under
    010     the terms of the GNU Lesser General Public License as published by the Free
    011     Software Foundation; either version 2.1 of the License, or (at your option)
    012     any later version.
    013     This library is distributed in the hope that it will be useful, but WITHOUT
    014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
    016     details.
    017     You should have received a copy of the GNU Lesser General Public License
    018     along with this library; if not, write to the Free Software Foundation, Inc.,
    019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    020
    021     Contact information:
    022
    023     lat/lon GmbH
    024     Aennchenstr. 19, 53177 Bonn
    025     Germany
    026     http://lat-lon.de/
    027
    028     Department of Geography, University of Bonn
    029     Prof. Dr. Klaus Greve
    030     Postfach 1147, 53001 Bonn
    031     Germany
    032     http://www.geographie.uni-bonn.de/deegree/
    033
    034     e-mail: info@deegree.org
    035    ----------------------------------------------------------------------------*/
    036    /*----------------    FILE HEADER  ------------------------------------------
    037
    038     This file is part of deegree.
    039     Copyright (C) 2001-2008 by:
    040     EXSE, Department of Geography, University of Bonn
    041     http://www.giub.uni-bonn.de/deegree/
    042     lat/lon GmbH
    043     http://www.lat-lon.de
    044
    045     This library is free software; you can redistribute it and/or
    046     modify it under the terms of the GNU Lesser General Public
    047     License as published by the Free Software Foundation; either
    048     version 2.1 of the License, or (at your option) any later version.
    049
    050     This library is distributed in the hope that it will be useful,
    051     but WITHOUT ANY WARRANTY; without even the implied warranty of
    052     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    053     Lesser General Public License for more details.
    054
    055     You should have received a copy of the GNU Lesser General Public
    056     License along with this library; if not, write to the Free Software
    057     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    058
    059     Contact:
    060
    061     Andreas Poth
    062     lat/lon GmbH
    063     Aennchenstr. 19
    064     53115 Bonn
    065     Germany
    066     E-Mail: poth@lat-lon.de
    067
    068     Klaus Greve
    069     Department of Geography
    070     University of Bonn
    071     Meckenheimer Allee 166
    072     53115 Bonn
    073     Germany
    074     E-Mail: greve@giub.uni-bonn.de
    075
    076
    077     ---------------------------------------------------------------------------*/
    078    package org.deegree.tools.shape;
    079
    080    import java.io.File;
    081    import java.io.IOException;
    082
    083    import org.deegree.io.dbaseapi.DBaseException;
    084    import org.deegree.io.shpapi.HasNoDBaseFileException;
    085    import org.deegree.io.shpapi.ShapeFile;
    086    import org.deegree.model.feature.FeatureCollection;
    087    import org.deegree.model.feature.FeatureFactory;
    088
    089    /**
    090     * ...
    091     *
    092     * @author <a href="mailto:taddei@lat-lon.de">Ugo Taddei</a>
    093     * @author last edited by: $Author: mschneider $
    094     *
    095     * @version 2.0, $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
    096     *
    097     * @since 2.0
    098     */
    099
    100    public class ShapefileMerger {
    101
    102        private FeatureCollection mergedFeatures;
    103
    104        private File outputFile;
    105
    106        /**
    107         *
    108         * @param args
    109         * @throws IOException
    110         * @throws HasNoDBaseFileException
    111         * @throws DBaseException
    112         */
    113        public ShapefileMerger( String[] args ) throws IOException, HasNoDBaseFileException, DBaseException {
    114
    115            if ( this.mergedFeatures == null ) {
    116                this.mergedFeatures = FeatureFactory.createFeatureCollection( "dummy", 1000000 );
    117            }
    118
    119            for ( int i = 1; i < args.length; i++ ) {
    120
    121                String s = new File( args[i] ).getAbsolutePath();
    122                ShapeFile shp = new ShapeFile( s );
    123                System.out.println( "Opened: " + s );
    124
    125                for ( int j = 0; j < shp.getRecordNum(); j++ ) {
    126                    mergedFeatures.add( shp.getFeatureByRecNo( j + 1 ) );
    127                }
    128                shp.close();
    129                System.gc();
    130            }
    131
    132            this.outputFile = new File( args[0] );
    133
    134        }
    135
    136        /**
    137         *
    138         * @return merged featurecollection
    139         */
    140        public FeatureCollection getMergedFeatures() {
    141            return this.mergedFeatures;
    142        }
    143
    144        private void save()
    145                                throws IOException {
    146
    147            if ( this.mergedFeatures != null ) {
    148                String s = this.outputFile.getAbsolutePath();
    149                ShapeFile shp = new ShapeFile( s, "rw" );
    150                try {
    151                    shp.writeShape( this.mergedFeatures );
    152                    System.out.println( "Saved: " + s );
    153                } catch ( Exception e ) {
    154                    throw new IOException( "Could not save merged FeatureCollection: " + e.getLocalizedMessage() );
    155                }
    156                shp.close();
    157            }
    158        }
    159
    160        /**
    161         * @param args
    162         */
    163        public static void main( String[] args ) {
    164
    165            if ( args.length < 3 ) {
    166                System.out.println( "Usage: java -classpath .;libs/deegree2.jar;libs/jaxen-1.1-beta-8.jar;libs/jts-1.8.jar;libs/log4j-1.2.9.jar org.deegree.tools.shape.ShapefileMerger <out_shapefile> <in_shape_1> <in_shape2> ... <in_shape_n>" );
    167                System.exit( 0 );
    168            }
    169
    170            ShapefileMerger shpMerger = null;
    171            try {
    172                shpMerger = new ShapefileMerger( args );
    173                shpMerger.save();
    174
    175            } catch ( Exception e ) {
    176                e.printStackTrace();
    177                System.exit( 1 );
    178            }
    179
    180        }
    181
    182    }