Mapnik implemention of Mapbox Vector Tile specification

Overview

mapnik-vector-tile

A Mapnik implemention of Mapbox Vector Tile specification.

Provides C++ headers that support rendering geodata into vector tiles and rendering vector tiles into images.

  • Master: Build Status
  • 0.6.x series: Build Status

codecov

Depends

Implementation details

Vector tiles in this code represent a direct serialization of Mapnik layers optimized for space efficient storage and fast deserialization. For those familiar with the Mapnik API vector tiles here can be considered a named array of mapnik::featureset_ptr whose geometries have been pre-tiled.

For more details see vector-tile-spec.

Building from source

If you do not need to build against an external mapnik, just type:

make

This will download all deps (including Mapnik) and compile against them.

To build and test in debug mode do:

make debug test-debug

If you have Mapnik, libprotobuf, and all the Mapnik deps already installed on your system then you can build against them with:

make release_base

Note: SSE optimizations are enabled by default. If you want to turn them off do:

SSE_MATH=false make

If building against an external Mapnik please know that Mapnik Vector Tile does not currently support Mapnik 3.1.x.

  • mapnik-vector-tile >=1.4.x depends on Mapnik >=v3.0.14
  • mapnik-vector-tile >=1.0.x depends on Mapnik >=v3.0.11
  • mapnik-vector-tile 1.0.0 to 0.7.x depends on Mapnik v3.0.x (until 3.0.0 is released this means latest mapnik HEAD)
  • mapnik-vector-tile 0.6.x and previous work with Mapnik v2.2.x or v2.3.x
  • You will need libmapnik and mapnik-config available
  • Protobuf: libprotobuf and protoc

Tests

Run the C++ tests like:

make test

Examples

C++

See examples in examples/c++

Authors

See also

Issues
  • vector_tile.pb.h:12:2: error: #error This file was generated by a newer version of protoc

    vector_tile.pb.h:12:2: error: #error This file was generated by a newer version of protoc

    Hi, While I tried to make I faced this error

    In file included from Release/obj/gen/vector_tile.pb.cc:5:0: Release/obj/gen/vector_tile.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is #error This file was generated by a newer version of protoc which is

    I tried both protobuf 3.3.0 and protobuf 3.4.1 but there was not any change, where am I doing wrong?

    opened by am2222 34
  • Error: Vector subscript out of range

    Error: Vector subscript out of range

    Hi! I'm trying mapnik (branch v3.0.x) and mapnik-vector-tile (v1.2.2). I build x64 debug configuration for Windows. My test code:

    mapnik::datasource_cache::instance().register_datasource(mapnik_dir + "/mapnik/input/shape.input");
    mapnik::Map m(256, 256);
    load_map(m, "style.xml");	
    m.zoom_all();
    mapnik::vector_tile_impl::processor ren(m);
    mapnik::vector_tile_impl::merc_tile tile(0, 0, 0, 1024);
    ren.update_tile(tile);
    

    My simplified mapnik style:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE Map[]>
    <Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m [email protected] +wktext +no_defs +over" background-color="#b5d0d0">
    
    <Parameters>
      <Parameter name="scale">1</Parameter>
      <Parameter name="metatile">2</Parameter>
      <Parameter name="name"><![CDATA[OpenStreetMap Carto]]></Parameter>
      <Parameter name="description"><![CDATA[A general-purpose OpenStreetMap mapnik style, in CartoCSS]]></Parameter>
      <Parameter name="bounds">-180,-85.05112877980659,180,85.05112877980659</Parameter>
      <Parameter name="center">0,0,4</Parameter>
      <Parameter name="format">png</Parameter>
      <Parameter name="minzoom">0</Parameter>
      <Parameter name="maxzoom">22</Parameter>
    </Parameters>
    <Style name="world" filter-mode="first">
      <Rule>
        <MinScaleDenominator>750000</MinScaleDenominator>
        <PolygonSymbolizer fill="#f2efe9" />
      </Rule>
    </Style>
    <Layer name="world"
      minimum-scale-denominator="750000"
      srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m [email protected] +wktext +no_defs +over">
        <StyleName>world</StyleName>
        <Datasource>
           <Parameter name="file"><![CDATA[Path to\simplified_land_polygons.shp]]></Parameter>
           <Parameter name="type"><![CDATA[shape]]></Parameter>
        </Datasource>
      </Layer>
    
    </Map>
    

    I get an error like this? call stack:

    >	test.exe!std::vector<ClipperLib::OutRec * __ptr64,std::allocator<ClipperLib::OutRec * __ptr64> >::operator[](unsigned __int64 _Pos) Line 1237	C++
     	test.exe!ClipperLib::Clipper::AppendPolygon(ClipperLib::TEdge * e1, ClipperLib::TEdge * e2) Line 2735	C++
     	test.exe!ClipperLib::Clipper::AddLocalMaxPoly(ClipperLib::TEdge * e1, ClipperLib::TEdge * e2, const mapnik::geometry::point<__int64> & Pt) Line 2267	C++
     	test.exe!ClipperLib::Clipper::ProcessHorizontal(ClipperLib::TEdge * horzEdge) Line 3103	C++
     	test.exe!ClipperLib::Clipper::ProcessHorizontals() Line 2881	C++
     	test.exe!ClipperLib::Clipper::ProcessEdgesAtTopOfScanbeam(const __int64 topY) Line 3434	C++
     	test.exe!ClipperLib::Clipper::ExecuteInternal() Line 1952	C++
     	test.exe!ClipperLib::Clipper::Execute(ClipperLib::ClipType clipType, ClipperLib::PolyTree & polytree, ClipperLib::PolyFillType subjFillType, ClipperLib::PolyFillType clipFillType) Line 1907	C++
     	test.exe!mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor>::operator()(mapnik::geometry::polygon<__int64,mapnik::geometry::rings_container> & geom) Line 292	C++
     	test.exe!mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> >::operator()(const mapnik::geometry::polygon<double,mapnik::geometry::rings_container> & geom) Line 238	C++
     	test.exe!mapbox::util::detail::dispatcher<mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & __ptr64,mapnik::geometry::geometry<double>,void,mapnik::geometry::polygon<double,mapnik::geometry::rings_container>,mapnik::geometry::multi_point<double>,mapnik::geometry::multi_line_string<double>,mapnik::geometry::multi_polygon<double>,mapnik::geometry::geometry_collection<double> >::apply_const(const mapnik::geometry::geometry<double> & v, mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & f) Line 313	C++
     	test.exe!mapbox::util::detail::dispatcher<mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & __ptr64,mapnik::geometry::geometry<double>,void,mapnik::geometry::line_string<double>,mapnik::geometry::polygon<double,mapnik::geometry::rings_container>,mapnik::geometry::multi_point<double>,mapnik::geometry::multi_line_string<double>,mapnik::geometry::multi_polygon<double>,mapnik::geometry::geometry_collection<double> >::apply_const(const mapnik::geometry::geometry<double> & v, mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & f) Line 319	C++
     	test.exe!mapbox::util::detail::dispatcher<mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & __ptr64,mapnik::geometry::geometry<double>,void,mapnik::geometry::point<double>,mapnik::geometry::line_string<double>,mapnik::geometry::polygon<double,mapnik::geometry::rings_container>,mapnik::geometry::multi_point<double>,mapnik::geometry::multi_line_string<double>,mapnik::geometry::multi_polygon<double>,mapnik::geometry::geometry_collection<double> >::apply_const(const mapnik::geometry::geometry<double> & v, mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & f) Line 319	C++
     	test.exe!mapbox::util::detail::dispatcher<mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & __ptr64,mapnik::geometry::geometry<double>,void,mapnik::geometry::geometry_empty,mapnik::geometry::point<double>,mapnik::geometry::line_string<double>,mapnik::geometry::polygon<double,mapnik::geometry::rings_container>,mapnik::geometry::multi_point<double>,mapnik::geometry::multi_line_string<double>,mapnik::geometry::multi_polygon<double>,mapnik::geometry::geometry_collection<double> >::apply_const(const mapnik::geometry::geometry<double> & v, mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & f) Line 319	C++
     	test.exe!mapbox::util::variant<mapnik::geometry::geometry_empty,mapnik::geometry::point<double>,mapnik::geometry::line_string<double>,mapnik::geometry::polygon<double,mapnik::geometry::rings_container>,mapnik::geometry::multi_point<double>,mapnik::geometry::multi_line_string<double>,mapnik::geometry::multi_polygon<double>,mapnik::geometry::geometry_collection<double> >::visit<mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & __ptr64,mapnik::geometry::geometry<double>,void>(const mapnik::geometry::geometry<double> & v, mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & f) Line 865	C++
     	test.exe!mapnik::util::apply_visitor<mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & __ptr64,mapnik::geometry::geometry<double> >(mapnik::vector_tile_impl::transform_visitor<mapnik::vector_tile_impl::vector_tile_strategy,mapnik::vector_tile_impl::geometry_clipper<mapnik::vector_tile_impl::geometry_to_feature_pbf_visitor> > & f, const mapnik::geometry::geometry<double> & v) Line 43	C++
     	test.exe!mapnik::vector_tile_impl::detail::create_geom_layer(mapnik::vector_tile_impl::tile_layer & layer, double simplify_distance, double area_threshold, mapnik::vector_tile_impl::polygon_fill_type fill_type, bool strictly_simple, bool multi_polygon_union, bool process_all_rings) Line 161	C++
     	test.exe!mapnik::vector_tile_impl::processor::update_tile(mapnik::vector_tile_impl::tile & t, double scale_denom, int offset_x, int offset_y) Line 311	C++
     	test.exe!main(int argc, char * * argv) Line 43	C++
    

    This is a bug or am I doing something wrong? (ClipperLib is here) Thanx!

    opened by DiabloRusso 33
  • Unimplemented type: 4 while decoding tiles with japanese characters

    Unimplemented type: 4 while decoding tiles with japanese characters

    Hi, I am using mapbox GL JS (including newest 1.0.0. and some older versions) with my own vector tiles, generated with mapnik-vector-tile from OSM data. Works fine with vast majority of tiles, but I have noticed that some tiles in Japan are not rendered and console saying only Unimplemented type: 4. I tried to isolate the issue, and it seems to me, that is happens when feature property (name) contains japanese characters. I have no idea, what to do next about this - if this is bug in encoder (mapnik-vector-tile) or decoder (mapbox GL JS). But I can decode the tile without issues with protobuf-net and I can see japanese names in values just fine in debugger.

    See attached sample tile, layer road osm_13_7179_3254_broken.zip

    bug question 
    opened by rouen-sk 18
  • How to build mapnik vector tile on windows ?

    How to build mapnik vector tile on windows ?

    Hi,

    I'm trying to buid Mapnik vector tile on Windows. I'm able to build 'mapnik' using guidelines posted at https://github.com/mapbox/windows-builds.

    Is there is a how to steps to follow in order to build 'Mapnik with vector tile support' ?

    Thanks Noury

    opened by nouryf 17
  • occasional test failure in v2_spec branch

    occasional test failure in v2_spec branch

    Looks like we've still got some memory corruption lurking in the v2_spec branch. I'm seeing this happen sometimes when running make test:

    $ make test
    make[1]: Nothing to be done for `all'.
    ./build/Release/tests
    
    tests is a Catch v1.1 b3 host application.
    Run with -? for options
    
    -------------------------------------------------------------------------------
    geometries visual tests
    -------------------------------------------------------------------------------
    ../test/geometry_visual_test.cpp:265
    ...............................................................................
    
    ../test/geometry_visual_test.cpp:69: FAILED:
      CHECK( buffer2 == buffer )
    with expansion:
      "I
    ?????(? x"      ??ZF?>??>?? ?   ??  ?"?!?
      ==
      "I
    ??(??er"5   ??ZF?>??>?? ?   ??  ?"?!?
                                                      x"
    
    ../test/utils/geometry_equal.hpp:140: FAILED:
      REQUIRE( p.template get<0>().y == Approx(p.template get<1>().y) )
    with expansion:
      40.6390923571 == Approx( 40.6137897117 )
    
    ===============================================================================
    test cases:    181 |    180 passed | 1 failed
    assertions: 544800 | 544798 passed | 2 failed
    
    make: *** [test] Error 2
    

    /cc @flippmoke

    opened by springmeyer 16
  • Avoid encoding degenerate lines (preserve start/end vertex)

    Avoid encoding degenerate lines (preserve start/end vertex)

    It appears that with high tolerance settings the start and end vertex may be discarded when encoding lines. We need tests to ensure this cannot occur and fix any bugs around tolerance handling to prevent it.

    Should also take a look at #29 at the same time.

    Tasks include:

    • [x] - ensure that any internal move_to commands are preserved for multilines that happen to be encoded this way (b515cf754fcd1609).
    • [x] - ensure that move_to commands are never dropped (8950587). For example if two move_to commands are found in sequence we currently drop the second if the tolerance is such that it is not a valid movement. But this could create gaps - the last move_to in a sequence is the critical one to keep.
    • [x] - ensure that the last vertex in lines is never dropped no matter how high the tolerance (2664718)
    • [x] - fix tilelive-bridge tests after 2664718: https://gist.github.com/springmeyer/f04660a83823a03121cd
    • [x] - should we try to drop all but the last if multiple move_to are found in sequence?
    • [x] - ensure that the last vertex in polygons is never dropped no matter how high the tolerance
    • [x] - ensure that the line_to vertex before an internal move_to in lines is never dropped no matter how high the tolerance
    • [x] - ensure that the line_to vertex before an internal move_to in polygons is never dropped no matter how high the tolerance
    opened by springmeyer 16
  • Proj4 initialization crash on windows

    Proj4 initialization crash on windows

    We are seeing that processes that need to reproject data will crash on windows. This has likely be happening for some time (causing crashing for Mapbox Studio windows users). This may be a mapnik core problem in how Mapnik uses proj4. But so far it has only seemed to happen in Mapbox Studio (and therefore seems related to vector tiles). So, let's track this issue here for now.

    opened by springmeyer 14
  • Broken reprojection of layer extent when source != mercator

    Broken reprojection of layer extent when source != mercator

    This ticket is to track another regression in v0.8.x (after the move to using boost::geometry::transform) and therefore this is another followup to #111/#116 and #120.

    What I'm seeing is that the conversion of the buffered bbox to integer coordinates may throw. When fixing #116 I noticed this might throw but could not think of a case where the buffered bbox would be outside the range of proj4 enough to trigger a throw. That was naive as I've now found that is highly probable when dealing with source data in a different projection than mercator.

    Next steps:

    • How did this work before (in mapnik-vt v0.7.1)?
    • Should we be clipping the buffered box / buffered_query_ext to the layer extent / layer_ext2 (and if so, how?)
    • testcase (can use the NZ_Coastline_NZMG.shp from https://github.com/mapbox/mapbox-studio/issues/1390)
    • what can we learn from https://github.com/mapbox/node-wmshp/pull/9
    opened by springmeyer 13
  • [MVT] Query resolution based on 256 extent instead of vector_layer_extent

    [MVT] Query resolution based on 256 extent instead of vector_layer_extent

    Lately I've been investigating one issue around MVTs using the Postgis plugin to retrieve the geometries from the database and found that, when using the simplify_geometries parameter, the geometries are simplified considering a 256 pixel size, not a vector_layer_extent size.

    Consider the attached xml (postgis_simplification.txt), or this extract:

           <Parameter name="simplify_geometries"><![CDATA[true]]></Parameter>
           <Parameter name="twkb_encoding"><![CDATA[true]]></Parameter>
           <Parameter name="vector_layer_extent"><![CDATA[4096]]></Parameter>
    

    Following the twkb tolerance calculation when requesting a tile of zoom 12, (12,12,12) we should have:

    • Extent: 40075017 / 2^12 = 9783.939697
    • Resolution: $extent / 4096 = 2.388657153
    • Tolerance: POW(10, ROUND(LOG10($resolution)) - 1) = 0.1

    Instead we see this query:

    SELECT ST_AsTWKB(ST_Simplify(ST_RemoveRepeatedPoints("the_geom",10),10,true),-1) AS geom,"cartodb_id" FROM (SELECT 2 AS cartodb_id, 'SRID=3857;LINESTRING(0 20037508, 0 0, 0 10037508, 0 -10037508, 0 -20037508)'::geometry as the_geom) as cdbq WHERE "the_geom" && ST_SetSRID('BOX3D(-19959236.82582522 19871181.3692407,-19871181.3692407 19959236.82582522)'::box3d, 3857)
    

    Which comes from using 256 as the extent:

    • Extent: 40075017 / 2^12 = 9783.939697
    • Resolution: $extent / 256 = 38.21851444
    • Tolerance: POW(10, ROUND(LOG10($resolution)) - 1) = 10

    This means that for a 4096 tile we are having a tolerance 100 times bigger than expected which leads to oversimplification and partially breaking the ability of over-zooming. It is even more painful if you try to do some kind of one-tile-optimization (request a big part of the map with less or no simplification), for example requesting the tile (0,0,0) with an extent of 256*2^18 and simplifying in the client. As the requested extent isn't being considered, the geometries will just disappear due to the simplification.

    I've been investigating and this hasn't always been like this. It used to be just layer_extent_ / qw (which is what I expected and want in this case), but it was modified in 041aed410dd147b4beeebd1723f452268a018a83 to use image_size instead, and then modified to its current status in 75c4868d0900963c19e0adcd00ec8d5c87572a57 to use VT_LEGACY_IMAGE_SIZE: https://github.com/mapbox/mapnik-vector-tile/blob/61aebcbaf4552dc410a8bdbbe09f9e5d7cbbb076/src/vector_tile_layer.hpp#L331-L340

    @flippmoke Could you please shed some light on this? Is there any special requirement to maintain the 256 there? I've changed it locally and it passes all the tests. Should I open a PR with the change?

    opened by Algunenano 12
  • Polygon winding order & holes vs outer rings

    Polygon winding order & holes vs outer rings

    Do geometry rings have a defined winding order in vector tiles? E.g. counter-clockwise for outer rings and clockwise for rings? Or should I expect any order of any particular ring?

    Winding order isn't mentioned anywhere in spec, but some polygon algorithms depend on a certain winding order. Also, some algorithms (especially triangulation) need to know if a polygon ring is a hole or an outer ring, which could also be derived from winding order if geometry is flattened.

    question 
    opened by mourner 12
  • Incorrect processing/clipping of lines

    Incorrect processing/clipping of lines

    It seems like the vector::processor sometimes fails to get some lines (from a shapefile) on the buffered part of the tile, especially when the line seems to be north/south of the tile.

    I have rendered all geometries in some tiles and the resulting image shows that some smaller roads and (which are more problematic for my case) label-lines are removed in the buffered part (compared to the surrounding tiles actual data/image). This results in cut off labels (the line is the center of the text) for some tiles.

    I have tried to take a larger buffer but it doesn´t fix it. Is this a known/unknown problem or have I misunderstood something?

    opened by ghost 12
  • First test run executes less tests than subsequent runs

    First test run executes less tests than subsequent runs

    This might be expected.

    First run:

    -------------------------------------------------------------------------------                                               
    geometries visual tests
    -------------------------------------------------------------------------------
    ../test/geometry_visual_test.cpp:250
    ...............................................................................                                               
    
    ../test/utils/geometry_equal.hpp:112: FAILED:
      REQUIRE( false )                                                                                                            
    with messages:                                                                                                                
      mapnik::geometry::multi_polygon<double, std::vector>
      mapbox::geometry::polygon<double, std::vector>
    
    ===============================================================================
    test cases:  202 |  201 passed | 1 failed
    assertions: 1801 | 1800 passed | 1 failed
    
    

    Subsequent runs:

    -------------------------------------------------------------------------------                                               
    geometries visual tests
    -------------------------------------------------------------------------------
    ../test/geometry_visual_test.cpp:250
    ...............................................................................                                               
    
    ../test/utils/geometry_equal.hpp:112: FAILED:
      REQUIRE( false )                                                                                                            
    with messages:                                                                                                                
      mapnik::geometry::multi_polygon<double, std::vector>
      mapbox::geometry::polygon<double, std::vector>
    
    ===============================================================================
    test cases:  202 |  201 passed | 1 failed
    assertions: 1903 | 1902 passed | 1 failed
    
    opened by jaeh 0
  • Failing test

    Failing test

    when running make test, one test fails:

    -------------------------------------------------------------------------------                                               
    geometries visual tests
    -------------------------------------------------------------------------------
    ../test/geometry_visual_test.cpp:250
    ...............................................................................                                               
    
    ../test/utils/geometry_equal.hpp:112: FAILED:
      REQUIRE( false )                                                                                                            
    with messages:                                                                                                                
      mapnik::geometry::multi_polygon<double, std::vector>
      mapbox::geometry::polygon<double, std::vector>
    
    ===============================================================================
    test cases:  202 |  201 passed | 1 failed
    assertions: 1903 | 1902 passed | 1 failed
    

    code of the failing test:

    template <typename T1, typename T2>
    void operator() (T1 const&, T2 const&)
    {
        // comparing two different types!
        INFO(type_name<T1>());
        INFO(type_name<T2>());
        REQUIRE(false);
    }
    
    opened by jaeh 0
  • Update build instructions for Ubuntu WSL

    Update build instructions for Ubuntu WSL

    https://github.com/Microsoft/WSL/issues/2465:

    There is solution of problem with fakeroot: sudo update-alternatives --set fakeroot /usr/bin/fakeroot-tcp

    opened by gorshkov-leonid 0
  • Features dropping when creating tiles from GeoJSON containing GeometryCollections

    Features dropping when creating tiles from GeoJSON containing GeometryCollections

    As per my discussion with @springmeyer in https://github.com/mapbox/mapnik-vector-tile/issues/284 there appears to be an issue with the support of GeometryCollections when creating tiles from geojson.

    In some cases the features appear to be dropped across tile boundaries, though I have been unable to determine what the exact offending circumstances are. I isolated a cleaner test case from one of the culprit data sets, which you can get here.

    I am using https://github.com/mapbox/mapbox-tile-copy v5.1.1 to generate the tiles but I tested with the latest release as well, and the issue persists.

    Here is what the feature is supposed to look like (I flattened the geojson in this example using https://github.com/Turfjs/turf/tree/master/packages/turf-flatten):

    not-clipped

    And here is what it looks like without flattening the geojson:

    clipped

    I've created a working example here.

    Please let me know if there is anything else I can provide to help isolate the problem.

    Cheers.

    opened by fullbit-tech 1
Owner
Mapbox
Mapbox is the location data platform for mobile and web applications. We're changing the way people move around cities and explore our world.
Mapbox
experimental project to create PBF vector tiles

Vector tiles producer This is an experimental project to create vector tiles. What does this do? This creates vector tiles based on the mapnik proto f

vross 30 Jul 28, 2022
Build vector tilesets from large collections of GeoJSON features.

tippecanoe Builds vector tilesets from large (or small) collections of GeoJSON, Geobuf, or CSV features, like these. ⚡ Mapbox has a new service for cr

Mapbox 2.1k Aug 13, 2022
tabbed window manager that can tile windows inside floating containers

tabbed window manager that can tile windows inside floating containers

Seninha 86 Jul 27, 2022
tabbed window manager that can tile windows inside floating containers

shod ┌───────────────────────┐ │ │ ┌─────┼────

Seninha 87 Aug 11, 2022
The PULP Ara is a 64-bit Vector Unit, compatible with the RISC-V Vector Extension Version 0.9, working as a coprocessor to CORE-V's CVA6 core

Ara Ara is a vector unit working as a coprocessor for the CVA6 core. It supports the RISC-V Vector Extension, version 0.9. Dependencies Check DEPENDEN

null 143 Aug 2, 2022
An c++ implemention of strobemer

About this small project what is strobemer? see https://github.com/ksahlin/strobemers this project implement an c++ version of the strobemer s(n,k,w_m

BGI-QingDao 9 Apr 20, 2022
Librosa is a c++ implemention of librosa using Eigen

Librosa Librosa is a c++ implemention of librosa using Eigen About similar with librosa, you can just use a single header librosa.h to compute short-t

Xianke Wang 9 Jun 9, 2022
A VA-API implemention using NVIDIA's NVDEC

nvidia-vaapi-driver This is an VA-API implementation that uses NVDEC as a backend. This implementation is specifically designed to be used by Firefox

Stephen 527 Aug 11, 2022
PyMO AVG Game Engine implemention in C.

__________ __ _______ / ____/ __ \__ __/ |/ / __ \ / / / /_/ / / / / /|_/ / / / / / /___/ ____/ /_/ / / / / /_/ / \____/_/ \__, /_

弦语蝶梦 72 Aug 8, 2022
IO2D Technical Specification Draft Sources

IO2D Technical Specification Draft Sources These are the sources used to generate drafts of the working paper for a proposal for an IO2D TS. These sou

cpp-io2d 20 Nov 20, 2021
This is the laplight software for enabling flashlight support on a laptop/netbook. For the specification, see: https://github.com/LapLight/

By: Seanpm2001, Et; Al. Top README.md Read this article in a different language Sorted by: A-Z Sorting options unavailable ( af Afrikaans Afrikaans |

Sean P. Myrick V19.1.7.2 2 Dec 8, 2021
A C++ binding for the OpenGL API, generated using the gl.xml specification.

glbinding is a cross-platform C++ binding for the OpenGL API. glbinding leverages C++11 features like enum classes, lambdas, and variadic templates, i

CG Internals 734 Aug 3, 2022
The OpenEXR project provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the motion picture industry.

OpenEXR OpenEXR provides the specification and reference implementation of the EXR file format, the professional-grade image storage format of the mot

Academy Software Foundation 1.3k Aug 13, 2022
VexCL is a C++ vector expression template library for OpenCL/CUDA/OpenMP

VexCL VexCL is a vector expression template library for OpenCL/CUDA. It has been created for ease of GPGPU development with C++. VexCL strives to redu

Denis Demidov 674 Aug 4, 2022
2D Vector Graphics Engine Powered by a JIT Compiler

Blend2D 2D Vector Graphics Powered by a JIT Compiler. Official Home Page (blend2d.com) Official Repository (blend2d/blend2d) Public Chat Channel Zlib

Blend2D 1.1k Aug 7, 2022
Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.

This project is not actively maintained. NanoVG NanoVG is small antialiased vector graphics rendering library for OpenGL. It has lean API modeled afte

Mikko Mononen 4.4k Aug 11, 2022
libsvm websitelibsvm - A simple, easy-to-use, efficient library for Support Vector Machines. [BSD-3-Clause] website

Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It solves C-SVM classification, nu-SVM classification,

Chih-Jen Lin 4.2k Aug 4, 2022
linalg.h is a single header, public domain, short vector math library for C++

linalg.h linalg.h is a single header, public domain, short vector math library for C++. It is inspired by the syntax of popular shading and compute la

Sterling Orsten 729 Aug 9, 2022
SIMD Vector Classes for C++

You may be interested in switching to std-simd. Features present in Vc 1.4 and not present in std-simd will eventually turn into Vc 2.0, which then de

null 1.2k Aug 5, 2022
An implementation of a weak handle interface to a packed vector in C++

Experimental handle container in C++ Overview Following on from c-handle-container, this library builds on the same ideas but supports a dynamic numbe

Tom Hulton-Harrop 12 Mar 11, 2022
Interactive, thoroughly customizable maps in native Android, iOS, macOS, Node.js, and Qt applications, powered by vector tiles and OpenGL

Mapbox GL Native A C++ library that powers customizable vector maps in native applications on multiple platforms by taking stylesheets that conform to

Mapbox 4.2k Aug 11, 2022
experimental project to create PBF vector tiles

Vector tiles producer This is an experimental project to create vector tiles. What does this do? This creates vector tiles based on the mapnik proto f

vross 30 Jul 28, 2022
Build vector tilesets from large collections of GeoJSON features.

tippecanoe Builds vector tilesets from large (or small) collections of GeoJSON, Geobuf, or CSV features, like these. ⚡ Mapbox has a new service for cr

Mapbox 2.1k Aug 13, 2022
Open-source vector similarity search for Postgres

Open-source vector similarity search for Postgres

Andrew Kane 564 Aug 9, 2022
Benchmarking a trivial replacement for std::vector

std::vector replacement benchmark Dependencies You'll need gnuplot and bash to run ./bench.sh. In addition to that, you'll need to have gcc and clang

Dale Weiler 8 Jul 2, 2022
Support Vector Machines Implementation from scratch in C++

SVM C++ Samples These are sample programs of Support Vector Machines from scratch in C++. 1. Implementation Model Class Problem Decision Boundary Code

null 6 Jul 29, 2022
Public repository for rolling release of main Vector robot code repository.

vector Public repository for rolling release of main Vector robot code repository. This rolling release will be worked to completion until all non-thi

Digital Dream Labs 55 Jul 19, 2022
static_vector implementation in terms of std::vector. No need to implement each function again and again ;)

static_vector static_vector implementation in terms of std::vector. No need to implement each function again and again ;) The usage is basically the s

Alex 4 Apr 1, 2022
A wrapper for intel SSE/AVX vector instructions

VMath A wrapper for intel SSE/AVX vector instructions This is just a toy thing to figure out what working with intrinsics is like. I tried to keep it

Dennis 7 Apr 24, 2022