Package org.geotools.data.h2

Source Code of org.geotools.data.h2.JTS

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2009, 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.h2;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.InputStreamInStream;
import com.vividsolutions.jts.io.OutputStreamOutStream;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKBReader;
import com.vividsolutions.jts.io.WKBWriter;
import com.vividsolutions.jts.io.WKTReader;

/**
* Static collection of JTS operations.
*
* @author David Blasby, The Open Planning Project, dblasby@openplans.org
* @author Justin Deoliveira, The Open Planning Project, jdeolive@openplans.org
*
*
*
*
* @source $URL$
*/
public class JTS {
   
    /**
     * Returns the current GeoTools version.
     */
    public static String GeoToolsVersion() {
        return "2.6-SNAPSHOT";
    }
   
    /**
     * Returns the Well Known Text of the geometry.
     */
    public static String AsWKT( byte[] wkb ) {
        if ( wkb == null ) {
            return null;
        }
       
        return fromWKB(wkb).toText();
    }

    /**
     * Returns the text representation of the envelope of the geometry.
     */
    public static String EnvelopeAsText( byte[] wkb ) {
        Envelope e = Envelope( wkb );
        if ( e != null ) {
            return e.toString();
        }
       
        return null;
    }
   
    /**
     * Reads a geometry from its well known text representation, specifying an
     * srid.
     *
     * @param wkt The well known text of the geometry.
     * @param srid The srid of the geometry
     *
     * @return An array of bytes representing the geometry.
     */
    public static byte[] GeomFromText(String wkt, int srid) {
        if ( wkt == null ) {
            return null;
        }
        WKTReader reader = new WKTReader();
        try {
            Geometry g = reader.read( wkt );
            g.setSRID(srid);
           
            return toWKB( g );
        }
        catch (ParseException e) {
            throw new RuntimeException( e );
        }
    }
   
    public static byte[] GeomFromWKB( byte[] wkb ) {
        return wkb;
    }
   
    /**
     * Returns the spatial reference identifier for the geometry.
     * <p>
     * This method will return -1 if <tt>wkb</tt> is <code>null</code>.
     * </p>
     * @param wkb The geometry.
     *
     * @return The srid.
     */
    public static int GetSRID( byte[] wkb ) {
        if ( wkb == null ) {
            return -1;
        }
        return fromWKB(wkb).getSRID();
    }
   
    /**
     * Returns the envelope for a geometry.
     * <p>
     * This method will return an "null" envelope ({@link Envelope#setToNull()})
     * if <tt>wkb</tt> is <code>null</code>.
     * </p>
     * @param wkb The geometry.
     * @return The envelope of the geometry.
     */
    public static Envelope Envelope( byte[] wkb ) {
        if ( wkb == null ) {
            Envelope e = new Envelope();
            e.setToNull();
            return e;
        }
       
        return fromWKB(wkb).getEnvelopeInternal();
    }
   
    /**
     * Returns the type of the geometry as a string. Eg: 'LINESTRING', 'POLYGON',
     * 'MULTIPOINT', etc.
     * <p>
     * This method returns <code>null</code> when <tt>wkb</tt> is <code>null</code>.
     * </p>
     * @param wkb The geometry.
     */
    public static String GeometryType( byte[] wkb ) {
        if ( wkb == null ) {
            return null;
        }
       
        Geometry g = fromWKB( wkb );
        return g != null ? g.getGeometryType().toUpperCase() : null;
    }
   
    private static Geometry fromWKB( byte[] wkb ) {
       
        try {
            ByteArrayInputStream bytes =
                new ByteArrayInputStream( wkb, 0, wkb.length-4 );

            //read the geometry
            Geometry g = new WKBReader().read( new InputStreamInStream( bytes ) );
           
            //read the srid
            int srid = 0;
            srid |= wkb[wkb.length-4] & 0xFF;
            srid <<= 8;
            srid |= wkb[wkb.length-3] & 0xFF;
            srid <<= 8;
            srid |= wkb[wkb.length-2] & 0xFF;
            srid <<= 8;
            srid |= wkb[wkb.length-1] & 0xFF;
            g.setSRID(srid);
           
            return g;
           
        }
        catch( Exception e ) {
            throw new RuntimeException( e );
        }
    }
   
    private static byte[] toWKB( Geometry g ) {
        try {
            WKBWriter w = new WKBWriter();
           
            //write the geometry
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            w.write( g , new OutputStreamOutStream( bytes ) );
  
            //supplement it with the srid
            int srid = g.getSRID();
            bytes.write( (byte)(srid >>> 24) );
            bytes.write( (byte)(srid >> 16 & 0xff) );
            bytes.write( (byte)(srid >> 8 & 0xff) );
            bytes.write( (byte)(srid & 0xff) );
           
            return bytes.toByteArray();
        }
        catch (IOException e) {
            throw new RuntimeException( e );
        }
    }
//   
//   
//    /**
//     * Converts a well-known text string to a geometry.
//     */
//    public static Geometry geometryFromText(String wkt) {
//        WKTReader wktreader = new WKTReader();
//
//        try {
//            return wktreader.read(wkt);
//        }
//        catch (Exception e) {
//            throw (IllegalArgumentException) new IllegalArgumentException("bad wkt").initCause( e );
//        }
//    }
//   
//    /**
//     * Converts a sequence sequence of bytes into a geometry.
//     */
//    public static Geometry geometryFromBytes(byte[] bytes) {
//        try {
//            return (Geometry) new ObjectInputStream( new ByteArrayInputStream( bytes ) ).readObject();
//        }
//        catch ( Exception e ) {
//            throw (IllegalArgumentException) new IllegalArgumentException( "bad bytes" ).initCause( e );
//        }
//    }
//   
//    /**
//     * Calculates the bounding box of a geometry.
//     * <p>
//     * {@link Geometry#getUserData()} is checked for an instance of
//     * {@link CoordinateReferenceSystem} and set on the envelope if it exists.
//     * </p>
//     */
//    public static ReferencedEnvelope extent( Geometry g ) {
//        Envelope e = g.getEnvelopeInternal();
//        if ( g.getUserData() instanceof CoordinateReferenceSystem ) {
//            return new ReferencedEnvelope(e,(CoordinateReferenceSystem) g.getUserData());
//        }
//       
//        return new ReferencedEnvelope(e,null);
//    }
//
//    public static ReferencedEnvelope extentB( byte[] bytes ) {
//        return extent( geometryFromBytes( bytes ) );
//    }
//   
//  
//    public static Geometry setSRID( byte[] bytes, int srid ) {
//        Geometry g = geometryFromBytes(bytes);
//        g.setUserData(parseSRID(srid));
//        return g;
//    }
//   
//    public static int getSRID( byte[] bytes ) {
//        Geometry g = geometryFromBytes(bytes);
//        CoordinateReferenceSystem crs = (CoordinateReferenceSystem) g.getUserData();
//        if ( crs != null ) {
//            //TODO: factor this out into geotools utility method
//            for (Iterator i = crs.getIdentifiers().iterator(); i.hasNext();) {
//                Identifier id = (Identifier) i.next();
//
//                //return "EPSG:" + id.getCode();
//                if ((id.getAuthority() != null)
//                        && id.getAuthority().getTitle().equals(Citations.EPSG.getTitle())) {
//                    return Integer.parseInt(id.getCode());
//                }
//            }
//        }
//       
//        return -1;
//    }
//   
//   
////    public static ReferencedEnvelope setSRID( ReferencedEnvelope box, int srid ) {
////        return new ReferencedEnvelope( box, parseSRID( srid ) );
////    }
//
// 
//    private static CoordinateReferenceSystem parseSRID( int srid ) {
//        try {
//            return CRS.decode("epsg:" + srid);
//        }
//        catch (Exception e) {
//            throw new RuntimeException("Could not parse srid: " + srid );
//        }
//    }
}
TOP

Related Classes of org.geotools.data.h2.JTS

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.