package com.revolsys.gis.jts;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import com.revolsys.gis.data.model.DataObject;
import com.vividsolutions.jts.algorithm.Angle;
import com.vividsolutions.jts.algorithm.CGAlgorithms;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateSequence;
import com.vividsolutions.jts.geom.CoordinateSequenceFactory;
import com.vividsolutions.jts.geom.CoordinateSequenceFilter;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryCollection;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineSegment;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.MultiLineString;
import com.vividsolutions.jts.geom.MultiPoint;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.PrecisionModel;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory;
import com.vividsolutions.jts.geom.impl.PackedCoordinateSequenceFactory;
import com.vividsolutions.jts.operation.linemerge.LineMerger;
public final class JtsGeometryUtil {
public static final String FEATURE_PROPERTY = "feature";
private JtsGeometryUtil() {
}
public static DataObject getGeometryFeature(final Geometry geometry) {
return (DataObject)getGeometryProperty(geometry, FEATURE_PROPERTY);
}
public static void setGeometryFeature(final Geometry geometry,
final DataObject feature) {
setGeometryProperty(geometry, FEATURE_PROPERTY, feature);
}
@SuppressWarnings("unchecked")
public static
final Geometry geometry, final String name) {
Map
return (T)map.get(name);
}
@SuppressWarnings("unchecked")
public static Map
final Geometry geometry) {
Object userData = geometry.getUserData();
if (userData instanceof Map) {
Map
return map;
}
return Collections.emptyMap();
}
@SuppressWarnings("unchecked")
public static void setGeometryProperty(final Geometry geometry,
final String name, final Object value) {
Object userData = geometry.getUserData();
if (!(userData instanceof Map)) {
userData = new TreeMap
}
public static Polygon createPolygon(final MultiLineString multiLine) {
GeometryFactory factory = multiLine.getFactory();
Coordinate[] coordinates = getMergeLine(multiLine).getCoordinates();
LinearRing linearRing = factory.createLinearRing(coordinates);
Polygon polygon = factory.createPolygon(linearRing, null);
return polygon;
}
public static LineString getMergeLine(final MultiLineString multiLineString) {
Collection
int numLines = lineStrings.size();
if (numLines == 1) {
return (LineString)lineStrings.iterator().next();
} else {
ret