开源社区里利用JTS库进行空间处理的代码参考(一)

2014-11-24 07:56:16 · 作者: · 浏览: 0

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 T getGeometryProperty(
final Geometry geometry, final String name) {
Map map = getGeometryProperties(geometry);
return (T)map.get(name);
}

@SuppressWarnings("unchecked")
public static Map getGeometryProperties(
final Geometry geometry) {
Object userData = geometry.getUserData();
if (userData instanceof Map) {
Map map = (Map)userData;
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();
geometry.setUserData(userData);
}
Map map = (Map)userData;
map.put(name, value);

}

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 lineStrings = getMergedLines(multiLineString);
int numLines = lineStrings.size();
if (numLines == 1) {
return (LineString)lineStrings.iterator().next();
} else {
ret