mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Tilesets written with --output-format=mlt could not be read back by any of tippecanoe's own tools, which made MLT a dead end rather than a tile format. Build the mlt-cpp decoder from the vendored maplibre-tile-spec submodule alongside the encoder, and convert a decoded MapLibre Tile back into the equivalent mvt_tile: geometry, feature ids, and property columns. MLT rings come back explicitly closed, so the repeated final point becomes an MVT closepath, and the property columns, which are held in an unordered map, are sorted by name so that the attributes of a decoded tile come out in a stable order. Rather than adding an option to each tool, mvt_tile::decode() detects the encoding and dispatches, so everywhere tippecanoe already reads a vector tile can read MLT. An MLT tile begins with a varint layer length followed by a varint layer tag whose only defined value is 1, while an MVT tile is a protobuf whose only field is the repeated layer field 3, so it begins with 0x1a followed by a layer length that can never be as short as the one byte that would be needed to look like an MLT layer tag. Tile directories also needed a fix: enumerate_dirtiles() recognized .mlt file names but still recorded .pbf as the extension to read them back with, so decoding an MLT directory failed to find any of its tiles. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LxhELiLtpUFwrPSWwTYdHG
18 lines
505 B
C++
18 lines
505 B
C++
#ifndef MLT_HPP
|
|
#define MLT_HPP
|
|
|
|
#include <string>
|
|
#include "mvt.hpp"
|
|
|
|
std::string encode_as_mlt(const mvt_tile &tile, bool sort_features, bool pretessellate);
|
|
|
|
// Does this (already decompressed) tile look like MapLibre Tile rather than
|
|
// Mapbox Vector Tile data?
|
|
bool is_mlt(const std::string &message);
|
|
|
|
// Decode a MapLibre Tile into the equivalent vector tile, returning false
|
|
// (and complaining to stderr) if it can't be parsed.
|
|
bool decode_mlt(const std::string &message, mvt_tile &out);
|
|
|
|
#endif
|