/* * RobustGeometryProperties.java * * Created on 05 March 2002, 17:59 */ package uk.ac.leeds.ccg.andyt.jts; //package org.geotools.algorithms; import com.vividsolutions.jts.geom.*; import org.geotools.shapefile.*; /** * * @author andyt */ public class RobustGeometryProperties1 { //public class RobustGeometryProperties implements org.geotools.algorithms.GeometryProperties { /** * For storing the area of the geometry */ private double area; /** * For storing the perimeter of the geometry */ private double perimeter; /** * Creates a new instance of RobustGeometryProperties * @param shapefile1 - the org.geotools.shapefile.Shapefile for which the * geometry properties are calulated */ public RobustGeometryProperties1(Shapefile shapefile1) { GeometryFactory geometryFactory = new GeometryFactory(); // Load Shapefile into a JTS GeometryCollection GeometryCollection geometryCollection1 = geometryFactory.createGeometryCollection(null); try { geometryCollection1 = shapefile1.read(geometryFactory); } catch (java.io.IOException ioe1) { System.out.println(ioe1); System.exit(0); } catch (org.geotools.shapefile.ShapefileException se1) { System.out.println(se1); System.exit(0); } catch (com.vividsolutions.jts.geom.TopologyException te1) { System.out.println(te1); System.exit(0); } RobustGeometryProperties dummy = new RobustGeometryProperties(geometryCollection1); setArea(dummy.getArea()); setPerimeter(dummy.getPerimeter()); } /** * Creates a new instance of RobustGeometryProperties * @param geometryCollection1 - the GeometryCollection for which the geometry * properties are calulated */ public RobustGeometryProperties1(GeometryCollection geometryCollection1) { double area = 0.0d; double perimeter = 0.0d; int numberOfGeometries1 = geometryCollection1.getNumGeometries(); // Go through geometryCollection1 and pull out component geometries and // collate geometry properties RobustGeometryProperties robustGeometryProperties1; Geometry geometry1; for (int i = 0; i < numberOfGeometries1; i ++) { geometry1 = geometryCollection1.getGeometryN(i); if (geometry1 instanceof GeometryCollection) { robustGeometryProperties1 = new RobustGeometryProperties((GeometryCollection) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else { robustGeometryProperties1 = new RobustGeometryProperties(geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } } setArea(area); setPerimeter(perimeter); } /** * Creates a new instance of RobustGeometryProperties * @param geometry1 - the Geometry for which the geometry properties are * calulated */ public RobustGeometryProperties1(Geometry geometry1) { double area = 0.0d; double perimeter = 0.0d; RobustGeometryProperties robustGeometryProperties1; if (geometry1 instanceof GeometryCollection) { robustGeometryProperties1 = new RobustGeometryProperties((GeometryCollection) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else if (geometry1 instanceof MultiPolygon) { robustGeometryProperties1 = new RobustGeometryProperties((MultiPolygon) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else if (geometry1 instanceof Polygon) { robustGeometryProperties1 = new RobustGeometryProperties((Polygon) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else if (geometry1 instanceof MultiLineString) { robustGeometryProperties1 = new RobustGeometryProperties((MultiLineString) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else if (geometry1 instanceof LineString) { robustGeometryProperties1 = new RobustGeometryProperties((LineString) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else if (geometry1 instanceof MultiPoint) { robustGeometryProperties1 = new RobustGeometryProperties((MultiPoint) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else if (geometry1 instanceof Point) { robustGeometryProperties1 = new RobustGeometryProperties((Point) geometry1); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } else { System.out.println("Unrecognised Geometry in RobustGeometryProperties(Geometry("+geometry1.toString()+"))"); System.exit(0); } setArea(area); setPerimeter(perimeter); } /** * Creates a new instance of RobustGeometryProperties * @param multiPolygon1 - the MultiPolygon for which the geometry properties * are calulated */ public RobustGeometryProperties1(MultiPolygon multiPolygon1) { double area = 0.0d; double perimeter = 0.0d; RobustGeometryProperties robustGeometryProperties1; int numberOfGeometries1 = multiPolygon1.getNumGeometries(); for (int i = 0; i < numberOfGeometries1; i ++) { robustGeometryProperties1 = new RobustGeometryProperties(multiPolygon1.getGeometryN(i)); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } setArea(area); setPerimeter(perimeter); } /** * Creates a new instance of RobustGeometryProperties * @param polygon1 - the Polygon for which the geometry properties are * calulated */ public RobustGeometryProperties1(Polygon polygon1) { double area = 0.0d; double perimeter = 0.0d; LineString lineString1 = polygon1.getExteriorRing(); RobustGeometryProperties robustGeometryProperties1 = new RobustGeometryProperties(lineString1); double externalPerimeter = robustGeometryProperties1.getPerimeter(); int numberOfHoles = polygon1.getNumInteriorRing(); double internalPerimeter = 0.0d; for (int i = 0; i < numberOfHoles; i ++) { robustGeometryProperties1 = new RobustGeometryProperties(polygon1.getInteriorRingN(i)); internalPerimeter += robustGeometryProperties1.getPerimeter(); } perimeter = externalPerimeter + internalPerimeter; setArea(area); setPerimeter(perimeter); } /** * Creates a new instance of RobustGeometryProperties * @param multiLineString1 - the MultiLineString for which the geometry * properties are calulated */ public RobustGeometryProperties1(MultiLineString multiLineString1) { double area = 0.0d; double perimeter = 0.0d; RobustGeometryProperties robustGeometryProperties1; int numberOfGeometries1 = multiLineString1.getNumGeometries(); for (int i = 0; i < numberOfGeometries1; i ++) { robustGeometryProperties1 = new RobustGeometryProperties(multiLineString1.getGeometryN(i)); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } setArea(area); setPerimeter(perimeter); } /** * Creates a new instance of RobustGeometryProperties * @param lineString1 - the LineString for which the geometry properties are * calulated */ public RobustGeometryProperties1(LineString lineString1) { double area = 0.0d; double perimeter = 0.0d; int numberOfPoints1 = lineString1.getNumPoints(); Coordinate[] coordinates1 = lineString1.getCoordinates(); for (int i = 0; i < (numberOfPoints1 - 1); i ++) { perimeter += coordinates1[i].distance(coordinates1[i + 1]); } setArea(area); setPerimeter(perimeter); } /** * Creates a new instance of RobustGeometryProperties * @param multiPoint1 - the MultiPoint for which the geometry properties are * calulated */ public RobustGeometryProperties1(MultiPoint multiPoint1) { double area = 0.0d; double perimeter = 0.0d; RobustGeometryProperties robustGeometryProperties1; int numberOfGeometries1 = multiPoint1.getNumGeometries(); for (int i = 0; i < numberOfGeometries1; i ++) { robustGeometryProperties1 = new RobustGeometryProperties(multiPoint1.getGeometryN(i)); area += robustGeometryProperties1.getArea(); perimeter += robustGeometryProperties1.getPerimeter(); } setArea(area); setPerimeter(perimeter); } /** * Creates a new instance of RobustGeometryProperties * @param point1 - the Point for which the geometry properties are calulated */ public RobustGeometryProperties1(Point point1) { double area = 0.0d; double perimeter = 0.0d; setArea(area); setPerimeter(perimeter); } /** * Returns the area of the geometry */ public double getArea() {return this.area;} /** * Sets area */ protected void setArea(double area) {this.area = area;} /** * Returns the perimeter of the geometry */ public double getPerimeter() {return this.perimeter;} /** * Returns the perimeter of the geometry */ protected void setPerimeter(double perimeter) {this.perimeter = perimeter;} }