/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-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.geometry.iso.primitive; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.geotools.geometry.GeometryBuilder; import org.geotools.geometry.iso.coordinate.GeometryFactoryImpl; import org.geotools.geometry.iso.coordinate.LineStringImpl; import org.geotools.geometry.iso.coordinate.PositionImpl; import org.geotools.geometry.iso.primitive.CurveImpl; import org.geotools.geometry.iso.primitive.PrimitiveFactoryImpl; import org.geotools.geometry.iso.primitive.RingImpl; import org.geotools.geometry.iso.primitive.SurfaceBoundaryImpl; import org.geotools.geometry.iso.primitive.SurfaceImpl; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.geometry.DirectPosition; import org.opengis.geometry.coordinate.Position; import org.opengis.geometry.primitive.Curve; import org.opengis.geometry.primitive.CurveSegment; import org.opengis.geometry.primitive.Ring; import org.opengis.geometry.primitive.Surface; public class Dimension2o5DTest extends TestCase { public void testMain() { GeometryBuilder builder = new GeometryBuilder(DefaultGeographicCRS.WGS84_3D); this._testCurve1(builder); this._testSurface(builder); } private void _testCurve1(GeometryBuilder builder) { CurveImpl curve1 = (CurveImpl) this._createCurve1(builder); this.printCurve(curve1); CurveImpl curve2 = (CurveImpl) this._createCurve2(builder); this.printCurve(curve2); // GeometryImpl g = (GeometryImpl) curve1.intersection(curve2); // //System.out.println("Intersection of curves: " + g); } private void printCurve(CurveImpl curve1) { //System.out.print("\n******************* CURVE"); //System.out.println("\n" + curve1); //System.out.println("\nCoordinate Dimension: " + curve1.getCoordinateDimension()); //System.out.println("\nDimension: " + curve1.getDimension(null)); ////System.out.println("\nDimension Model: " + curve1.getFeatGeometryFactory().getDimensionModel()); //System.out.println("Length of Curve is " + curve1.length()); //System.out.println("Envelope of the Curve is " + curve1.getEnvelope()); } private void _testSurface(GeometryBuilder builder) { SurfaceImpl surface = (SurfaceImpl) this._createSurface1(builder); //System.out.print("\n******************* SURFACE GENERATED BY SURFACEBOUNDARY"); //System.out.println("\n" + surface); //System.out.println("\n Coordinate Dimension: " + surface.getCoordinateDimension()); //System.out.println("\n Dimension: " + surface.getDimension(null)); ////System.out.println("\n Dimension Model: " + surface.getFeatGeometryFactory().getDimensionModel()); //System.out.println("\n Envelope: " + surface.getEnvelope()); } private Curve _createCurve1(GeometryBuilder builder) { GeometryFactoryImpl tCoordFactory = (GeometryFactoryImpl) builder.getGeometryFactory(); PrimitiveFactoryImpl tPrimFactory = (PrimitiveFactoryImpl) builder.getPrimitiveFactory(); PositionImpl p1 = new PositionImpl(tCoordFactory.createDirectPosition(new double[]{-50, 0, 0})); PositionImpl p2 = new PositionImpl(tCoordFactory.createDirectPosition(new double[]{-30, 30, 10})); PositionImpl p3 = new PositionImpl(tCoordFactory.createDirectPosition(new double[]{0, 50, 20})); PositionImpl p4 = new PositionImpl(tCoordFactory.createDirectPosition(new double[]{30, 30, 10})); PositionImpl p5 = new PositionImpl(tCoordFactory.createDirectPosition(new double[]{50, 0, 0})); LineStringImpl line1 = null; ArrayList<Position> positionList = new ArrayList<Position>(); positionList.add(p1); positionList.add(p2); positionList.add(p3); positionList.add(p4); positionList.add(p5); try { line1 = tCoordFactory.createLineString(positionList); } catch (IllegalArgumentException e) { //System.out.println(e); } /* Set parent curve for LineString */ ArrayList<CurveSegment> tLineList = new ArrayList<CurveSegment>(); tLineList.add(line1); // PrimitiveFactory.createCurve(List<CurveSegment>) CurveImpl curve1 = tPrimFactory.createCurve(tLineList); // Set curve for further LineString tests line1.setCurve(curve1); return curve1; } private Curve _createCurve2(GeometryBuilder builder) { GeometryFactoryImpl tCoordFactory = (GeometryFactoryImpl) builder.getGeometryFactory(); PrimitiveFactoryImpl tPrimFactory = (PrimitiveFactoryImpl) builder.getPrimitiveFactory(); PositionImpl p1 = new PositionImpl(tCoordFactory.createDirectPosition(new double[]{10, 0, 100})); PositionImpl p2 = new PositionImpl(tCoordFactory.createDirectPosition(new double[]{50, 30, 100})); LineStringImpl line1 = null; ArrayList<Position> positionList = new ArrayList<Position>(); positionList.add(p1); positionList.add(p2); try { line1 = tCoordFactory.createLineString(positionList); } catch (IllegalArgumentException e) { //System.out.println("e"); } /* Set parent curve for LineString */ ArrayList<CurveSegment> tLineList = new ArrayList<CurveSegment>(); tLineList.add(line1); // PrimitiveFactory.createCurve(List<CurveSegment>) CurveImpl curve1 = tPrimFactory.createCurve(tLineList); // Set curve for further LineString tests line1.setCurve(curve1); return curve1; } private Surface _createSurface1(GeometryBuilder builder) { GeometryFactoryImpl tCoordFactory = (GeometryFactoryImpl) builder.getGeometryFactory(); PrimitiveFactoryImpl tPrimFactory = (PrimitiveFactoryImpl) builder.getPrimitiveFactory(); List<DirectPosition> directPositionList = new ArrayList<DirectPosition>(); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {20, 10, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {40, 10, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {50, 40, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {30, 50, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {10, 30, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {20, 10, 100})); Ring exteriorRing = tPrimFactory.createRingByDirectPositions(directPositionList); List<Ring> interiors = new ArrayList<Ring>(); SurfaceBoundaryImpl surfaceBoundary1 = tPrimFactory.createSurfaceBoundary(exteriorRing, interiors ); Surface surface2 = tPrimFactory.createSurface(surfaceBoundary1); return surface2; } public Surface _createSurface2(GeometryBuilder builder) { GeometryFactoryImpl tCoordFactory = (GeometryFactoryImpl) builder.getGeometryFactory(); PrimitiveFactoryImpl tPrimFactory = (PrimitiveFactoryImpl) builder.getPrimitiveFactory(); List<DirectPosition> directPositionList = new ArrayList<DirectPosition>(); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {20, 10, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {40, 10, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {50, 40, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {30, 50, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {10, 30, 100})); directPositionList.add(tCoordFactory.createDirectPosition(new double[] {20, 10, 100})); Ring exteriorRing = tPrimFactory.createRingByDirectPositions(directPositionList); List<Ring> interiors = new ArrayList<Ring>(); SurfaceBoundaryImpl surfaceBoundary1 = tPrimFactory.createSurfaceBoundary(exteriorRing, interiors ); Surface surface2 = tPrimFactory.createSurface(surfaceBoundary1); return surface2; } }