All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.geotools.data.crs.ForceCoordinateSystemFeatureReader Maven / Gradle / Ivy

/*
 *    GeoTools - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2003-2008, Open Source Geospatial Foundation (OSGeo)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 */
package org.geotools.data.crs;

import java.io.IOException;
import java.util.NoSuchElementException;
import org.geotools.data.FeatureReader;
import org.geotools.feature.FeatureTypes;
import org.geotools.feature.SchemaException;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.opengis.feature.IllegalAttributeException;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

/**
 * ForceCoordinateSystemFeatureReader provides a CoordinateReferenceSystem for FeatureTypes.
 *
 * 

ForceCoordinateSystemFeatureReader is a wrapper used to force GeometryAttributes to a user * supplied CoordinateReferenceSystem rather then the default supplied by the DataStore. * *

Example Use: * *


 * ForceCoordinateSystemFeatureReader reader =
 *     new ForceCoordinateSystemFeatureReader( originalReader, forceCS );
 *
 * CoordinateReferenceSystem originalCS =
 *     originalReader.getFeatureType().getDefaultGeometry().getCoordinateSystem();
 *
 * CoordinateReferenceSystem newCS =
 *     reader.getFeatureType().getDefaultGeometry().getCoordinateSystem();
 *
 * assertEquals( forceCS, newCS );
 * 
* * @author jgarnett, Refractions Research, Inc. * @author aaime * @author $Author: jive $ (last modification) * @version $Id$ */ public class ForceCoordinateSystemFeatureReader implements FeatureReader { protected FeatureReader reader; protected SimpleFeatureBuilder builder; /** Shortcut constructor that can be used if the new schema has already been computed */ ForceCoordinateSystemFeatureReader( FeatureReader reader, SimpleFeatureType schema) { this.reader = reader; this.builder = new SimpleFeatureBuilder(schema); } /** Builds a new ForceCoordinateSystemFeatureReader */ public ForceCoordinateSystemFeatureReader( FeatureReader reader, CoordinateReferenceSystem cs) throws SchemaException { this(reader, cs, false); } /** Builds a new ForceCoordinateSystemFeatureReader */ public ForceCoordinateSystemFeatureReader( FeatureReader reader, CoordinateReferenceSystem cs, boolean forceOnlyMissing) throws SchemaException { if (cs == null) { throw new NullPointerException("CoordinateSystem required"); } SimpleFeatureType type = reader.getFeatureType(); CoordinateReferenceSystem originalCs = type.getCoordinateReferenceSystem(); if (!cs.equals(originalCs)) { type = FeatureTypes.transform(type, cs, forceOnlyMissing); } this.builder = new SimpleFeatureBuilder(type); this.reader = reader; } /** @see org.geotools.data.FeatureReader#getFeatureType() */ public SimpleFeatureType getFeatureType() { if (reader == null) { throw new IllegalStateException("Reader has already been closed"); } if (builder == null) return reader.getFeatureType(); return builder.getFeatureType(); } /** @see org.geotools.data.FeatureReader#next() */ public SimpleFeature next() throws IOException, IllegalAttributeException, NoSuchElementException { if (reader == null) { throw new IllegalStateException("Reader has already been closed"); } SimpleFeature next = reader.next(); if (builder == null) return next; return SimpleFeatureBuilder.retype(next, builder); } /** @see org.geotools.data.FeatureReader#hasNext() */ public boolean hasNext() throws IOException { if (reader == null) { throw new IllegalStateException("Reader has already been closed"); } return reader.hasNext(); } /** @see org.geotools.data.FeatureReader#close() */ public void close() throws IOException { if (reader == null) { throw new IllegalStateException("Reader has already been closed"); } reader.close(); reader = null; builder = null; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy