Skip to content

Commit ecb9eb7

Browse files
committed
qrank db wip [#29]
1 parent 7821d91 commit ecb9eb7

File tree

5 files changed

+73
-8
lines changed

5 files changed

+73
-8
lines changed

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

+9-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.onthegomap.planetiler.config.Arguments;
66
import com.onthegomap.planetiler.util.Downloader;
77
import com.protomaps.basemap.feature.NaturalEarthDb;
8+
import com.protomaps.basemap.feature.QrankDb;
89
import com.protomaps.basemap.layers.Boundaries;
910
import com.protomaps.basemap.layers.Buildings;
1011
import com.protomaps.basemap.layers.Earth;
@@ -23,7 +24,7 @@
2324

2425
public class Basemap extends ForwardingProfile {
2526

26-
public Basemap(Envelope earthWaterBounds, NaturalEarthDb naturalEarth) {
27+
public Basemap(Envelope earthWaterBounds, NaturalEarthDb naturalEarthDb, QrankDb qrankDb) {
2728

2829
var admin = new Boundaries();
2930
registerHandler(admin);
@@ -51,12 +52,12 @@ public Basemap(Envelope earthWaterBounds, NaturalEarthDb naturalEarth) {
5152
registerSourceHandler("osm", physicalPoint);
5253
registerSourceHandler("ne", physicalPoint::processNe);
5354

54-
var place = new Places();
55+
var place = new Places(naturalEarthDb);
5556
registerHandler(place);
5657
registerSourceHandler("osm", place);
5758
registerSourceHandler("ne", place::processNe);
5859

59-
var poi = new Pois();
60+
var poi = new Pois(qrankDb);
6061
registerHandler(poi);
6162
registerSourceHandler("osm", poi);
6263

@@ -133,12 +134,14 @@ static void run(Arguments args) throws Exception {
133134
.addShapefileSource("osm_land", sourcesDir.resolve("land-polygons-split-3857.zip"),
134135
"https://osmdata.openstreetmap.de/download/land-polygons-split-3857.zip");
135136

136-
Downloader.create(planetiler.config(), planetiler.stats()).add("ne", neUrl, nePath).run();
137+
Downloader.create(planetiler.config(), planetiler.stats()).add("ne", neUrl, nePath)
138+
.add("qrank", "https://qrank.wmcloud.org/download/qrank.csv.gz", sourcesDir.resolve("qrank.csv.gz")).run();
137139

138140
var tmpDir = nePath.resolveSibling(nePath.getFileName() + "-unzipped");
139141
var naturalEarthDb = NaturalEarthDb.fromSqlite(nePath, tmpDir);
140-
System.out.println(naturalEarthDb.getPopulatedPlaceByWikidataId("Q60"));
142+
var qrankDb = QrankDb.fromCsv(sourcesDir.resolve("qrank.csv.gz"));
141143

142-
planetiler.setProfile(new Basemap(earthWaterBounds, naturalEarthDb)).setOutput(Path.of(area + ".pmtiles")).run();
144+
planetiler.setProfile(new Basemap(earthWaterBounds, naturalEarthDb, qrankDb)).setOutput(Path.of(area + ".pmtiles"))
145+
.run();
143146
}
144147
}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,40 @@
1-
package com.protomaps.basemap.feature;public class QrankDb {
1+
package com.protomaps.basemap.feature;
2+
3+
import com.carrotsearch.hppc.LongLongHashMap;
4+
import java.io.*;
5+
import java.nio.file.Path;
6+
import java.util.zip.GZIPInputStream;
7+
8+
public class QrankDb {
9+
10+
private LongLongHashMap db;
11+
12+
public QrankDb(LongLongHashMap db) {
13+
this.db = db;
14+
}
15+
16+
public long get(long wikidataId) {
17+
return this.db.get(wikidataId);
18+
}
19+
20+
public static QrankDb fromCsv(Path csvPath) throws IOException {
21+
GZIPInputStream gzip = new GZIPInputStream(new FileInputStream(csvPath.toFile()));
22+
BufferedReader br = new BufferedReader(new InputStreamReader(gzip));
23+
24+
String content;
25+
long startTime = System.nanoTime();
26+
27+
LongLongHashMap db = new LongLongHashMap();
28+
br.readLine(); // header
29+
while ((content = br.readLine()) != null) {
30+
var split = content.split(",");
31+
long id = Long.parseLong(split[0].substring(1));
32+
long rank = Long.parseLong(split[1]);
33+
db.put(id, rank);
34+
}
35+
long endTime = System.nanoTime();
36+
long elapsedTimeMillis = (endTime - startTime) / 1_000_000;
37+
System.out.println(elapsedTimeMillis);
38+
return new QrankDb(db);
39+
}
240
}

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

+7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.onthegomap.planetiler.util.ZoomFunction;
1414
import com.protomaps.basemap.feature.CountryInfos;
1515
import com.protomaps.basemap.feature.FeatureId;
16+
import com.protomaps.basemap.feature.NaturalEarthDb;
1617
import com.protomaps.basemap.feature.RegionInfos;
1718
import com.protomaps.basemap.names.NeNames;
1819
import com.protomaps.basemap.names.OsmNames;
@@ -23,6 +24,12 @@
2324

2425
public class Places implements ForwardingProfile.FeatureProcessor, ForwardingProfile.FeaturePostProcessor {
2526

27+
private NaturalEarthDb naturalEarthDb;
28+
29+
public Places(NaturalEarthDb naturalEarthDb) {
30+
this.naturalEarthDb = naturalEarthDb;
31+
}
32+
2633
@Override
2734
public String name() {
2835
return "places";

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

+17
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,19 @@
1010
import com.onthegomap.planetiler.reader.SourceFeature;
1111
import com.onthegomap.planetiler.util.ZoomFunction;
1212
import com.protomaps.basemap.feature.FeatureId;
13+
import com.protomaps.basemap.feature.QrankDb;
1314
import com.protomaps.basemap.names.OsmNames;
1415
import java.util.List;
1516
import java.util.concurrent.atomic.AtomicInteger;
1617

1718
public class Pois implements ForwardingProfile.FeatureProcessor, ForwardingProfile.FeaturePostProcessor {
1819

20+
private QrankDb qrankDb;
21+
22+
public Pois (QrankDb qrankDb) {
23+
this.qrankDb = qrankDb;
24+
}
25+
1926
@Override
2027
public String name() {
2128
return "pois";
@@ -51,6 +58,16 @@ public void processFeature(SourceFeature sf, FeatureCollector features) {
5158
String kindDetail = "";
5259
Integer minZoom = 15;
5360

61+
String wikidata = sf.getString("wikidata");
62+
if (wikidata != null) {
63+
try {
64+
long wikidataId = Long.parseLong(wikidata.substring(1));
65+
qrankDb.get(wikidataId);
66+
} catch (NumberFormatException e) {
67+
// do nothing
68+
}
69+
}
70+
5471
if (sf.hasTag("aeroway", "aerodrome")) {
5572
kind = sf.getString("aeroway");
5673
minZoom = 13;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ abstract class LayerTest {
1818
final PlanetilerConfig params = PlanetilerConfig.defaults();
1919
final Stats stats = Stats.inMemory();
2020
final FeatureCollector.Factory featureCollectorFactory = new FeatureCollector.Factory(params, stats);
21-
final Basemap profile = new Basemap(null, null);
21+
final Basemap profile = new Basemap(null, null, null);
2222

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

0 commit comments

Comments
 (0)