Skip to content

Commit 58b3031

Browse files
authored
--layer cli config option (#391)
* Render only layer option * Format * Use layer name from class * Format' * Landcover replace LayerPostProcesser * Rename
1 parent f653e61 commit 58b3031

File tree

12 files changed

+122
-59
lines changed

12 files changed

+122
-59
lines changed

tiles/src/main/java/com/protomaps/basemap/Basemap.java

+80-38
Original file line numberDiff line numberDiff line change
@@ -29,53 +29,74 @@
2929

3030
public class Basemap extends ForwardingProfile {
3131

32-
public Basemap(NaturalEarthDb naturalEarthDb, QrankDb qrankDb, CountryCoder countryCoder, Clip clip) {
33-
34-
var admin = new Boundaries();
35-
registerHandler(admin);
36-
registerSourceHandler("osm", admin::processOsm);
37-
registerSourceHandler("ne", admin::processNe);
32+
public Basemap(NaturalEarthDb naturalEarthDb, QrankDb qrankDb, CountryCoder countryCoder, Clip clip,
33+
String layer) {
34+
35+
if (layer.isEmpty() || layer.equals(Boundaries.LAYER_NAME)) {
36+
var admin = new Boundaries();
37+
registerHandler(admin);
38+
registerSourceHandler("osm", admin::processOsm);
39+
registerSourceHandler("ne", admin::processNe);
40+
}
3841

39-
var buildings = new Buildings();
40-
registerHandler(buildings);
41-
registerSourceHandler("osm", buildings::processOsm);
42+
if (layer.isEmpty() || layer.equals(Buildings.LAYER_NAME)) {
43+
var buildings = new Buildings();
44+
registerHandler(buildings);
45+
registerSourceHandler("osm", buildings::processOsm);
46+
}
4247

43-
var landuse = new Landuse();
44-
registerHandler(landuse);
45-
registerSourceHandler("osm", landuse::processOsm);
48+
if (layer.isEmpty() || layer.equals(Landuse.LAYER_NAME)) {
49+
var landuse = new Landuse();
50+
registerHandler(landuse);
51+
registerSourceHandler("osm", landuse::processOsm);
52+
}
4653

47-
var landcover = new Landcover();
48-
registerHandler(landcover);
49-
registerSourceHandler("landcover", landcover::processLandcover);
54+
if (layer.isEmpty() || layer.equals(Landcover.LAYER_NAME)) {
55+
var landcover = new Landcover();
56+
registerHandler(landcover);
57+
registerSourceHandler("landcover", landcover::processLandcover);
58+
}
5059

51-
var place = new Places(naturalEarthDb);
52-
registerHandler(place);
53-
registerSourceHandler("osm", place::processOsm);
60+
if (layer.isEmpty() || layer.equals(Places.LAYER_NAME)) {
61+
var place = new Places(naturalEarthDb);
62+
registerHandler(place);
63+
registerSourceHandler("osm", place::processOsm);
64+
}
5465

55-
var poi = new Pois(qrankDb);
56-
registerHandler(poi);
57-
registerSourceHandler("osm", poi::processOsm);
66+
if (layer.isEmpty() || layer.equals(Pois.LAYER_NAME)) {
67+
var poi = new Pois(qrankDb);
68+
registerHandler(poi);
69+
registerSourceHandler("osm", poi::processOsm);
70+
}
5871

59-
var roads = new Roads(countryCoder);
60-
registerHandler(roads);
61-
registerSourceHandler("osm", roads::processOsm);
72+
if (layer.isEmpty() || layer.equals(Roads.LAYER_NAME)) {
73+
var roads = new Roads(countryCoder);
74+
registerHandler(roads);
75+
registerSourceHandler("osm", roads::processOsm);
76+
}
6277

63-
var transit = new Transit();
64-
registerHandler(transit);
65-
registerSourceHandler("osm", transit::processOsm);
78+
if (layer.isEmpty() || layer.equals(Transit.LAYER_NAME)) {
79+
var transit = new Transit();
80+
registerHandler(transit);
81+
registerSourceHandler("osm", transit::processOsm);
82+
}
6683

67-
var water = new Water();
68-
registerHandler(water);
69-
registerSourceHandler("osm", water::processOsm);
70-
registerSourceHandler("osm_water", water::processPreparedOsm);
71-
registerSourceHandler("ne", water::processNe);
84+
if (layer.isEmpty() || layer.equals(Water.LAYER_NAME)) {
85+
var water = new Water();
86+
registerHandler(water);
87+
registerSourceHandler("osm", water::processOsm);
88+
registerSourceHandler("osm_water", water::processPreparedOsm);
89+
registerSourceHandler("ne", water::processNe);
90+
}
7291

73-
var earth = new Earth();
74-
registerHandler(earth);
92+
if (layer.isEmpty() || layer.equals(Earth.LAYER_NAME)) {
93+
var earth = new Earth();
94+
registerHandler(earth);
7595

76-
registerSourceHandler("osm", earth::processOsm);
77-
registerSourceHandler("osm_land", earth::processPreparedOsm);
78-
registerSourceHandler("ne", earth::processNe);
96+
registerSourceHandler("osm", earth::processOsm);
97+
registerSourceHandler("osm_land", earth::processPreparedOsm);
98+
registerSourceHandler("ne", earth::processNe);
99+
}
79100

80101
if (clip != null) {
81102
registerHandler(clip);
@@ -173,9 +194,30 @@ static void run(Arguments args) throws IOException {
173194
Paths.get(clipArg));
174195
}
175196

197+
List<String> availableLayers = List.of(
198+
Boundaries.LAYER_NAME,
199+
Buildings.LAYER_NAME,
200+
Landuse.LAYER_NAME,
201+
Landcover.LAYER_NAME,
202+
Places.LAYER_NAME,
203+
Pois.LAYER_NAME,
204+
Roads.LAYER_NAME,
205+
Transit.LAYER_NAME,
206+
Water.LAYER_NAME,
207+
Earth.LAYER_NAME
208+
);
209+
210+
String layer = args.getString("layer",
211+
"Process only a single layer. Possible values are: " + String.join(", ", availableLayers), "");
212+
if (!(layer.isEmpty() || availableLayers.contains(layer))) {
213+
System.err.println("Error: --layer=" + layer + " is not a valid option. Possible values are: " +
214+
String.join(", ", availableLayers));
215+
System.exit(1);
216+
}
217+
176218
fontRegistry.loadFontBundle("NotoSansDevanagari-Regular", "1", "Devanagari");
177219

178-
planetiler.setProfile(new Basemap(naturalEarthDb, qrankDb, countryCoder, clip))
220+
planetiler.setProfile(new Basemap(naturalEarthDb, qrankDb, countryCoder, clip, layer))
179221
.setOutput(Path.of(area + ".pmtiles"))
180222
.run();
181223
}

tiles/src/main/java/com/protomaps/basemap/layers/Boundaries.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
import java.util.OptionalInt;
1515

1616
public class Boundaries implements ForwardingProfile.OsmRelationPreprocessor,
17-
ForwardingProfile.LayerPostProcesser {
17+
ForwardingProfile.LayerPostProcessor {
18+
19+
public static final String LAYER_NAME = "boundaries";
1820

1921
@Override
2022
public String name() {
21-
return "boundaries";
23+
return LAYER_NAME;
2224
}
2325

2426
public void processNe(SourceFeature sf, FeatureCollector features) {

tiles/src/main/java/com/protomaps/basemap/layers/Buildings.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@
1818
import java.util.Map;
1919
import java.util.regex.Pattern;
2020

21-
public class Buildings implements ForwardingProfile.LayerPostProcesser {
21+
public class Buildings implements ForwardingProfile.LayerPostProcessor {
2222

2323
static final String HEIGHT_KEY = "height";
2424
static final String MIN_HEIGHT_KEY = "min_height";
2525

26+
public static final String LAYER_NAME = "buildings";
27+
2628
@Override
2729
public String name() {
28-
return "buildings";
30+
return LAYER_NAME;
2931
}
3032

3133
public record Height(Double height, Double min_height) {}

tiles/src/main/java/com/protomaps/basemap/layers/Earth.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
import java.util.List;
1212
import org.locationtech.jts.geom.Point;
1313

14-
public class Earth implements ForwardingProfile.LayerPostProcesser {
14+
public class Earth implements ForwardingProfile.LayerPostProcessor {
15+
16+
public static final String LAYER_NAME = "earth";
17+
1518
@Override
1619
public String name() {
17-
return "earth";
20+
return LAYER_NAME;
1821
}
1922

2023
public void processPreparedOsm(SourceFeature ignoredSf, FeatureCollector features) {

tiles/src/main/java/com/protomaps/basemap/layers/Landcover.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import java.util.List;
1010
import java.util.Map;
1111

12-
public class Landcover implements ForwardingProfile.LayerPostProcesser {
12+
public class Landcover implements ForwardingProfile.LayerPostProcessor {
1313

1414
static final Map<String, String> kindMapping = Map.of("urban", "urban_area", "crop", "farmland", "grass", "grassland",
1515
"trees", "forest", "snow", "glacier", "shrub", "scrub");
@@ -32,9 +32,11 @@ public void processLandcover(SourceFeature sf, FeatureCollector features) {
3232
.setMinPixelSize(0.0);
3333
}
3434

35+
public static final String LAYER_NAME = "landcover";
36+
3537
@Override
3638
public String name() {
37-
return "landcover";
39+
return LAYER_NAME;
3840
}
3941

4042
@Override

tiles/src/main/java/com/protomaps/basemap/layers/Landuse.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.protomaps.basemap.postprocess.Area;
1111
import java.util.List;
1212

13-
public class Landuse implements ForwardingProfile.LayerPostProcesser {
13+
public class Landuse implements ForwardingProfile.LayerPostProcessor {
1414

1515
public void processOsm(SourceFeature sf, FeatureCollector features) {
1616
if (sf.canBePolygon() && (sf.hasTag("aeroway", "aerodrome", "runway") ||
@@ -166,9 +166,11 @@ public void processOsm(SourceFeature sf, FeatureCollector features) {
166166
}
167167
}
168168

169+
public static final String LAYER_NAME = "landuse";
170+
169171
@Override
170172
public String name() {
171-
return "landuse";
173+
return LAYER_NAME;
172174
}
173175

174176
@Override

tiles/src/main/java/com/protomaps/basemap/layers/Places.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,19 @@
1515
import java.util.Map;
1616
import java.util.concurrent.atomic.AtomicInteger;
1717

18-
public class Places implements ForwardingProfile.LayerPostProcesser {
18+
public class Places implements ForwardingProfile.LayerPostProcessor {
1919

2020
private NaturalEarthDb naturalEarthDb;
2121

2222
public Places(NaturalEarthDb naturalEarthDb) {
2323
this.naturalEarthDb = naturalEarthDb;
2424
}
2525

26+
public static final String LAYER_NAME = "places";
27+
2628
@Override
2729
public String name() {
28-
return "places";
30+
return LAYER_NAME;
2931
}
3032

3133
private final AtomicInteger placeNumber = new AtomicInteger(0);

tiles/src/main/java/com/protomaps/basemap/layers/Pois.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,19 @@
1414
import com.protomaps.basemap.names.OsmNames;
1515
import java.util.List;
1616

17-
public class Pois implements ForwardingProfile.LayerPostProcesser {
17+
public class Pois implements ForwardingProfile.LayerPostProcessor {
1818

1919
private QrankDb qrankDb;
2020

2121
public Pois(QrankDb qrankDb) {
2222
this.qrankDb = qrankDb;
2323
}
2424

25+
public static final String LAYER_NAME = "pois";
26+
2527
@Override
2628
public String name() {
27-
return "pois";
29+
return LAYER_NAME;
2830
}
2931

3032
private static final double WORLD_AREA_FOR_70K_SQUARE_METERS =

tiles/src/main/java/com/protomaps/basemap/layers/Roads.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ public Roads(CountryCoder countryCoder) {
2525
this.countryCoder = countryCoder;
2626
}
2727

28+
public static final String LAYER_NAME = "roads";
29+
2830
@Override
2931
public String name() {
30-
return "roads";
32+
return LAYER_NAME;
3133
}
3234

3335
// Hardcoded to US for now

tiles/src/main/java/com/protomaps/basemap/layers/Transit.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
import com.onthegomap.planetiler.reader.SourceFeature;
77
import java.util.List;
88

9-
public class Transit implements ForwardingProfile.LayerPostProcesser {
9+
public class Transit implements ForwardingProfile.LayerPostProcessor {
10+
11+
public static final String LAYER_NAME = "transit";
1012

1113
@Override
1214
public String name() {
13-
return "transit";
15+
return LAYER_NAME;
1416
}
1517

1618
public void processOsm(SourceFeature sf, FeatureCollector features) {}

tiles/src/main/java/com/protomaps/basemap/layers/Water.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@
1313
import com.protomaps.basemap.names.OsmNames;
1414
import java.util.List;
1515

16-
public class Water implements ForwardingProfile.LayerPostProcesser {
16+
public class Water implements ForwardingProfile.LayerPostProcessor {
1717

1818
private static final double WORLD_AREA_FOR_70K_SQUARE_METERS =
1919
Math.pow(GeoUtils.metersToPixelAtEquator(0, Math.sqrt(70_000)) / 256d, 2);
2020

21+
public static final String LAYER_NAME = "water";
22+
2123
@Override
2224
public String name() {
23-
return "water";
25+
return LAYER_NAME;
2426
}
2527

2628
public void processPreparedOsm(SourceFeature ignoredSf, FeatureCollector features) {

tiles/src/test/java/com/protomaps/basemap/layers/LayerTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ abstract class LayerTest {
2525
List.of(new NaturalEarthDb.NeAdmin1StateProvince("California", "US-CA", "Q2", 5.0, 8.0)),
2626
List.of(new NaturalEarthDb.NePopulatedPlace("San Francisco", "Q3", 9.0, 2))
2727
);
28+
2829
final CountryCoder countryCoder = CountryCoder.fromJsonString(
2930
"{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"iso1A2\":\"US\",\"nameEn\":\"United States\"},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[-124,47],[-124,25],[-71,25],[-71,47],[-124,47]]]]}}]}");
3031

31-
// US [-124,47],[-124,25],[-71,25],[-71,47],[-124,47]
32-
final Basemap profile = new Basemap(naturalEarthDb, null, countryCoder, null);
32+
final Basemap profile = new Basemap(naturalEarthDb, null, countryCoder, null, "");
3333

3434
static void assertFeatures(int zoom, List<Map<String, Object>> expected, Iterable<FeatureCollector.Feature> actual) {
3535
var expectedList = expected.stream().toList();

0 commit comments

Comments
 (0)