Skip to content

Instantly share code, notes, and snippets.

@naogify
Last active September 4, 2024 07:56
Show Gist options
  • Save naogify/bcc1dfb17952e6e7f5c6b4c7fad51967 to your computer and use it in GitHub Desktop.
Save naogify/bcc1dfb17952e6e7f5c6b4c7fad51967 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -ex
# 現在のディレクトリ内のすべての .mbtiles ファイルに対して処理を行う
for MBTILES_FILE in *.mbtiles; do
# SQLite3 を使用して MBTiles ファイルからメタデータを取得
NAME=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='name';")
DESCRIPTION=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='description';")
VERSION=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='version';")
ATTRIBUTION=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='attribution';")
MINZOOM=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='minzoom';")
MAXZOOM=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='maxzoom';")
BOUNDS=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='bounds';")
CENTER=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='center';")
JSON_DATA=$(sqlite3 "$MBTILES_FILE" "SELECT value FROM metadata WHERE name='json';")
# エラーチェック
if [ -z "$NAME" ] || [ -z "$MINZOOM" ] || [ -z "$MAXZOOM" ]; then
echo "Error: $MBTILES_FILE does not have complete metadata. Skipping..."
continue
fi
# vector_layers の抽出
VECTOR_LAYERS=$(echo $JSON_DATA | jq '.vector_layers')
# 出力する tile.json のファイル名を設定
TILEJSON_FILE="${MBTILES_FILE%.mbtiles}.tile.json"
# tile.json を生成
cat <<EOF > "$TILEJSON_FILE"
{
"tilejson": "3.0.0",
"name": "$NAME",
"description": "$DESCRIPTION",
"version": "$VERSION",
"attribution": "$ATTRIBUTION",
"scheme": "xyz",
"tiles": [
"http://yourserver.com/{z}/{x}/{y}.pbf"
],
"minzoom": $MINZOOM,
"maxzoom": $MAXZOOM,
"bounds": [$BOUNDS],
"center": [$CENTER],
"vector_layers": $VECTOR_LAYERS,
"legend": "",
"template": "",
"grids": [],
"data": [],
"private": false
}
EOF
echo "$TILEJSON_FILE has been generated successfully for $MBTILES_FILE."
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment