[Schmitzm-commits] r593 - branches/1.0-gt2-2.6/src/schmitzm/geotools/io
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Sat Nov 28 02:11:36 CET 2009
Author: alfonx
Date: 2009-11-28 02:11:36 +0100 (Sat, 28 Nov 2009)
New Revision: 593
Modified:
branches/1.0-gt2-2.6/src/schmitzm/geotools/io/GeoExportUtil.java
Log:
nur .prj datei schreiben, wenn nicht schon das gleiche drinsteht (more svn friendly)
Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/io/GeoExportUtil.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/io/GeoExportUtil.java 2009-11-28 01:11:09 UTC (rev 592)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/io/GeoExportUtil.java 2009-11-28 01:11:36 UTC (rev 593)
@@ -32,8 +32,10 @@
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
+import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
+import java.io.StringReader;
import javax.imageio.ImageIO;
@@ -58,18 +60,19 @@
/**
* In dieser Klasse sind Funktionen zum Datenexport von Geo-Daten
* zusammengefasst.
- * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a> (University of Bonn/Germany)
+ *
+ * @author <a href="mailto:martin.schmitz at koeln.de">Martin Schmitz</a>
+ * (University of Bonn/Germany)
* @version 1.0
*/
public class GeoExportUtil {
- /**
- * Diese Methode exportiert eine {@link org.geotools.feature.FeatureCollection}
- * in das ShapeFile-Format
- * (<code><i>name</i>.shp <i>name</i>.shx <i>name</i>.dbf</code>).<br>
- * Baut auf folgenden Geotools-Klassen auf:
- * <code>
- * <ul>
- * <li>{@link ShapefileDataStore org.geotools.data.shapefile.ShapefileDataStore}</li>
+ /**
+ * Diese Methode exportiert eine
+ * {@link org.geotools.feature.FeatureCollection} in das ShapeFile-Format (
+ * <code><i>name</i>.shp <i>name</i>.shx <i>name</i>.dbf</code>).<br>
+ * Baut auf folgenden Geotools-Klassen auf: <code>
+ * <ul>
+ * <li>{@link ShapefileDataStore org.geotools.data.shapefile.ShapefileDataStore}</li>
* <li>{@link FeatureSource org.geotools.data.FeatureSource}</li>
* <li>{@link FeatureStore org.geotools.data.FeatureStore}</li>
* <li>{@link Transaction org.geotools.data.Transaction}</li>
@@ -77,171 +80,206 @@
* <li>{@link FeatureCollectionReader schmitzm.geotools.feature.FeatureCollectionReader}</li>
* </ul>
* </code>
- * @param fc zu exportierende FeatureCollection
- * @param outFile Dateiname (Basisname)
- * @throws java.lang.Exception bei irgendeinem Fehler
- */
- public static void writeFeaturesToShapeFile(FeatureCollection<SimpleFeatureType, SimpleFeature> fc, File outFile) throws Exception {
-// FeatureCollectionReader featureReader = new FeatureCollectionReader(fc);
+ *
+ * @param fc
+ * zu exportierende FeatureCollection
+ * @param outFile
+ * Dateiname (Basisname)
+ * @throws java.lang.Exception
+ * bei irgendeinem Fehler
+ */
+ public static void writeFeaturesToShapeFile(
+ FeatureCollection<SimpleFeatureType, SimpleFeature> fc, File outFile)
+ throws Exception {
+ // FeatureCollectionReader featureReader = new
+ // FeatureCollectionReader(fc);
- // DataStore fuer Ausgabe-Datei oeffnen
- ShapefileDataStore shpStore = new ShapefileDataStore(outFile.toURI().toURL());
-// shpStore.createSchema(featureReader.getFeatureType());
- shpStore.createSchema(fc.getSchema());
- // FeatureStore aus dem ShapeFile-DataStore ermitteln
- FeatureSource<SimpleFeatureType, SimpleFeature> source = shpStore.getFeatureSource();
-
- // TODO 26 @Martin?! Du hattest hier gecastet... ob das so noch geht?!
- // FeatureStore featureStore = (FeatureStore)source;
- FeatureStore<SimpleFeatureType, SimpleFeature> featureStore = (FeatureStore<SimpleFeatureType, SimpleFeature>)source;
-
-
- // Features schreiben
- Transaction transaction = featureStore.getTransaction();
- featureStore.addFeatures( fc );
- transaction.commit();
- transaction.close();
- }
+ // DataStore fuer Ausgabe-Datei oeffnen
+ ShapefileDataStore shpStore = new ShapefileDataStore(outFile.toURI()
+ .toURL());
+ // shpStore.createSchema(featureReader.getFeatureType());
+ shpStore.createSchema(fc.getSchema());
+ // FeatureStore aus dem ShapeFile-DataStore ermitteln
+ FeatureSource<SimpleFeatureType, SimpleFeature> source = shpStore
+ .getFeatureSource();
+ // TODO 26 @Martin?! Du hattest hier gecastet... ob das so noch geht?!
+ // FeatureStore featureStore = (FeatureStore)source;
+ FeatureStore<SimpleFeatureType, SimpleFeature> featureStore = (FeatureStore<SimpleFeatureType, SimpleFeature>) source;
- /**
- * Diese Methode exportiert ein Raster in eine Datei im ArcInfoASCII-Grid-Format.<br>
- * Baut auf folgenden Geotools-Klassen auf:
- * <code>
- * <ul>
- * <li>{@link org.geotools.coverage.grid.GridCoverage2D}</li>
+ // Features schreiben
+ Transaction transaction = featureStore.getTransaction();
+ featureStore.addFeatures(fc);
+ transaction.commit();
+ transaction.close();
+ }
+
+ /**
+ * Diese Methode exportiert ein Raster in eine Datei im
+ * ArcInfoASCII-Grid-Format.<br>
+ * Baut auf folgenden Geotools-Klassen auf: <code>
+ * <ul>
+ * <li>{@link org.geotools.coverage.grid.GridCoverage2D}</li>
* <li>{@link org.geotools.gce.arcgrid.ArcGridWriter}</li>
* </ul>
* </code>
- * @param grid zu exportierendes Grid
- * @param outFile Ausgabe-Datei
- * @throws java.lang.Exception bei irgendeinem Fehler
- */
- public static void writeGridToArcInfoASCII(GridCoverage2D grid, File outFile) throws Exception {
-
- ArcGridWriter arcGridWriter = new ArcGridWriter(outFile);
- GeneralParameterValue[] parameters = new GeneralParameterValue[] {};
- arcGridWriter.write(grid, parameters);
- arcGridWriter.dispose();
-
-// Raster raster = grid.getRenderedImage().getData();
-// Rectangle2D rect = grid.getEnvelope2D();
-// // Geo-Koordinaten
-// double x = rect.getX();
-// double y = rect.getY();
-// // Zellenbreite
-// double cellsize = rect.getWidth() / raster.getWidth();
-// // Exportieren
-//// throw new UnsupportedOperationException("GeoExportUtil.writeGridToArcInfoASCII(.) has still to be breaked from ArcGridRaster dependency!");
-// ArcGridRaster writer = new ArcGridRaster(new PrintWriter( new FileOutputStream(outFile) ));
-// writer.writeRaster(raster, x, y, cellsize, false);
-
-
-
- // Die peojektion wird vom ArcGridWriter automaitsch mit-geschrieben!
-// // Projektion schreiben
-// writeProjectionFile( grid.getCoordinateReferenceSystem(),
-// IOUtil.changeFileExt(outFile,"prj"));
- }
+ *
+ * @param grid
+ * zu exportierendes Grid
+ * @param outFile
+ * Ausgabe-Datei
+ * @throws java.lang.Exception
+ * bei irgendeinem Fehler
+ */
+ public static void writeGridToArcInfoASCII(GridCoverage2D grid, File outFile)
+ throws Exception {
- /**
- * Diese Methode exportiert ein Raster in eine Datei im GeoTiff-Format.
- * Daneben wird ein entsprechendes World-File (.tfw) erstellt, in dem die
- * Georeferenz und Aufloesung des TIF hinterlegt wird.
- * @param grid zu exportierendes Grid
- * @param output Ausgabe-Datei
- * @throws java.lang.Exception bei irgendeinem Fehler
- */
- public static void writeGridToGeoTiff(GridCoverage2D grid, File output) throws Exception {
-// for (int i=0; i<ImageIO.getWriterFormatNames().length;i++)
-// System.out.println(ImageIO.getWriterFormatNames()[i]);
+ ArcGridWriter arcGridWriter = new ArcGridWriter(outFile);
+ GeneralParameterValue[] parameters = new GeneralParameterValue[] {};
+ arcGridWriter.write(grid, parameters);
+ arcGridWriter.dispose();
- // GeoTiff-File schreiben
- ImageIO.write( grid.getRenderedImage(), "tif", output );
- // World-File schreiben
- writeWorldFile( grid.getRenderedImage().getWidth(),
- grid.getRenderedImage().getHeight(),
- grid.getEnvelope2D(),
- IOUtil.changeFileExt(output,"tfw"));
- // Projektion schreiben
- writeProjectionFile( grid.getCoordinateReferenceSystem(),
- IOUtil.changeFileExt(output,"prj"));
- }
+ // Raster raster = grid.getRenderedImage().getData();
+ // Rectangle2D rect = grid.getEnvelope2D();
+ // // Geo-Koordinaten
+ // double x = rect.getX();
+ // double y = rect.getY();
+ // // Zellenbreite
+ // double cellsize = rect.getWidth() / raster.getWidth();
+ // // Exportieren
+ // // throw new
+ // UnsupportedOperationException("GeoExportUtil.writeGridToArcInfoASCII(.) has still to be breaked from ArcGridRaster dependency!");
+ // ArcGridRaster writer = new ArcGridRaster(new PrintWriter( new
+ // FileOutputStream(outFile) ));
+ // writer.writeRaster(raster, x, y, cellsize, false);
- /**
- * Diese Methode exportiert ein Raster in eine Datei im ArcInfoASCII-Grid-Format.
- * @param grid zu exportierendes Grid
- * @param outFile Ausgabe-Datei
- * @throws java.lang.Exception bei irgendeinem Fehler
- */
- public static void writeGridRasterToArcInfoASCII(WritableGridRaster grid, File outFile) throws Exception {
- writeGridToArcInfoASCII(
- GridUtil.convertToGridCoverage2D(grid),
- outFile
- );
- }
+ // Die peojektion wird vom ArcGridWriter automaitsch mit-geschrieben!
+ // // Projektion schreiben
+ // writeProjectionFile( grid.getCoordinateReferenceSystem(),
+ // IOUtil.changeFileExt(outFile,"prj"));
+ }
- /**
- * Diese Methode exportiert ein Raster in eine Datei im GeoTiff-Format.
- * Daneben wird ein entsprechendes World-File (.tfw) erstellt, in dem die
- * Georeferenz und Aufloesung des TIF hinterlegt wird.
- * @param grid zu exportierendes Grid
- * @param output Ausgabe-Datei
- * @throws java.lang.Exception bei irgendeinem Fehler
- */
- public static void writeGridRasterToGeoTiff(WritableGridRaster grid, File output) throws Exception {
-// for (int i=0; i<ImageIO.getWriterFormatNames().length;i++)
-// System.out.println(ImageIO.getWriterFormatNames()[i]);
+ /**
+ * Diese Methode exportiert ein Raster in eine Datei im GeoTiff-Format.
+ * Daneben wird ein entsprechendes World-File (.tfw) erstellt, in dem die
+ * Georeferenz und Aufloesung des TIF hinterlegt wird.
+ *
+ * @param grid
+ * zu exportierendes Grid
+ * @param output
+ * Ausgabe-Datei
+ * @throws java.lang.Exception
+ * bei irgendeinem Fehler
+ */
+ public static void writeGridToGeoTiff(GridCoverage2D grid, File output)
+ throws Exception {
+ // for (int i=0; i<ImageIO.getWriterFormatNames().length;i++)
+ // System.out.println(ImageIO.getWriterFormatNames()[i]);
- // GeoTiff-File schreiben
- BufferedImage im = new BufferedImage(grid.getWidth(), grid.getHeight(),BufferedImage.TYPE_INT_RGB);
- im.setData(grid);
- ImageIO.write( im, "tif", output );
- // World-File schreiben
- writeWorldFile(grid.getWidth(), grid.getHeight(), grid.getEnvelope(),IOUtil.changeFileExt(output,"tfw"));
- // Projektion schreiben
- writeProjectionFile( grid.getCoordinateReferenceSystem(),
- IOUtil.changeFileExt(output,"prj"));
- }
+ // GeoTiff-File schreiben
+ ImageIO.write(grid.getRenderedImage(), "tif", output);
+ // World-File schreiben
+ writeWorldFile(grid.getRenderedImage().getWidth(), grid
+ .getRenderedImage().getHeight(), grid.getEnvelope2D(), IOUtil
+ .changeFileExt(output, "tfw"));
+ // Projektion schreiben
+ writeProjectionFile(grid.getCoordinateReferenceSystem(), IOUtil
+ .changeFileExt(output, "prj"));
+ }
- /**
- * Schreibt ein World-File (.tfw) fuer ein Grid. Dabei handelt es sich um
- * eine zeilenweise ASCII-Datei:<br>
- * <ol>
- * <li>Zellengroesse in X-Richtung (in Meter)</li>
- * <li>Koeffizient fuer Rotation in Y-Richtung (<b>wird mit 0.0 befuellt</b>!)</li>
- * <li>Koeffizient fuer Rotation in X-Richtung (<b>wird mit 0.0 befuellt</b>!)</li>
- * <li>negative Zellengroesse in Y-Richtung (in Meter)</li>
- * <li>Horizontale Geo-Referenz (Longitude) der nord-westlichen Ecke</li>
- * <li>Vertikale Geo-Referenz (Latitude) der nord-westlichen Ecke</li>
- * </ol>
- * @param rasterWidth Breite des Rasters (in Zellen)
- * @param rasterHeight Hoehe des Rasters (in Zellen)
- * @param envelope Geo-Referenz des Rasters (Position und Ausdehnung)
- * @param output Datei in die das World-File geschrieben wird
- * @exception IOException falls die Datei nicht geschrieben werden kann
- */
- public static void writeWorldFile(int rasterWidth, int rasterHeight, Rectangle2D envelope, File output) throws IOException {
- PrintWriter out = new PrintWriter(output);
+ /**
+ * Diese Methode exportiert ein Raster in eine Datei im
+ * ArcInfoASCII-Grid-Format.
+ *
+ * @param grid
+ * zu exportierendes Grid
+ * @param outFile
+ * Ausgabe-Datei
+ * @throws java.lang.Exception
+ * bei irgendeinem Fehler
+ */
+ public static void writeGridRasterToArcInfoASCII(WritableGridRaster grid,
+ File outFile) throws Exception {
+ writeGridToArcInfoASCII(GridUtil.convertToGridCoverage2D(grid), outFile);
+ }
- // Zeile 1: Zellengroesse in Meter
- out.println( envelope.getWidth() / rasterWidth );
- // Zeile 2: Rotation in Y-Richtung
- out.println( "0.0" );
- // Zeile 3: Rotation in X-Richtung
- out.println( "0.0" );
- // Zeile 4: ?
- out.println( - envelope.getHeight() / rasterHeight );
- // Zeile 5: X-Georeferenz (Longitude) WESTEN
- out.println( envelope.getX() );
- // Zeile 6: Y-Georeferenz (Latitude) NORDEN (Im Envelope steht SUEDEN!!)
- out.println( envelope.getY() + envelope.getHeight() );
+ /**
+ * Diese Methode exportiert ein Raster in eine Datei im GeoTiff-Format.
+ * Daneben wird ein entsprechendes World-File (.tfw) erstellt, in dem die
+ * Georeferenz und Aufloesung des TIF hinterlegt wird.
+ *
+ * @param grid
+ * zu exportierendes Grid
+ * @param output
+ * Ausgabe-Datei
+ * @throws java.lang.Exception
+ * bei irgendeinem Fehler
+ */
+ public static void writeGridRasterToGeoTiff(WritableGridRaster grid,
+ File output) throws Exception {
+ // for (int i=0; i<ImageIO.getWriterFormatNames().length;i++)
+ // System.out.println(ImageIO.getWriterFormatNames()[i]);
- out.flush();
- out.close();
- }
+ // GeoTiff-File schreiben
+ BufferedImage im = new BufferedImage(grid.getWidth(), grid.getHeight(),
+ BufferedImage.TYPE_INT_RGB);
+ im.setData(grid);
+ ImageIO.write(im, "tif", output);
+ // World-File schreiben
+ writeWorldFile(grid.getWidth(), grid.getHeight(), grid.getEnvelope(),
+ IOUtil.changeFileExt(output, "tfw"));
+ // Projektion schreiben
+ writeProjectionFile(grid.getCoordinateReferenceSystem(), IOUtil
+ .changeFileExt(output, "prj"));
+ }
- /**
+ /**
+ * Schreibt ein World-File (.tfw) fuer ein Grid. Dabei handelt es sich um
+ * eine zeilenweise ASCII-Datei:<br>
+ * <ol>
+ * <li>Zellengroesse in X-Richtung (in Meter)</li>
+ * <li>Koeffizient fuer Rotation in Y-Richtung (<b>wird mit 0.0
+ * befuellt</b>!)</li>
+ * <li>Koeffizient fuer Rotation in X-Richtung (<b>wird mit 0.0
+ * befuellt</b>!)</li>
+ * <li>negative Zellengroesse in Y-Richtung (in Meter)</li>
+ * <li>Horizontale Geo-Referenz (Longitude) der nord-westlichen Ecke</li>
+ * <li>Vertikale Geo-Referenz (Latitude) der nord-westlichen Ecke</li>
+ * </ol>
+ *
+ * @param rasterWidth
+ * Breite des Rasters (in Zellen)
+ * @param rasterHeight
+ * Hoehe des Rasters (in Zellen)
+ * @param envelope
+ * Geo-Referenz des Rasters (Position und Ausdehnung)
+ * @param output
+ * Datei in die das World-File geschrieben wird
+ * @exception IOException
+ * falls die Datei nicht geschrieben werden kann
+ */
+ public static void writeWorldFile(int rasterWidth, int rasterHeight,
+ Rectangle2D envelope, File output) throws IOException {
+ PrintWriter out = new PrintWriter(output);
+
+ // Zeile 1: Zellengroesse in Meter
+ out.println(envelope.getWidth() / rasterWidth);
+ // Zeile 2: Rotation in Y-Richtung
+ out.println("0.0");
+ // Zeile 3: Rotation in X-Richtung
+ out.println("0.0");
+ // Zeile 4: ?
+ out.println(-envelope.getHeight() / rasterHeight);
+ // Zeile 5: X-Georeferenz (Longitude) WESTEN
+ out.println(envelope.getX());
+ // Zeile 6: Y-Georeferenz (Latitude) NORDEN (Im Envelope steht SUEDEN!!)
+ out.println(envelope.getY() + envelope.getHeight());
+
+ out.flush();
+ out.close();
+ }
+
+ /**
* Schreibt ein Projektions-File (.prj) fuer ein
* {@link CoordinateReferenceSystem}.
*
@@ -259,17 +297,19 @@
out.flush();
out.close();
}
-
- /**
+ /**
* Schreibt ein Projektions-File (.prj) fuer ein
* {@link CoordinateReferenceSystem}. Wenn möglich wird die Schreibweise
- * "EPSG:12345" anstelle von WKT verwendet.
+ * "EPSG:12345" anstelle von WKT verwendet. Wenn die Zieldatei existiert und
+ * bereits den gleichen Inahlt hat, wird Sie nicht verändert (SVN
+ * freundlich).
*
* @param crs
* Koordinaten-System
* @param outputFile
* Datei in die die Projektion geschrieben wird
+ *
* @exception IOException
* falls die Datei nicht geschrieben werden kann
*/
@@ -278,36 +318,41 @@
// Directories will be created if needed.
outputFile.getParentFile().mkdirs();
-
- PrintWriter out = new PrintWriter(outputFile);
- try {
+ String whatToWrite = null;
- String whatToWrite = null;
-
- /**
- * LetIf we can determine the EPSG code for this, let's save it as
- * "EPSG:12345" to the file.
- */
- if (!crs.getIdentifiers().isEmpty()) {
- Object next = crs.getIdentifiers().iterator().next();
- if (next instanceof Identifier) {
- Identifier identifier = (Identifier) next;
- if (identifier.getAuthority().getTitle().toString().equals(
- "European Petroleum Survey Group")
- || identifier.toString().startsWith("EPSG:")) {
- whatToWrite = "EPSG:" + identifier.getCode();
- }
+ /**
+ * LetIf we can determine the EPSG code for this, let's save it as
+ * "EPSG:12345" to the file.
+ */
+ if (!crs.getIdentifiers().isEmpty()) {
+ Object next = crs.getIdentifiers().iterator().next();
+ if (next instanceof Identifier) {
+ Identifier identifier = (Identifier) next;
+ if (identifier.getAuthority().getTitle().toString().equals(
+ "European Petroleum Survey Group")
+ || identifier.toString().startsWith("EPSG:")) {
+ whatToWrite = "EPSG:" + identifier.getCode();
}
}
+ }
- if (whatToWrite == null) {
- /*
- * If we don't know the EPSG code for the CRS, save it as WKT
- */
- whatToWrite = crs.toWKT();
+ if (whatToWrite == null) {
+ // If we don't know the EPSG code for the CRS, save it as WKT
+ whatToWrite = crs.toWKT();
+ }
+
+ if (outputFile.exists()) {
+ String origCont = IOUtil.readFileAsString(outputFile);
+ if (origCont.equals(whatToWrite)) {
+ // Not writing anything because the file already contains the
+ // same stuff.
+ return;
}
+ }
+ PrintWriter out = new PrintWriter(outputFile);
+ try {
out.println(whatToWrite);
out.flush();
} finally {
@@ -315,6 +360,4 @@
}
}
-
}
-
More information about the Schmitzm-commits
mailing list