Skip to content

Commit 2e53be6

Browse files
author
ThijsMac
committed
[app] Wire JTSTestBuilder to use CurvedWKTReader / CurvedGeometryFactory
Phase 4-A of the SFA / ISO 19125-2 curve work (per discussion #1193). Single-purpose change: every WKT-parsing path inside jts-app now uses the curve-aware reader and factory, so curved WKT can be pasted, loaded, saved, and round-tripped without any new UI. What now works in JTSTestBuilder - Pasting `CIRCULARSTRING(1 5, 6 2, 7 3)` (or COMPOUNDCURVE, CURVEPOLYGON, MULTICURVE, MULTISURFACE, TRIANGLE, POLYHEDRALSURFACE, TIN, with optional Z/M/ZM modifiers) into the Input A/B panels. - Loading a `.jts` test case that contains curved WKT. - Loading WKT/WKB files via File menu. - The Geometry tree shows the correct type name (CircularString, etc.). - Spatial functions fall through to the parent type's behaviour (polyline / polygon) per the phase-1 contract; explicit linearisation is available via Linearizable.toLinear(tolerance). Files touched (all jts-app) - pom.xml: add jts-curved dependency. - testbuilder/JTSTestBuilder.java: fallback geometry factory is now CurvedGeometryFactory. - testbuilder/model/TestBuilderModel.java: default geometry factory is CurvedGeometryFactory; loadGeometryText and the post-precision-model- change reload path use CurvedWKTReader / CurvedGeometryFactory. - testbuilder/GeometryInputDialog.java: input parser uses the curved reader / factory. - util/io/IOUtil.java: readWKTString uses CurvedWKTReader (this is the central WKT path, also reached via MultiFormatReader). - util/io/MultiFormatBufferedReader.java: readWKT uses CurvedWKTReader. - util/io/MultiFormatFileReader.java: readWKTFile uses CurvedWKTReader. - test/TestCase.java: initGeometry and toNullOrGeometry use CurvedWKTReader / CurvedGeometryFactory for test-case WKT parsing. What is intentionally NOT in this commit - No drawing tools for curved geometries (defer to Phase 4-B). - No CurvedShapeWriter / Bezier rendering (defer to Phase 4-B). - No GeometryType enum extension or controller mode methods. Net diff: +30 / -15 lines across 8 files. Reactor build is green (jts-core 2288 + jts-curved 54 tests pass; all other modules unchanged).
1 parent f2f31a0 commit 2e53be6

8 files changed

Lines changed: 30 additions & 15 deletions

File tree

modules/app/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
<artifactId>jts-core</artifactId>
1616
<version>${project.version}</version>
1717
</dependency>
18+
<dependency>
19+
<groupId>org.locationtech.jts</groupId>
20+
<artifactId>jts-curved</artifactId>
21+
<version>${project.version}</version>
22+
</dependency>
1823
<dependency>
1924
<groupId>org.locationtech.jts</groupId>
2025
<artifactId>jts-tests</artifactId>

modules/app/src/main/java/org/locationtech/jtstest/test/TestCase.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
import org.locationtech.jts.geom.GeometryFactory;
1616
import org.locationtech.jts.geom.IntersectionMatrix;
1717
import org.locationtech.jts.geom.PrecisionModel;
18+
import org.locationtech.jts.geom.curved.CurvedGeometryFactory;
1819
import org.locationtech.jts.io.ParseException;
1920
import org.locationtech.jts.io.WKTReader;
21+
import org.locationtech.jts.io.curved.CurvedWKTReader;
2022
import org.locationtech.jts.io.WKTWriter;
2123
import org.locationtech.jts.util.Assert;
2224

@@ -294,8 +296,8 @@ public void runTest() throws ParseException {
294296
}
295297

296298
public void initGeometry() throws ParseException {
297-
GeometryFactory fact = new GeometryFactory(pm, 0);
298-
WKTReader wktRdr = new WKTReader(fact);
299+
GeometryFactory fact = new CurvedGeometryFactory(pm, 0);
300+
WKTReader wktRdr = new CurvedWKTReader(fact);
299301
if (geom[0] != null) {
300302
return;
301303
}
@@ -350,8 +352,8 @@ private Geometry toNullOrGeometry(String wellKnownText) throws ParseException {
350352
if (wellKnownText == null) {
351353
return null;
352354
}
353-
GeometryFactory fact = new GeometryFactory(pm, 0);
354-
WKTReader wktRdr = new WKTReader(fact);
355+
GeometryFactory fact = new CurvedGeometryFactory(pm, 0);
356+
WKTReader wktRdr = new CurvedWKTReader(fact);
355357
return wktRdr.read(wellKnownText);
356358
}
357359

modules/app/src/main/java/org/locationtech/jtstest/testbuilder/GeometryInputDialog.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030

3131
import org.locationtech.jts.geom.Geometry;
3232
import org.locationtech.jts.geom.GeometryFactory;
33+
import org.locationtech.jts.geom.curved.CurvedGeometryFactory;
3334
import org.locationtech.jts.io.WKTReader;
35+
import org.locationtech.jts.io.curved.CurvedWKTReader;
3436

3537

3638
/**
@@ -221,8 +223,8 @@ void btnLoad_actionPerformed(ActionEvent e) {
221223
Geometry parseGeometry(JTextComponent txt, Color clr) {
222224
try {
223225
WKTReader rdr =
224-
new WKTReader(
225-
new GeometryFactory(JTSTestBuilder.model().getPrecisionModel(), 0));
226+
new CurvedWKTReader(
227+
new CurvedGeometryFactory(JTSTestBuilder.model().getPrecisionModel(), 0));
226228
Geometry g = rdr.read(txt.getText());
227229
txtError.setText("");
228230
return g;

modules/app/src/main/java/org/locationtech/jtstest/testbuilder/JTSTestBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.locationtech.jts.geom.GeometryFactory;
2020
import org.locationtech.jts.geom.PrecisionModel;
21+
import org.locationtech.jts.geom.curved.CurvedGeometryFactory;
2122
import org.locationtech.jtstest.cmd.CommandOptions;
2223
import org.locationtech.jtstest.command.CommandLine;
2324
import org.locationtech.jtstest.command.Option;
@@ -80,8 +81,8 @@ public static GeometryFactory getGeometryFactory()
8081
/**
8182
* Allow this to work even if TestBuilder is not initialized
8283
*/
83-
if (instance() == null)
84-
return new GeometryFactory();
84+
if (instance() == null)
85+
return new CurvedGeometryFactory();
8586
return model().getGeometryFactory();
8687
}
8788

modules/app/src/main/java/org/locationtech/jtstest/testbuilder/model/TestBuilderModel.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@
2323
import org.locationtech.jts.geom.Geometry;
2424
import org.locationtech.jts.geom.GeometryFactory;
2525
import org.locationtech.jts.geom.PrecisionModel;
26+
import org.locationtech.jts.geom.curved.CurvedGeometryFactory;
2627
import org.locationtech.jts.io.ParseException;
2728
import org.locationtech.jts.io.WKTReader;
2829
import org.locationtech.jts.io.WKTWriter;
30+
import org.locationtech.jts.io.curved.CurvedWKTReader;
2931
import org.locationtech.jts.math.MathUtil;
3032
import org.locationtech.jts.util.Assert;
3133
import org.locationtech.jtstest.test.TestCaseList;
@@ -78,7 +80,7 @@ public void setPrecisionModel(PrecisionModel precisionModel)
7880
public GeometryFactory getGeometryFactory()
7981
{
8082
if (geometryFactory == null)
81-
geometryFactory = new GeometryFactory(getPrecisionModel());
83+
geometryFactory = new CurvedGeometryFactory(getPrecisionModel());
8284
return geometryFactory;
8385
}
8486

@@ -240,7 +242,7 @@ public void loadMultipleGeometriesFromFile(int geomIndex, String filename)
240242
}
241243

242244
public void loadGeometryText(String wktA, String wktB) throws ParseException, IOException {
243-
MultiFormatReader reader = new MultiFormatReader(new GeometryFactory(getPrecisionModel(),0));
245+
MultiFormatReader reader = new MultiFormatReader(new CurvedGeometryFactory(getPrecisionModel(),0));
244246

245247
// read geom A
246248
Geometry g0 = null;
@@ -455,7 +457,7 @@ private void saveWKTBeforePMChange() {
455457
}
456458

457459
private void loadWKTAfterPMChange() throws ParseException {
458-
WKTReader reader = new WKTReader(new GeometryFactory(getPrecisionModel(), 0));
460+
WKTReader reader = new CurvedWKTReader(new CurvedGeometryFactory(getPrecisionModel(), 0));
459461
for (int i = 0; i < getCases().size(); i++) {
460462
Testable testable = (Testable) getCases().get(i);
461463
String wktA = (String) wktABeforePMChange.get(i);

modules/app/src/main/java/org/locationtech/jtstest/util/io/IOUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.locationtech.jts.io.WKBReader;
2727
import org.locationtech.jts.io.WKTFileReader;
2828
import org.locationtech.jts.io.WKTReader;
29+
import org.locationtech.jts.io.curved.CurvedWKTReader;
2930
import org.locationtech.jts.io.gml2.GMLReader;
3031
import org.locationtech.jtstest.testbuilder.io.shapefile.Shapefile;
3132
import org.locationtech.jtstest.util.FileUtil;
@@ -117,7 +118,7 @@ public static Geometry readWKTString(String wkt, GeometryFactory geomFact,
117118
boolean isStrict)
118119
throws ParseException, IOException
119120
{
120-
WKTReader reader = new WKTReader(geomFact);
121+
WKTReader reader = new CurvedWKTReader(geomFact);
121122
WKTFileReader fileReader = new WKTFileReader(new StringReader(wkt), reader);
122123
fileReader.setStrictParsing(isStrict);
123124
List geomList = fileReader.read();

modules/app/src/main/java/org/locationtech/jtstest/util/io/MultiFormatBufferedReader.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.locationtech.jts.io.WKBReader;
2424
import org.locationtech.jts.io.WKTFileReader;
2525
import org.locationtech.jts.io.WKTReader;
26+
import org.locationtech.jts.io.curved.CurvedWKTReader;
2627

2728

2829
/**
@@ -106,9 +107,9 @@ private List<Geometry> readWKBHex(Reader rdr, GeometryFactory geomFact)
106107
}
107108

108109
public List<Geometry> readWKT(Reader rdr, GeometryFactory geomFact)
109-
throws ParseException, IOException
110+
throws ParseException, IOException
110111
{
111-
WKTReader reader = new WKTReader(geomFact);
112+
WKTReader reader = new CurvedWKTReader(geomFact);
112113
WKTFileReader fileReader = new WKTFileReader(rdr, reader);
113114
if (limit >= 0) fileReader.setLimit(limit);
114115
if (offset > 0) fileReader.setOffset(offset);

modules/app/src/main/java/org/locationtech/jtstest/util/io/MultiFormatFileReader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.locationtech.jts.io.WKBReader;
2424
import org.locationtech.jts.io.WKTFileReader;
2525
import org.locationtech.jts.io.WKTReader;
26+
import org.locationtech.jts.io.curved.CurvedWKTReader;
2627
import org.locationtech.jtstest.testbuilder.io.shapefile.Shapefile;
2728
import org.locationtech.jtstest.util.FileUtil;
2829

@@ -139,7 +140,7 @@ private List<Geometry> readWKBHexFile(String filename)
139140
private List<Geometry> readWKTFile(String filename)
140141
throws ParseException, IOException
141142
{
142-
WKTReader reader = new WKTReader(geomFact);
143+
WKTReader reader = new CurvedWKTReader(geomFact);
143144
WKTFileReader fileReader = new WKTFileReader(filename, reader);
144145
if (limit >= 0) fileReader.setLimit(limit);
145146
if (offset > 0) fileReader.setOffset(offset);

0 commit comments

Comments
 (0)