/*
* GeoTools - The Open Source Java GIS Tookit
* http://geotools.org
*
* (C) 2006-2008, Open Source Geospatial Foundation (OSGeo)
*
* This file is hereby placed into the Public Domain. This means anyone is
* free to do whatever they wish with this file. Use it well and enjoy!
*/
package org.geotools.demo.geometry;
import java.util.ArrayList;
import java.util.List;
import org.geotools.factory.Hints;
import org.geotools.geometry.GeometryBuilder;
import org.geotools.geometry.GeometryFactoryFinder;
import org.geotools.geometry.text.WKTParser;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.opengis.geometry.DirectPosition;
import org.opengis.geometry.Envelope;
import org.opengis.geometry.PositionFactory;
import org.opengis.geometry.aggregate.AggregateFactory;
import org.opengis.geometry.coordinate.GeometryFactory;
import org.opengis.geometry.coordinate.LineString;
import org.opengis.geometry.coordinate.Position;
import org.opengis.geometry.primitive.Curve;
import org.opengis.geometry.primitive.CurveSegment;
import org.opengis.geometry.primitive.OrientableCurve;
import org.opengis.geometry.primitive.Point;
import org.opengis.geometry.primitive.PrimitiveFactory;
import org.opengis.geometry.primitive.Ring;
import org.opengis.geometry.primitive.Surface;
import org.opengis.geometry.primitive.SurfaceBoundary;
public class GeometryExample {
public void createEnvWithFactories() {
Hints hints = new Hints( Hints.CRS, DefaultGeographicCRS.WGS84 );
PositionFactory positionFactory = GeometryFactoryFinder.getPositionFactory( hints );
GeometryFactory geometryFactory = GeometryFactoryFinder.getGeometryFactory( hints );
DirectPosition upper = positionFactory.createDirectPosition(new double[]{-180,-90});
DirectPosition lower = positionFactory.createDirectPosition(new double[]{180,90});
Envelope envelope = geometryFactory.createEnvelope( upper, lower );
System.out.println(envelope);
}
public void createEnvWithGB() {
GeometryBuilder builder = new GeometryBuilder( DefaultGeographicCRS.WGS84 );
DirectPosition upper = builder.createDirectPosition(new double[]{-180,-90});
DirectPosition lower = builder.createDirectPosition(new double[]{180,90});
Envelope envelope = builder.createEnvelope( upper, lower );
System.out.println(envelope);
}
public void createCurveWithGB(){
GeometryBuilder builder = new GeometryBuilder( DefaultGeographicCRS.WGS84 );
// create directpositions
DirectPosition start = builder.createDirectPosition(new double[]{ 48.44, -123.37 });
DirectPosition middle = builder.createDirectPosition(new double[]{ 47, -122 });
DirectPosition end = builder.createDirectPosition(new double[]{ 46.5, -121.5 });
// add directpositions to a list
ArrayList<Position> positions = new ArrayList<Position>();
positions .add(start);
positions.add(middle);
positions.add(end);
// create linestring from directpositions
LineString line = builder.createLineString(positions);
// create curvesegments from line
ArrayList<CurveSegment> segs = new ArrayList<CurveSegment>();
segs.add(line);
// create curve
Curve curve = builder.createCurve(segs);
System.out.println( curve );
}
public void createSurfaceWithGB() {
// create GB
GeometryBuilder builder = new GeometryBuilder( DefaultGeographicCRS.WGS84 );
// create a list of connected positions
List<Position> dps = new ArrayList<Position>();
dps.add(builder.createDirectPosition( new double[] {20, 10} ));
dps.add(builder.createDirectPosition( new double[] {40, 10} ));
dps.add(builder.createDirectPosition( new double[] {50, 40} ));
dps.add(builder.createDirectPosition( new double[] {30, 50} ));
dps.add(builder.createDirectPosition( new double[] {10, 30} ));
dps.add(builder.createDirectPosition( new double[] {20, 10} ));
// create linestring from directpositions
LineString line = builder.createLineString(dps);
// create curvesegments from line
ArrayList<CurveSegment> segs = new ArrayList<CurveSegment>();
segs.add(line);
// Create list of OrientableCurves that make up the surface
OrientableCurve curve = builder.createCurve(segs);
List<OrientableCurve> orientableCurves = new ArrayList<OrientableCurve>();
orientableCurves.add(curve);
// create the interior ring and a list of empty interior rings (holes)
Ring extRing = builder.createRing(orientableCurves);
List<Ring> intRings = new ArrayList<Ring>();
// create the surfaceboundary from the rings
SurfaceBoundary sb = builder.createSurfaceBoundary(extRing, intRings);
// create the surface
Surface surface = builder.createSurface(sb);
System.out.println( surface );
}
public void createSurfaceWithFactory() {
// create factories
Hints hints = new Hints( Hints.CRS, DefaultGeographicCRS.WGS84 );
PositionFactory posF = GeometryFactoryFinder.getPositionFactory(hints);
GeometryFactory geomF = GeometryFactoryFinder.getGeometryFactory(hints);
PrimitiveFactory primF = GeometryFactoryFinder.getPrimitiveFactory(hints);
// create a list of connected positions
List<Position> dps = new ArrayList<Position>();
dps.add(posF.createDirectPosition( new double[] {20, 10} ));
dps.add(posF.createDirectPosition( new double[] {40, 10} ));
dps.add(posF.createDirectPosition( new double[] {50, 40} ));
dps.add(posF.createDirectPosition( new double[] {30, 50} ));
dps.add(posF.createDirectPosition( new double[] {10, 30} ));
dps.add(posF.createDirectPosition( new double[] {20, 10} ));
// create linestring from directpositions
LineString line = geomF.createLineString(dps);
// create curvesegments from line
ArrayList<CurveSegment> segs = new ArrayList<CurveSegment>();
segs.add(line);
// Create list of OrientableCurves that make up the surface
OrientableCurve curve = primF.createCurve(segs);
List<OrientableCurve> orientableCurves = new ArrayList<OrientableCurve>();
orientableCurves.add(curve);
// create the interior ring and a list of empty interior rings (holes)
Ring extRing = primF.createRing(orientableCurves);
List<Ring> intRings = new ArrayList<Ring>();
// create the surfaceboundary from the rings
SurfaceBoundary sb = primF.createSurfaceBoundary(extRing, intRings);
// create the surface
Surface surface = primF.createSurface(sb);
System.out.println( surface );
}
public void createPointWithGB(){
GeometryBuilder builder = new GeometryBuilder( DefaultGeographicCRS.WGS84 );
Point point = builder.createPoint( 48.44, -123.37 );
System.out.println( point );
}
public void createPointWithFactory(){
Hints hints = new Hints( Hints.CRS, DefaultGeographicCRS.WGS84 );
PositionFactory positionFactory = GeometryFactoryFinder.getPositionFactory( hints );
PrimitiveFactory primitiveFactory = GeometryFactoryFinder.getPrimitiveFactory( hints );
DirectPosition here = positionFactory.createDirectPosition( new double[]{48.44, -123.37} );
Point point1 = primitiveFactory.createPoint( here );
System.out.println( point1 );
Point point2 = primitiveFactory.createPoint( new double[]{48.44, -123.37} );
System.out.println( point2 );
}
public void createPointWithWKT() throws Exception {
Hints hints = new Hints( Hints.CRS, DefaultGeographicCRS.WGS84 );
PositionFactory positionFactory = GeometryFactoryFinder.getPositionFactory(hints);
GeometryFactory geometryFactory = GeometryFactoryFinder.getGeometryFactory(hints);
PrimitiveFactory primitiveFactory = GeometryFactoryFinder.getPrimitiveFactory(hints);
AggregateFactory aggregateFactory = GeometryFactoryFinder.getAggregateFactory(hints);
WKTParser parser = new WKTParser( geometryFactory, primitiveFactory, positionFactory, aggregateFactory );
Point point = (Point) parser.parse("POINT( 48.44 -123.37)");
System.out.println( point );
}
public static void main( String args[] ) throws Exception {
GeometryExample example = new GeometryExample();
example.createPointWithGB();
example.createPointWithFactory();
example.createPointWithWKT();
example.createCurveWithGB();
example.createSurfaceWithGB();
example.createSurfaceWithFactory();
}
}