Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
tmp
dist
demo/style/sprites/demo*
demo/style/sprites/demo*
planetiler/data
planetiler/target
*.pmtiles
14 changes: 14 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Builder",
"request": "launch",
"mainClass": "org.waysidemapping.beefsteak.Builder",
"cwd": "${workspaceFolder}/planetiler",
"projectName": "beefsteak-builder",
"args": "--download --force"
}
]
}
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"java.compile.nullAnalysis.mode": "automatic"
}
2 changes: 2 additions & 0 deletions planetiler/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
data/
target/
14 changes: 14 additions & 0 deletions planetiler/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

# Install dependencies
RUN apt-get update && apt-get install -y \
openjdk-25-jdk \
maven \
&& rm -rf /var/lib/apt/lists/*

# Files must be copied here at runtime using --mount
WORKDIR /usr/src/app

CMD ["/bin/bash"]
8 changes: 8 additions & 0 deletions planetiler/package.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/bin/bash

set -x # echo on
set -euo pipefail

mvn dependency:go-offline -B

mvn package -B
108 changes: 108 additions & 0 deletions planetiler/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<planetiler.version>0.10.2</planetiler.version>
<mainClass>org.waysidemapping.beefsteak.Builder</mainClass>
</properties>

<groupId>org.waysidemapping.beefsteak</groupId>
<artifactId>beefsteak-builder</artifactId>
<version>HEAD</version>

<name>Beefsteak Builder</name>

<repositories>
<!-- Planetiler depends on geotools for shapefile processing, which is not in maven central. Add here: -->
<repository>
<id>osgeo</id>
<name>OSGeo Release Repository</name>
<url>https://repo.osgeo.org/repository/release/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>com.onthegomap.planetiler</groupId>
<artifactId>planetiler-core</artifactId>
<version>${planetiler.version}</version>
</dependency>
</dependencies>

<build>
<plugins>
<!-- give an easier to read error message when trying to build with jdk <21 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<id>enforce-java</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>21</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>

<!-- Create an executable jar from "mvn package" goal -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.4.2</version>
<dependencies>
<dependency>
<groupId>com.onthegomap.planetiler</groupId>
<artifactId>planetiler-core</artifactId>
<version>${planetiler.version}</version>
</dependency>
</dependencies>

<configuration>
<archive>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
<manifest>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>with-deps</descriptorRef>
</descriptorRefs>
</configuration>

<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
88 changes: 88 additions & 0 deletions planetiler/src/main/java/org/waysidemapping/beefsteak/Builder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package org.waysidemapping.beefsteak;

import com.onthegomap.planetiler.ForwardingProfile;
import com.onthegomap.planetiler.Planetiler;
import com.onthegomap.planetiler.config.Arguments;
import com.onthegomap.planetiler.reader.osm.OsmElement;
import com.onthegomap.planetiler.reader.osm.OsmRelationInfo;

import org.waysidemapping.beefsteak.util.RelationMembershipIndex;
import org.waysidemapping.beefsteak.layers.Areas;
import org.waysidemapping.beefsteak.layers.Lines;
import org.waysidemapping.beefsteak.layers.Points;

import java.io.IOException;
import java.nio.file.Path;
import java.util.List;

public class Builder extends ForwardingProfile {

private final RelationMembershipIndex relationIndex =
new RelationMembershipIndex();

@Override
public List<OsmRelationInfo> preprocessOsmRelation(OsmElement.Relation relation) {
relationIndex.preprocessRelation(relation);
return null;
}

public Builder(Config config) {
var layers = List.of(
new Points(config, relationIndex),
new Lines(config, relationIndex),
new Areas(config)
);

for (var layer : layers) {
registerHandler(layer);
}
}

@Override
public String name() {
return "Beefsteak Tiles";
}

@Override
public String description() {
return "Server-farm-to-table OpenStreetMap tiles";
}

@Override
public String version() {
return "0.0.1";
}

@Override
public boolean isOverlay() {
return false;
}

@Override
public String attribution() {
return "Map data from <a href='https://www.openstreetmap.org/copyright' target='_blank'>OpenStreetMap</a>";
}

public static void main(String[] args) throws IOException {
run(Arguments.fromArgsOrConfigFile(args));
}

static void run(Arguments args) throws IOException {
args = args.orElse(Arguments.of("maxzoom", 16));
String area = args.getString("area", "geofabrik area to download", "rhode-island");

var planetiler = Planetiler.create(args)
.addOsmSource("osm", Path.of("data", "sources", area + ".osm.pbf"), "geofabrik:" + area);

Path schemaDir = Path.of(
args.getString(
"schema-dir",
"directory containing tagging schema data files",
"../server/schema_data"
)
);
Config config = Config.load(schemaDir);

planetiler.setProfile(new Builder(config)).setOutput("data/beefsteak.pmtiles").run();
}
}
36 changes: 36 additions & 0 deletions planetiler/src/main/java/org/waysidemapping/beefsteak/Config.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.waysidemapping.beefsteak;

import org.waysidemapping.beefsteak.util.NewlineSeparatedFileSetLoader;

import java.nio.file.Path;
import java.util.Set;

public record Config (
Set<String> lowZoomAreaKeys,
Set<String> areaKeyPrefixes,
Set<String> areaKeys,
Set<String> lowZoomLineKeys,
Set<String> lineKeyPrefixes,
Set<String> lineKeys,
Set<String> pointKeyPrefixes,
Set<String> pointKeys,
Set<String> relationKeyPrefixes,
Set<String> relationKeys
){

public static Config load(Path dir) {
return new Config(
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("area_key_low_zoom.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("area_key_prefix.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("area_key.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("line_key_low_zoom.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("line_key_prefix.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("line_key.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("point_key_prefix.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("point_key.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("relation_key_prefix.txt")),
NewlineSeparatedFileSetLoader.loadSet(dir.resolve("relation_key.txt"))
);
}

}
Loading