Polygon.java
package org.cugos.wkg;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* A Polygon is a Surface made up of an outer LinearRing and zero or more inner LinearRings.
* @author Jared Erickson
*/
public class Polygon extends Surface {
/**
* The outer LinearRing
*/
private final LinearRing outerLinearRing;
/**
* The List of inner LinearRings
*/
private final List<LinearRing> innerLinearRings;
/**
* Create a new Polygon
* @param outerLinearRing The outer LinearRing
* @param innerLinearRings The List of inner LinearRings
* @param dimension The Dimension
*/
public Polygon(LinearRing outerLinearRing, List<LinearRing> innerLinearRings, Dimension dimension) {
this(outerLinearRing, innerLinearRings, dimension, null);
}
/**
* Create a new Polygon
* @param outerLinearRing The outer LinearRing
* @param innerLinearRings The List of inner LinearRings
* @param dimension The Dimension
* @param srid The SRID
*/
public Polygon(LinearRing outerLinearRing, List<LinearRing> innerLinearRings, Dimension dimension, String srid) {
super(dimension, srid);
this.outerLinearRing = outerLinearRing;
this.innerLinearRings = Collections.unmodifiableList(innerLinearRings);
}
/**
* Create a new Polygon with only an outer ring
* @param outerLinearRing The outer LinearRing
* @param dimension The Dimension
*/
public Polygon(LinearRing outerLinearRing, Dimension dimension) {
this(outerLinearRing, new ArrayList<LinearRing>(), dimension);
}
/**
* Create a new Polygon with only an outer ring
* @param outerLinearRing The outer LinearRing
* @param dimension The Dimension
* @param srid The SRID
*/
public Polygon(LinearRing outerLinearRing, Dimension dimension, String srid) {
this(outerLinearRing, new ArrayList<LinearRing>(), dimension, srid);
}
/**
* Get the outer LinearRing
* @return The outer LinearRing
*/
public LinearRing getOuterLinearRing() {
return outerLinearRing;
}
/**
* Get the List of inner LinearRings
* @return The List of inner LinearRings
*/
public List<LinearRing> getInnerLinearRings() {
return innerLinearRings;
}
@Override
public boolean isEmpty() {
return outerLinearRing == null | outerLinearRing.isEmpty();
}
@Override
public int getNumberOfCoordinates() {
int numberOfCoordinates = outerLinearRing.getNumberOfCoordinates();
for(LinearRing linearRing : innerLinearRings) {
numberOfCoordinates += linearRing.getNumberOfCoordinates();
}
return numberOfCoordinates;
}
@Override
public List<Coordinate> getCoordinates() {
List<Coordinate> coordinates = new ArrayList<Coordinate>();
coordinates.addAll(outerLinearRing.getCoordinates());
for(LinearRing linearRing : innerLinearRings) {
coordinates.addAll(linearRing.getCoordinates());
}
return Collections.unmodifiableList(coordinates);
}
/**
* Create an empty Polygon
* @return An empty Polygon
*/
public static Polygon createEmpty() {
return new Polygon(LinearRing.createEmpty(), new ArrayList<LinearRing>(), Dimension.Two, null);
}
}