/*
* Copyright (c) 2016 Vivid Solutions.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v. 1.0 which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
*
* http://www.eclipse.org/org/documents/edl-v10.php.
*/
package test.jts.perf.operation.buffer;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Polygonal;
import org.locationtech.jts.geom.PrecisionModel;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.operation.buffer.BufferParameters;
import org.locationtech.jts.operation.buffer.OffsetCurveBuilder;
/**
* Tests self-snapping issues
*
* @version 1.7
*/
public class OffsetCurveCorrectnessTest
{
private PrecisionModel precisionModel = new PrecisionModel();
private GeometryFactory geometryFactory = new GeometryFactory(precisionModel, 0);
WKTReader rdr = new WKTReader(geometryFactory);
public static void main(String args[]) {
try {
(new OffsetCurveCorrectnessTest()).run7();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public OffsetCurveCorrectnessTest() { }
void run7()
throws Exception
{
// buffer fails
String wkt = "MULTILINESTRING ((1335558.59524 631743.01449, 1335572.28215 631775.89056, 1335573.2578018496 631782.1915185435), (1335573.2578018496 631782.1915185435, 1335576.62035 631803.90754), (1335558.59524 631743.01449, 1335573.2578018496 631782.1915185435), (1335573.2578018496 631782.1915185435, 1335580.70187 631802.08139))";
Geometry g = rdr.read(wkt);
Geometry curve = bufferOffsetCurve(g, 15);
System.out.println(curve);
//assert(curve.isValid());
}
public static Geometry bufferOffsetCurve(Geometry g, double distance)
{
OffsetCurveBuilder ocb = new OffsetCurveBuilder(
g.getFactory().getPrecisionModel(),
new BufferParameters());
Coordinate[] pts = g.getCoordinates();
Coordinate[] curvePts = null;
if (g instanceof Polygonal) {
curvePts = ocb.getRingCurve(pts, 1, distance);
}
else {
curvePts = ocb.getLineCurve(pts, distance);
}
Geometry curve = g.getFactory().createLineString(curvePts);
return curve;
}
}