001 /*---------------- FILE HEADER ------------------------------------------ 002 003 This file is part of LGV 3D 004 005 Contact: 006 007 Andreas Poth 008 lat/lon GmbH 009 Aennchenstr. 19 010 53177 Bonn 011 Germany 012 E-Mail: poth@lat-lon.de 013 014 ---------------------------------------------------------------------------*/ 015 package org.deegree.tools.app3d; 016 017 import java.io.File; 018 import java.io.IOException; 019 import java.net.MalformedURLException; 020 import java.net.URL; 021 import java.util.HashMap; 022 023 import javax.xml.transform.TransformerException; 024 025 import org.deegree.framework.log.ILogger; 026 import org.deegree.framework.log.LoggerFactory; 027 import org.deegree.framework.xml.XMLFragment; 028 import org.deegree.framework.xml.XMLParsingException; 029 import org.deegree.framework.xml.XSLTDocument; 030 import org.deegree.io.dbaseapi.DBaseException; 031 import org.deegree.io.shpapi.shape_new.ShapeFile; 032 import org.deegree.io.shpapi.shape_new.ShapeFileWriter; 033 import org.deegree.model.feature.FeatureCollection; 034 import org.deegree.model.feature.GMLFeatureCollectionDocument; 035 import org.deegree.model.spatialschema.GeometryException; 036 import org.xml.sax.SAXException; 037 038 /** 039 * 040 * 041 * @version $Revision: 6259 $ 042 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 043 * @author last edited by: $Author: bezema $ 044 * 045 * @version 1.0. $Revision: 6259 $, $Date: 2007-03-20 10:15:15 +0100 (Di, 20 Mrz 2007) $ 046 * 047 * @since 1.1 048 */ 049 public class CityGML2Shape { 050 051 private static final ILogger LOG = LoggerFactory.getLogger( CityGML2Shape.class ); 052 053 private static URL xsltfile = CityGML2Shape.class.getResource( "toShape.xsl" ); 054 055 private FeatureCollection fc = null; 056 057 private String inName = null; 058 059 private String outName = null; 060 061 /** 062 * @param inName 063 * @param outName 064 * 065 */ 066 public CityGML2Shape( String inName, String outName ) { 067 if ( outName.endsWith( ".shp" ) ) { 068 outName = outName.substring( 0, outName.lastIndexOf( "." ) ); 069 } 070 this.inName = inName; 071 this.outName = outName; 072 } 073 074 /** 075 * @throws IOException 076 * @throws SAXException 077 * @throws XMLParsingException 078 * 079 */ 080 public void read() 081 throws IOException, SAXException, XMLParsingException { 082 LOG.logInfo( "Reading " + inName + " ... " ); 083 084 HashMap params = new HashMap(); 085 086 XSLTDocument outXSLSheet = new XSLTDocument(); 087 outXSLSheet.load( xsltfile ); 088 089 GMLFeatureCollectionDocument doc = new GMLFeatureCollectionDocument(); 090 URL url; 091 try { 092 url = new URL( inName ); 093 } catch ( MalformedURLException e ) { 094 url = new File( inName ).toURL(); 095 } 096 doc.load( url.openStream(), url.toString() ); 097 098 try { 099 XMLFragment resultDocument = outXSLSheet.transform( doc, XMLFragment.DEFAULT_URL, null, 100 params ); 101 doc.setRootElement( resultDocument.getRootElement() ); 102 } catch ( TransformerException e ) { 103 e.printStackTrace(); 104 } 105 106 fc = doc.parse(); 107 108 } 109 110 /** 111 * @throws GeometryException 112 * @throws DBaseException 113 * @throws IOException 114 * 115 */ 116 public void write() 117 throws DBaseException, GeometryException, IOException { 118 LOG.logInfo( "Writing " + outName + " ... " ); 119 ShapeFile sf = new ShapeFile( fc, outName ); 120 ShapeFileWriter writer = new ShapeFileWriter( sf ); 121 writer.write( outName ); 122 LOG.logInfo( "Done." ); 123 } 124 125 /** 126 * This is a command line tool. 127 * 128 * @param args 129 */ 130 public static void main( String[] args ) { 131 try { 132 133 if ( args == null || args.length < 2 ) { 134 System.out.println( "Usage: java -classpath .;deegree2.jar;$additional libs$ " + 135 "de.latlon.lgv3d.ShapeExporter <inputfile/URL> <outputfile basename>" ); 136 System.exit( 1 ); 137 } 138 139 CityGML2Shape rws = new CityGML2Shape( args[0], args[1] ); 140 rws.read(); 141 rws.write(); 142 143 } catch ( IOException e ) { 144 LOG.logError( "IO error occured.", e ); 145 } catch ( SAXException e ) { 146 LOG.logError( "The GML file could not be parsed.", e ); 147 } catch ( XMLParsingException e ) { 148 LOG.logError( "The GML file could not be parsed.", e ); 149 } catch ( DBaseException e ) { 150 LOG.logError( "Could not create .dbf for shapefile.", e ); 151 } catch ( GeometryException e ) { 152 LOG.logError( "A geometry was faulty.", e ); 153 } 154 } 155 }