Package edu.isi.karma.geospatial

Source Code of edu.isi.karma.geospatial.SpatialReferenceSystemTransformationUtil

/*******************************************************************************
* Copyright 2012 University of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This code was developed by the Information Integration Group as part
* of the Karma project at the Information Sciences Institute of the
* University of Southern California.  For more information, publications,
* and related projects, please see: http://www.isi.edu/integration
******************************************************************************/

package edu.isi.karma.geospatial;

import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import org.geotools.factory.Hints;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SpatialReferenceSystemTransformationUtil {
  private static final Logger logger = LoggerFactory
      .getLogger(SpatialReferenceSystemTransformationUtil.class);

  public SpatialReferenceSystemTransformationUtil() {

  }

  public static Geometry Transform(Geometry inGeom,
      CoordinateReferenceSystem sourceCRS,
      CoordinateReferenceSystem targetCRS) {
   
    Hints.putSystemDefault(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER,
        Boolean.TRUE);

    if(sourceCRS.equals(targetCRS))
      return inGeom;
   
    MathTransform transform = null;
   
    try {
      transform = CRS.findMathTransform(sourceCRS, targetCRS, true);
    } catch (FactoryException e) {
      logger.error("Cannot find a transformation!", e);
      return inGeom;
    }

    Geometry outGeom = null;
   
    try {
      outGeom = JTS.transform(inGeom, transform);
    } catch (MismatchedDimensionException e) {
      logger.error("Cannot perform the transformation!", e);
      return inGeom;
    } catch (TransformException e) {
      logger.error("Cannot perform the transformation!", e);
      return outGeom;
    }

    return outGeom;
  }

  public static String Transform(String inGeomWKT, String fromSRID,
      String toSRID) {
   
    Hints.putSystemDefault(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER,
        Boolean.TRUE);
   
    if(fromSRID.equals(toSRID))
      return inGeomWKT;
   
    WKTReader reader = new WKTReader();
    Geometry JTSGeometry;
    try {
      JTSGeometry = reader.read(inGeomWKT);
    } catch (ParseException e1) {
      logger.error("Cannot read the input WKT feature!");
      return inGeomWKT;
    }

    if (!fromSRID.contains(":"))
      fromSRID = "EPSG:" + fromSRID;
    if (!toSRID.contains(":"))
      toSRID = "EPSG:" + toSRID;

    CoordinateReferenceSystem sourceCRS = null;
    CoordinateReferenceSystem targetCRS = null;
    try {
      sourceCRS = CRS.decode(fromSRID, true);
      targetCRS = CRS.decode(toSRID, true);
    } catch (NoSuchAuthorityCodeException e) {
      logger.error("Cannot read SRID!", e);
      return inGeomWKT;
    } catch (FactoryException e) {
      logger.error("Cannot read SRID!", e);
      return inGeomWKT;
    }

    MathTransform transform = null;
    try {
      transform = CRS.findMathTransform(sourceCRS, targetCRS, true);
    } catch (FactoryException e) {
      logger.error("Cannot find a transformation!", e);
      return inGeomWKT;
    }

    Geometry outGeom = null;
    try {
      outGeom = JTS.transform(JTSGeometry, transform);
    } catch (MismatchedDimensionException e) {
      logger.error("Cannot perform the transformation!", e);
      return inGeomWKT;
    } catch (TransformException e) {
      logger.error("Cannot perform the transformation!", e);
      return inGeomWKT;
    }

    return outGeom.toText();
  }
}
TOP

Related Classes of edu.isi.karma.geospatial.SpatialReferenceSystemTransformationUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.