maplibre / maplibre-tile-spec

Next generation vector tiles format
Apache License 2.0
136 stars 11 forks source link

Decoding error "physical level technique not yet supported: ALP" in IntegerDecoder.decodeIntStream #148

Open springmeyer opened 1 month ago

springmeyer commented 1 month ago

With the latest code, in the vectorized & non-vectorized paths, we are hitting:

java.lang.IllegalArgumentException: Specified physical level technique not yet supported: ALP
    at com.mlt.decoder.IntegerDecoder.decodeIntStream(IntegerDecoder.java:86)
    at com.mlt.decoder.GeometryDecoder.decodeGeometryColumn(GeometryDecoder.java:29)
    at com.mlt.decoder.MltDecoder.decodeMlTile(MltDecoder.java:77)
    at com.mlt.tools.Encode.main(Encode.java:269)

Testcase:

cd java
./gradlew cli
git clone git@github.com:mapbox/mvt-fixtures.git
java -jar build/libs/encode.jar -mvt mvt-fixtures/real-world/norway/12-2174-1070.mvt -decode -vectorized

This does not happen with the -advanced flag. So, seems like a bug in varint handling

springmeyer commented 1 month ago

Curiously, I still get an error with latest main with this tile, but it is different:

java.lang.IndexOutOfBoundsException
    at java.base/java.nio.Buffer.checkIndex(Buffer.java:743)
    at java.base/java.nio.HeapByteBuffer.put(HeapByteBuffer.java:218)
    at com.mlt.decoder.vectorized.VectorizedDecodingUtils.decodeByteRle(VectorizedDecodingUtils.java:56)
    at com.mlt.decoder.vectorized.VectorizedDecodingUtils.decodeBooleanRle(VectorizedDecodingUtils.java:19)
    at com.mlt.decoder.vectorized.VectorizedPropertyDecoder.decodeToRandomAccessFormat(VectorizedPropertyDecoder.java:137)
    at com.mlt.decoder.MltDecoder.decodeMlTileVectorized(MltDecoder.java:164)
    at com.mlt.tools.Encode.main(Encode.java:254)
springmeyer commented 1 month ago

This is still present after #158. The error impacts both the vectorized and non-vectorized pathways. But the exception is different.

Exception in vectorized:

 java -jar build/libs/encode.jar -mvt ~/projects/mvt-fixtures/real-world/norway/12-2174-1070.mvt -decode -vectorized
java.lang.IndexOutOfBoundsException
    at java.base/java.nio.Buffer.checkIndex(Buffer.java:743)
    at java.base/java.nio.HeapByteBuffer.put(HeapByteBuffer.java:218)
    at com.mlt.decoder.vectorized.VectorizedDecodingUtils.decodeByteRle(VectorizedDecodingUtils.java:56)
    at com.mlt.decoder.vectorized.VectorizedDecodingUtils.decodeBooleanRle(VectorizedDecodingUtils.java:19)
    at com.mlt.decoder.vectorized.VectorizedPropertyDecoder.decodeToRandomAccessFormat(VectorizedPropertyDecoder.java:137)
    at com.mlt.decoder.MltDecoder.decodeMlTileVectorized(MltDecoder.java:164)
    at com.mlt.tools.Encode.main(Encode.java:254)

Exception in non-vectorized:

java -jar build/libs/encode.jar -mvt ~/projects/mvt-fixtures/real-world/norway/12-2174-1070.mvt -decode            
java.lang.IllegalArgumentException: Specified physical level technique not yet supported: NONE
    at com.mlt.decoder.IntegerDecoder.decodeIntStream(IntegerDecoder.java:86)
    at com.mlt.decoder.GeometryDecoder.decodeGeometryColumn(GeometryDecoder.java:29)
    at com.mlt.decoder.MltDecoder.decodeMlTile(MltDecoder.java:77)
    at com.mlt.tools.Encode.main(Encode.java:269)