diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/reader/ShapefileReader.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/reader/ShapefileReader.java index 5b516247..01a8ad7b 100644 --- a/planetiler-core/src/main/java/com/onthegomap/planetiler/reader/ShapefileReader.java +++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/reader/ShapefileReader.java @@ -37,10 +37,12 @@ public class ShapefileReader extends SimpleReader { private final FeatureCollection inputSource; private final String[] attributeNames; private final ShapefileDataStore dataStore; + private final String layer; private MathTransform transformToLatLon; public ShapefileReader(String sourceProjection, String sourceName, Path input) { super(sourceName); + this.layer = input.getFileName().toString().replaceAll("\\.shp$", ""); dataStore = open(input); try { String typeName = dataStore.getTypeNames()[0]; @@ -119,7 +121,7 @@ public class ShapefileReader extends SimpleReader { } if (latLonGeometry != null) { SimpleFeature geom = SimpleFeature.create(latLonGeometry, new HashMap<>(attributeNames.length), - sourceName, null, ++id); + sourceName, layer, ++id); for (int i = 1; i < attributeNames.length; i++) { geom.setTag(attributeNames[i], feature.getAttribute(i)); } diff --git a/planetiler-core/src/test/java/com/onthegomap/planetiler/PlanetilerTests.java b/planetiler-core/src/test/java/com/onthegomap/planetiler/PlanetilerTests.java index faf435b7..713c15a7 100644 --- a/planetiler-core/src/test/java/com/onthegomap/planetiler/PlanetilerTests.java +++ b/planetiler-core/src/test/java/com/onthegomap/planetiler/PlanetilerTests.java @@ -1697,7 +1697,8 @@ class PlanetilerTests { public void processFeature(SourceFeature source, FeatureCollector features) { features.point("stations") .setZoomRange(0, 14) - .setAttr("source", source.getSource()); + .setAttr("source", source.getSource()) + .setAttr("layer", source.getSourceLayer()); } }) // Match *.shp within [shapefile.zip, shapefile-copy.zip] @@ -1715,7 +1716,7 @@ class PlanetilerTests { for (var tile : tileMap.values()) { for (var feature : tile) { feature.geometry().validate(); - + assertEquals("stations", feature.attrs().get("layer")); switch ((String) feature.attrs().get("source")) { case "shapefile" -> fileCount++; case "shapefile-glob" -> globCount++; diff --git a/planetiler-core/src/test/java/com/onthegomap/planetiler/reader/ShapefileReaderTest.java b/planetiler-core/src/test/java/com/onthegomap/planetiler/reader/ShapefileReaderTest.java index 47e66a3c..9fe2ab74 100644 --- a/planetiler-core/src/test/java/com/onthegomap/planetiler/reader/ShapefileReaderTest.java +++ b/planetiler-core/src/test/java/com/onthegomap/planetiler/reader/ShapefileReaderTest.java @@ -1,7 +1,6 @@ package com.onthegomap.planetiler.reader; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import com.onthegomap.planetiler.TestUtils; @@ -47,29 +46,30 @@ class ShapefileReaderTest { } private static void testReadShapefile(Path path) { - var reader = new ShapefileReader(null, "test", path); + try (var reader = new ShapefileReader(null, "test", path)) { - for (int i = 1; i <= 2; i++) { - assertEquals(86, reader.getFeatureCount()); - List points = new ArrayList<>(); - List names = new ArrayList<>(); - WorkerPipeline.start("test", Stats.inMemory()) - .readFromTiny("files", List.of(path)) - .addWorker("reader", 1, (IterableOnce p, Consumer next) -> reader.readFeatures(next)) - .addBuffer("reader_queue", 100, 1) - .sinkToConsumer("counter", 1, elem -> { - assertTrue(elem.getTag("name") instanceof String); - assertEquals("test", elem.getSource()); - assertNull(elem.getSourceLayer()); - points.add(elem.latLonGeometry()); - names.add(elem.getTag("name").toString()); - }).await(); - assertEquals(86, points.size()); - assertTrue(names.contains("Van Dörn Street")); - var gc = GeoUtils.JTS_FACTORY.createGeometryCollection(points.toArray(new Geometry[0])); - var centroid = gc.getCentroid(); - assertEquals(-77.0297995, centroid.getX(), 5, "iter " + i); - assertEquals(38.9119684, centroid.getY(), 5, "iter " + i); + for (int i = 1; i <= 2; i++) { + assertEquals(86, reader.getFeatureCount()); + List points = new ArrayList<>(); + List names = new ArrayList<>(); + WorkerPipeline.start("test", Stats.inMemory()) + .readFromTiny("files", List.of(path)) + .addWorker("reader", 1, (IterableOnce p, Consumer next) -> reader.readFeatures(next)) + .addBuffer("reader_queue", 100, 1) + .sinkToConsumer("counter", 1, elem -> { + assertTrue(elem.getTag("name") instanceof String); + assertEquals("test", elem.getSource()); + assertEquals("stations", elem.getSourceLayer()); + points.add(elem.latLonGeometry()); + names.add(elem.getTag("name").toString()); + }).await(); + assertEquals(86, points.size()); + assertTrue(names.contains("Van Dörn Street")); + var gc = GeoUtils.JTS_FACTORY.createGeometryCollection(points.toArray(new Geometry[0])); + var centroid = gc.getCentroid(); + assertEquals(-77.0297995, centroid.getX(), 5, "iter " + i); + assertEquals(38.9119684, centroid.getY(), 5, "iter " + i); + } } } }