kopia lustrzana https://github.com/onthegomap/planetiler
Add `quickstart.sh` script to run with recommended settings (#318)
rodzic
4cc139a603
commit
9e0eec93c8
|
@ -127,3 +127,28 @@ jobs:
|
|||
run: ./scripts/test-release.sh CI_ONLY
|
||||
env:
|
||||
SKIP_EXAMPLE_PROJECT: true
|
||||
|
||||
quickstart:
|
||||
name: Quickstart script
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
- name: Cache data/sources
|
||||
uses: ./.github/cache-sources-action
|
||||
- name: Set up JDK
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: 17
|
||||
distribution: 'temurin'
|
||||
cache: 'maven'
|
||||
|
||||
- name: quickstart.sh --build
|
||||
run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --build && ./scripts/check-monaco.sh data/output.mbtiles
|
||||
- name: quickstart.sh --jar
|
||||
run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --jar && ./scripts/check-monaco.sh data/output.mbtiles
|
||||
# run docker last since it creates temp dirs with root user
|
||||
- name: quickstart.sh --docker
|
||||
run: rm -rf data/output.mbtiles data/tmp && ./quickstart.sh monaco --docker && ./scripts/check-monaco.sh data/output.mbtiles
|
||||
|
|
|
@ -55,7 +55,7 @@ public class Arguments {
|
|||
/**
|
||||
* Returns arguments parsed from command-line arguments.
|
||||
* <p>
|
||||
* For example to set {@code key=value}: {@code java -jar ... key=value}
|
||||
* For example to set {@code key=value}: {@code java -jar ... key=value} or {@code java -jar ... --key value}
|
||||
* <p>
|
||||
* Or to set {@code key=true}: {@code java -jar ... --key}
|
||||
*
|
||||
|
@ -64,14 +64,23 @@ public class Arguments {
|
|||
*/
|
||||
public static Arguments fromArgs(String... args) {
|
||||
Map<String, String> parsed = new HashMap<>();
|
||||
for (String arg : args) {
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
String arg = args[i].strip();
|
||||
String[] kv = arg.split("=", 2);
|
||||
String key = kv[0].replaceAll("^[\\s-]+", "");
|
||||
if (kv.length == 2) {
|
||||
String key = kv[0].replaceAll("^[\\s-]+", "");
|
||||
String value = kv[1];
|
||||
parsed.put(key, value);
|
||||
} else if (kv.length == 1) {
|
||||
parsed.put(kv[0].replaceAll("^[\\s-]+", ""), "true");
|
||||
if (arg.startsWith("-")) {
|
||||
if (i >= args.length - 1 || args[i + 1].strip().startsWith("-")) {
|
||||
parsed.put(key, "true");
|
||||
} else {
|
||||
parsed.put(key, args[++i].strip());
|
||||
}
|
||||
} else {
|
||||
parsed.put(key, "true");
|
||||
}
|
||||
}
|
||||
}
|
||||
return of(parsed);
|
||||
|
|
|
@ -169,4 +169,16 @@ class ArgumentsTest {
|
|||
"--force_download=true"
|
||||
).getBoolean("force_download", "force", false));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSpaceBetweenArgs() {
|
||||
Arguments args = Arguments.fromArgs(
|
||||
"--key value --key2 value2 --force1 --force2".split("\\s+")
|
||||
);
|
||||
|
||||
assertEquals("value", args.getString("key", "key", null));
|
||||
assertEquals("value2", args.getString("key2", "key2", null));
|
||||
assertTrue(args.getBoolean("force1", "force1", false));
|
||||
assertTrue(args.getBoolean("force2", "force2", false));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
AREA="${1:-monaco}"
|
||||
shift || echo ""
|
||||
|
||||
echo "Will build planetiler, download sources for ${AREA}, and make a map."
|
||||
echo "This requires at least 1GB of disk space. Press Ctrl+C to exit..."
|
||||
sleep 5
|
||||
|
||||
echo "Building..."
|
||||
./mvnw -DskipTests=true --projects planetiler-dist -am package
|
||||
|
||||
echo "Running..."
|
||||
java -jar planetiler-dist/target/*with-deps.jar --force --download --area="${AREA}" $*
|
|
@ -0,0 +1,129 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Usage: quickstart.sh {--docker,--jar,--source} {--area=planet,monaco,massachusetts,etc.} [--memory=5g] other args...
|
||||
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
set -o nounset
|
||||
|
||||
JAVA="${JAVA:-java}"
|
||||
METHOD="build"
|
||||
AREA="monaco"
|
||||
STORAGE="mmap"
|
||||
PLANETILER_ARGS=("--download" "--force")
|
||||
MEMORY=""
|
||||
DRY_RUN=""
|
||||
VERSION="latest"
|
||||
DOCKER_DIR="$(pwd)/data"
|
||||
|
||||
# Handle quickstart.sh planet or quickstart.sh monaco
|
||||
case $1 in
|
||||
-*) ;;
|
||||
*) AREA="$1"; shift ;;
|
||||
esac
|
||||
|
||||
# Parse args into env vars
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--docker) METHOD="docker" ;;
|
||||
--dockerdir=*) DOCKER_DIR="${1#*=}" ;;
|
||||
--dockerdir) DOCKER_DIR="$2"; shift ;;
|
||||
--jar) METHOD="jar" ;;
|
||||
--build|--source) METHOD="build" ;;
|
||||
--version=*) VERSION="${1#*=}" ;;
|
||||
--version) VERSION="$2"; shift ;;
|
||||
|
||||
--area=*) AREA="${1#*=}" ;;
|
||||
--area) AREA="$2"; shift ;;
|
||||
--planet) AREA="planet" ;;
|
||||
|
||||
--memory=*) MEMORY="${MEMORY:-"-Xmx${1#*=}"}" ;;
|
||||
--memory) MEMORY="${MEMORY:-"-Xmx$2"}"; shift ;;
|
||||
--ram) STORAGE="ram" ;;
|
||||
|
||||
--dry-run) DRY_RUN="true" ;;
|
||||
|
||||
*) PLANETILER_ARGS+=("$1") ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
PLANETILER_ARGS+=("--area=$AREA")
|
||||
PLANETILER_ARGS+=("--storage=$STORAGE")
|
||||
|
||||
# Configure memory settings based on the area being built
|
||||
case $AREA in
|
||||
planet)
|
||||
PLANETILER_ARGS+=("--nodemap-type=array" "--download-threads=20" "--download-chunk-size-mb=500")
|
||||
case "$STORAGE" in
|
||||
ram) MEMORY="${MEMORY:-"-Xmx150g"}" ;;
|
||||
mmap) MEMORY="${MEMORY:-"-Xmx30g -Xmn15g"}" ;;
|
||||
esac
|
||||
;;
|
||||
monaco)
|
||||
# Use mini extracts for monaco
|
||||
PLANETILER_ARGS+=("--water-polygons-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/water-polygons-split-3857.zip")
|
||||
PLANETILER_ARGS+=("--water-polygons-path=data/sources/monaco-water.zip")
|
||||
PLANETILER_ARGS+=("--natural-earth-url=https://github.com/onthegomap/planetiler/raw/main/planetiler-core/src/test/resources/natural_earth_vector.sqlite.zip")
|
||||
PLANETILER_ARGS+=("--natural-earth-path=data/sources/monaco-natural_earth_vector.sqlite.zip")
|
||||
;;
|
||||
esac
|
||||
# For extracts, use default nodemap type (sortedtable) and -Xmx (25% of RAM up to 25GB) and hope for the best.
|
||||
# You can set --memory=5g if you want to change it.
|
||||
|
||||
JVM_ARGS="-XX:+UseParallelGC $MEMORY"
|
||||
|
||||
echo "Running planetiler with:"
|
||||
echo " METHOD=\"$METHOD\" (change with --docker --jar or --build)"
|
||||
echo " JVM_ARGS=\"${JVM_ARGS}\" (change with --memory=Xg)"
|
||||
echo " PLANETILER_ARGS=\"${PLANETILER_ARGS[*]}\""
|
||||
echo " DRY_RUN=\"${DRY_RUN:-false}\""
|
||||
echo ""
|
||||
|
||||
if [ "$DRY_RUN" == "true" ]
|
||||
then
|
||||
echo "Without --dry-run, will run commands:"
|
||||
else
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
function run() {
|
||||
echo "$ $*"
|
||||
if [ "$DRY_RUN" != "true" ]
|
||||
then
|
||||
eval "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
function check_java_version() {
|
||||
if [ "$DRY_RUN" != "true" ]
|
||||
then
|
||||
if [ -z "$(which java)" ]; then
|
||||
echo "java not found on path"
|
||||
exit 1
|
||||
else
|
||||
OUTPUT="$($JAVA -jar "$1" --help 2>&1 || echo OK)"
|
||||
if [[ "$OUTPUT" =~ "UnsupportedClassVersionError" ]]; then
|
||||
echo "Wrong version of java installed, need at least 16 but found:"
|
||||
$JAVA --version
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Run planetiler using docker, jar file, or build from source
|
||||
case $METHOD in
|
||||
docker)
|
||||
run docker run -e JAVA_TOOL_OPTIONS=\'"${JVM_ARGS}"\' -v "$DOCKER_DIR":/data "ghcr.io/onthegomap/planetiler:${VERSION}" "${PLANETILER_ARGS[@]}"
|
||||
;;
|
||||
jar)
|
||||
run wget -nc "https://github.com/onthegomap/planetiler/releases/${VERSION}/download/planetiler.jar"
|
||||
check_java_version planetiler.jar
|
||||
run "$JAVA" "${JVM_ARGS}" -jar planetiler.jar "${PLANETILER_ARGS[@]}"
|
||||
;;
|
||||
build)
|
||||
run ./mvnw -DskipTests --projects planetiler-dist -am clean package
|
||||
run "$JAVA" "${JVM_ARGS}" -jar planetiler-dist/target/*with-deps.jar "${PLANETILER_ARGS[@]}"
|
||||
;;
|
||||
esac
|
Ładowanie…
Reference in New Issue