Package org.geotools.geometry.iso.complex

Source Code of org.geotools.geometry.iso.complex.CompositeSurfaceImpl

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

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.geotools.geometry.iso.coordinate.EnvelopeImpl;
import org.geotools.geometry.iso.primitive.OrientableSurfaceImpl;
import org.opengis.geometry.DirectPosition;
import org.opengis.geometry.Envelope;
import org.opengis.geometry.complex.Complex;
import org.opengis.geometry.complex.CompositeSurface;
import org.opengis.geometry.primitive.OrientablePrimitive;
import org.opengis.geometry.primitive.OrientableSurface;
import org.opengis.geometry.primitive.Primitive;
import org.opengis.geometry.primitive.Surface;
import org.opengis.geometry.primitive.SurfaceBoundary;

/**
* A composite surface, CompositeSurface (Figure 29) shall be a Complex with all
* the geometric properties of a surface, and thus can be considered as a type
* of orientable surface (OrientableSurface). Essentially, a composite surface
* is a collection of oriented surfaces that join in pairs on common boundary
* curves and which, when considered as a whole, form a single surface.
*
* @author Jackson Roehrig & Sanjay Jena
*
*
*
*
*
* @source $URL$
*/
public class CompositeSurfaceImpl extends CompositeImpl<OrientableSurfaceImpl>
    implements CompositeSurface {
    private static final long serialVersionUID = 1764508224739439610L;


    /**
   * Generator The association role Composition::generator associates this
   * CompositeSurface to the primitive Surfaces and OrientableSurfaces in its
   * generating set, a list of the Surfaces that form the core of this
   * complex. CompositeSurface::generator : Set<OrientableSurface>
   *
   * NOTE To get a full representation of the elements in the Complex, the
   * Curves and Points on the boundary of the generator set of Surfaces would
   * be added to the curves in the generator list.
   * @param generator
   */
  public CompositeSurfaceImpl(List<? extends OrientableSurface> generator) {
    super(generator);
  }

//  /**
//   * The method <code>dimension</code> returns the inherent dimension of
//   * this Object, which is less than or equal to the coordinate dimension. The
//   * dimension of a collection of geometric objects is the largest dimension
//   * of any of its pieces. Points are 0-dimensional, curves are 1-dimensional,
//   * surfaces are 2-dimensional, and solids are 3-dimensional. Locally, the
//   * dimension of a geometric object at a point is the dimension of a local
//   * neighborhood of the point - that is the dimension of any coordinate
//   * neighborhood of the point. Dimension is unambiguously defined only for
//   * DirectPositions interior to this Object. If the passed DirectPosition2D
//   * is NULL, then the method returns the largest possible dimension for any
//   * DirectPosition2D in this Object.
//   *
//   * @param point
//   *            a <code>DirectPosition2D</code> value
//   * @return an <code>int</code> value
//   */
//  public int dimension(final DirectPositionImpl point) {
//    return 2;
//  }

  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.complex.ComplexImpl#getElements()
   */
//  public List<Primitive> getElements() {
//    return super.getElements();
//  }

  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.root.GeometryImpl#getBoundary()
   */
  public SurfaceBoundary getBoundary() {
    // 6.3.3 ComplexBoundary
    // The boundary operation for Complex objects shall return a
    // ComplexBoundary, which is a collection of primitives and a
    // Complex of dimension 1 less than the original object.
   
    // TODO SJ: Since the CompositeSurface only contains Surfaces:
    // Is the Boundary a collection of SurfaceBoundaries?
    // The result must be a Complex again, could it be a CompositeCurve which contains all (exterior and interior)Rings of the SurfaceBoundaries of the Surfaces which are contained by the CompositeSurface?
    return null;
  }

  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.complex.CompositeImpl#getGeneratorClass()
   */
  public Class getGeneratorClass() {
    return org.geotools.geometry.iso.primitive.OrientableSurfaceImpl.class;
  }

  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.complex.ComplexImpl#createBoundary()
   */
  public Set<Complex> createBoundary() {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.root.GeometryImpl#clone()
   */
  public CompositeSurfaceImpl clone() throws CloneNotSupportedException {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.complex.Composite#getGenerators()
   */
  public Set<OrientableSurface> getGenerators() {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.coordinate.root.Geometry#isSimple()
   */
  public boolean isSimple() {
    // TODO Auto-generated method stub
    return false;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.primitive.OrientableSurface#getComposite()
   */
  public CompositeSurface getComposite() {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.primitive.OrientablePrimitive#getOrientation()
   */
  public int getOrientation() {
    // TODO Auto-generated method stub
    return 0;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.primitive.OrientablePrimitive#getPrimitive()
   */
  public Surface getPrimitive() {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.primitive.Primitive#getContainedPrimitives()
   */
  public Set getContainedPrimitives() {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.primitive.Primitive#getContainingPrimitives()
   */
  public Set getContainingPrimitives() {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.primitive.Primitive#getComplexes()
   */
  public Set getComplexes() {
    // TODO Auto-generated method stub
    return null;
  }

  /* (non-Javadoc)
   * @see org.opengis.geometry.primitive.Primitive#getProxy()
   */
  public OrientablePrimitive[] getProxy() {
    // TODO Auto-generated method stub
    return null;
  }


  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.root.GeometryImpl#getDimension(org.opengis.geometry.coordinate.DirectPosition)
   */
  public int getDimension(DirectPosition point) {
    // TODO Auto-generated method stub
    return 2;
  }

  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.root.GeometryImpl#getEnvelope()
   */
  public Envelope getEnvelope() {
    // Test ok
    Collection<Primitive> tmpSurfaces = (Collection<Primitive>) this.getElements();

    Iterator<Primitive> surfIter = tmpSurfaces.iterator();
   
    if (!surfIter.hasNext())
      return null;
   
    Surface actSurf = (Surface) surfIter.next();
    /* Use envelope of the first Curve as base for the new envelope */
    EnvelopeImpl rEnv = new EnvelopeImpl(actSurf.getEnvelope());
    //EnvelopeImpl rEnv = this.getFeatGeometryFactory().getGeometryFactoryImpl().createEnvelope(actSurf.getEnvelope());
   
    /* Add envelopes of the other Curves */
    while (surfIter.hasNext()) {
      actSurf = (Surface) surfIter.next();
      rEnv.expand(actSurf.getEnvelope());
    }

    return rEnv;
  }
 

  /* (non-Javadoc)
   * @see org.geotools.geometry.featgeom.root.GeometryImpl#getRepresentativePoint()
   */
  public DirectPosition getRepresentativePoint() {
    // Return the representative point of the first surface in this composite
    return this.elements.get(0).getRepresentativePoint();
  }

}
TOP

Related Classes of org.geotools.geometry.iso.complex.CompositeSurfaceImpl

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.