Skip to content

Commit 16777e4

Browse files
authored
add daylight landcover to tileset [#154] (#228)
* add daylight landcover to tileset [#154] * Use geopackage mirror of daylight dataset from https://daylightmap.org/2023/10/11/landcover.html * remap daylight classes to tilezen-like kinds * tiles 3.5.0, changelog
1 parent 4329cfb commit 16777e4

File tree

4 files changed

+84
-2
lines changed

4 files changed

+84
-2
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
Tiles v3.5.0
2+
------
3+
- Add Daylight Landcover from zooms 0-7. [#154]
4+
15
Tiles v3.4.1
26
------
37
- Improve boundaries generalization [#200]

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.protomaps.basemap.layers.Boundaries;
99
import com.protomaps.basemap.layers.Buildings;
1010
import com.protomaps.basemap.layers.Earth;
11+
import com.protomaps.basemap.layers.Landcover;
1112
import com.protomaps.basemap.layers.Landuse;
1213
import com.protomaps.basemap.layers.Natural;
1314
import com.protomaps.basemap.layers.PhysicalLine;
@@ -37,6 +38,10 @@ public Basemap(NaturalEarthDb naturalEarthDb, QrankDb qrankDb) {
3738
registerHandler(landuse);
3839
registerSourceHandler("osm", landuse);
3940

41+
var landcover = new Landcover();
42+
registerHandler(landcover);
43+
registerSourceHandler("landcover", landcover::processLandcover);
44+
4045
var natural = new Natural();
4146
registerHandler(natural);
4247
registerSourceHandler("osm", natural);
@@ -91,7 +96,7 @@ public String description() {
9196

9297
@Override
9398
public String version() {
94-
return "3.4.1";
99+
return "3.5.0";
95100
}
96101

97102
@Override
@@ -127,7 +132,9 @@ static void run(Arguments args) throws Exception {
127132
.addShapefileSource("osm_water", sourcesDir.resolve("water-polygons-split-3857.zip"),
128133
"https://osmdata.openstreetmap.de/download/water-polygons-split-3857.zip")
129134
.addShapefileSource("osm_land", sourcesDir.resolve("land-polygons-split-3857.zip"),
130-
"https://osmdata.openstreetmap.de/download/land-polygons-split-3857.zip");
135+
"https://osmdata.openstreetmap.de/download/land-polygons-split-3857.zip")
136+
.addGeoPackageSource("landcover", sourcesDir.resolve("daylight-landcover.gpkg"),
137+
"https://r2-public.protomaps.com/datasets/daylight-landcover.gpkg");
131138

132139
// Downloader.create(planetiler.config()).add("ne", neUrl, nePath)
133140
// .add("qrank", "https://qrank.wmcloud.org/download/qrank.csv.gz", sourcesDir.resolve("qrank.csv.gz")).run();
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.protomaps.basemap.layers;
2+
3+
import com.onthegomap.planetiler.FeatureCollector;
4+
import com.onthegomap.planetiler.ForwardingProfile;
5+
import com.onthegomap.planetiler.VectorTile;
6+
import com.onthegomap.planetiler.geo.GeometryException;
7+
import com.onthegomap.planetiler.reader.SourceFeature;
8+
import com.protomaps.basemap.feature.FeatureId;
9+
import java.util.List;
10+
import java.util.Map;
11+
12+
public class Landcover implements ForwardingProfile.FeaturePostProcessor {
13+
14+
static final Map<String, String> kindMapping = Map.of("urban", "urban_area", "crop", "farmland", "grass", "grassland",
15+
"trees", "forest", "snow", "glacier", "shrub", "scrub", "barren", "barren");
16+
17+
public void processLandcover(SourceFeature sf, FeatureCollector features) {
18+
String kind = kindMapping.getOrDefault(sf.getString("class"), "unknown");
19+
20+
features.polygon(this.name())
21+
.setId(FeatureId.create(sf))
22+
.setAttr("pmap:kind", kind)
23+
.setZoomRange(0, 7)
24+
.setMinPixelSize(0.0);
25+
}
26+
27+
@Override
28+
public String name() {
29+
return "landcover";
30+
}
31+
32+
@Override
33+
public List<VectorTile.Feature> postProcess(int zoom, List<VectorTile.Feature> items) throws GeometryException {
34+
return items;
35+
}
36+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.protomaps.basemap.layers;
2+
3+
import static com.onthegomap.planetiler.TestUtils.newPolygon;
4+
5+
import com.onthegomap.planetiler.reader.SimpleFeature;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
9+
import org.junit.jupiter.params.ParameterizedTest;
10+
import org.junit.jupiter.params.provider.CsvSource;
11+
12+
class LandcoverTest extends LayerTest {
13+
14+
@ParameterizedTest
15+
@CsvSource(value = {
16+
"urban,urban_area",
17+
"crop,farmland",
18+
"grass,grassland",
19+
"trees,forest",
20+
"snow,glacier",
21+
"shrub,scrub",
22+
"barren,barren"
23+
})
24+
void simple(String daylightClassString, String expectedString) {
25+
assertFeatures(7,
26+
List.of(Map.of("pmap:kind", expectedString)),
27+
process(SimpleFeature.create(
28+
newPolygon(0, 0, 0, 1, 1, 1, 0, 0),
29+
new HashMap<>(Map.of("class", daylightClassString)),
30+
"landcover",
31+
null,
32+
0
33+
)));
34+
}
35+
}

0 commit comments

Comments
 (0)