use of org.opengis.geometry.primitive.Ring in project geotoolkit by Geomatys.
the class GeometryParser method readPolygonText.
/**
* Creates a <code>SurfaceBoundary</code> using the next token in the stream.
*
* @param tokenizer tokenizer over a stream of text in Well-known Text
* format. The next tokens must form a <Polygon Text>.
* @return a <code>Surface</code> specified by the vertices in the stream
* @throws ParseException if the coordinates used to create the <code>Polygon</code>
* shell and holes do not form closed linestrings, or if an unexpected
* token was encountered.
* @throws IOException if an I/O error occurs
*/
private Surface readPolygonText(final StreamTokenizer tokenizer) throws IOException, ParseException {
String nextToken = getNextEmptyOrOpener(tokenizer);
if (nextToken.equals(EMPTY)) {
return null;
}
Curve curve = readLinearRingText(tokenizer);
List<OrientableCurve> curveList = Collections.singletonList((OrientableCurve) curve);
Ring shell = primitiveFactory.createRing(curveList);
// Ring shell = readLinearRingText(tokenizer);
List<Ring> holes = new ArrayList<Ring>();
nextToken = getNextCloserOrComma(tokenizer);
while (nextToken.equals(COMMA)) {
Curve holecurve = readLinearRingText(tokenizer);
List<OrientableCurve> holeList = Collections.singletonList((OrientableCurve) holecurve);
Ring hole = primitiveFactory.createRing(holeList);
// Ring hole = readLinearRingText(tokenizer);
holes.add(hole);
nextToken = getNextCloserOrComma(tokenizer);
}
SurfaceBoundary sb = primitiveFactory.createSurfaceBoundary(shell, holes);
return primitiveFactory.createSurface(sb);
}
use of org.opengis.geometry.primitive.Ring in project geotoolkit by Geomatys.
the class GeometryUtils method createSurfaceBoundary.
private static SurfaceBoundary createSurfaceBoundary(final PrimitiveFactory primitiveFactory, final DirectPosition[] exteriorRingPoints, final DirectPosition[][] interiorRingsPoints) {
final Ring exteriorRing = createRing(primitiveFactory, exteriorRingPoints);
final List interiorRingList = interiorRingsPoints.length == 0 ? Collections.EMPTY_LIST : new ArrayList();
for (int i = 0; i < interiorRingsPoints.length; i++) {
interiorRingList.add(createRing(primitiveFactory, interiorRingsPoints[i]));
}
final SurfaceBoundary surfaceBoundary = primitiveFactory.createSurfaceBoundary(exteriorRing, interiorRingList);
return surfaceBoundary;
}
use of org.opengis.geometry.primitive.Ring in project geotoolkit by Geomatys.
the class GeometryUtils method createRing.
private static Ring createRing(final PrimitiveFactory primitiveFactory, final DirectPosition[] points) {
final List curveList = Collections.singletonList(createCurve(primitiveFactory, points));
final Ring ring = primitiveFactory.createRing(curveList);
return ring;
}
use of org.opengis.geometry.primitive.Ring in project geotoolkit by Geomatys.
the class GeometryUtils method getExteriorDirectPositions.
public static DirectPosition[] getExteriorDirectPositions(final Polygon polygon) {
final SurfaceBoundary surfaceBoundary = polygon.getBoundary();
final Ring exteriorRing = surfaceBoundary.getExterior();
return GeometryUtils.getDirectPositions(exteriorRing);
}
use of org.opengis.geometry.primitive.Ring in project geotoolkit by Geomatys.
the class JTSUtils method linearRingToRing.
public static Ring linearRingToRing(final org.locationtech.jts.geom.LineString jtsLinearRing, final CoordinateReferenceSystem crs) {
int numPoints = jtsLinearRing.getNumPoints();
if (numPoints != 0 && !jtsLinearRing.getCoordinateN(0).equals(jtsLinearRing.getCoordinateN(numPoints - 1))) {
throw new IllegalArgumentException("LineString must be a ring");
}
// FactoryFinder.getPrimitiveFactory(hints);
PrimitiveFactory pf = new JTSPrimitiveFactory(crs);
// FactoryFinder.getGeometryFactory(hints);
GeometryFactory gf = new JTSGeometryFactory(crs);
LineString ls = gf.createLineString(new ArrayList());
List pointList = ls.getControlPoints();
for (int i = 0; i < numPoints; i++) {
pointList.add(coordinateToDirectPosition(jtsLinearRing.getCoordinateN(i), crs));
}
Curve curve = pf.createCurve(new ArrayList());
// Cast below can be removed when Types will be allowed to abandon Java 1.4 support.
((List) curve.getSegments()).add(ls);
Ring result = pf.createRing(new ArrayList());
// Cast below can be removed when Types will be allowed to abandon Java 1.4 support.
((List) result.getGenerators()).add(curve);
return result;
}
Aggregations