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
  • 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
  • make in example/c++ directory fails because file in src seems to have been renamed

    make in example/c++ directory fails because file in src seems to have been renamed

    make: *** No rule to make target '../../src/vector_tile.pb.cc', needed by 'tileinfo'.  Stop.
    
    opened by jaeh 0
  • 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
  • Strange Build Failure Building on Fedora 30 Docker Container Against Installed Mapnik HEAD

    Strange Build Failure Building on Fedora 30 Docker Container Against Installed Mapnik HEAD

    The attached Dockerfile.txt installs mapnik but fails to build mapnik-vector-tile against the installed library. The failure appears to be linking protobuf-light libraries. This error is observed in other issue reports (#187 ) in this project.

    What is strange, and why I open a new ticket, is that if I append 2>1 | tee make.log to the build command, the build completes successfully.

    Specifically, if you change line 21 of the attached file to make release_base V=1 2>1 | tee make.log && \ then the build works.

    To reproduce...

    1. Download the attached Dockerfile.txt and rename it to Dockerfile.
    2. Run docker build -t mybuild . in the directory with the Dockerfile in it.

    You should observe link errors similar to

    /usr/bin/ld: ./Release/obj.target/tests/test/unit/processor/reprojection_error.o: in function `____C_A_T_C_H____T_E_S_T____17()':
    reprojection_error.cpp:(.text+0x841): undefined reference to `google::protobuf::MessageLite::ParseFromString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /usr/bin/ld: reprojection_error.cpp:(.text+0x13b2): undefined reference to `google::protobuf::MessageLite::ParseFromString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    /usr/bin/ld: reprojection_error.cpp:(.text+0x2192): undefined reference to `google::protobuf::MessageLite::ParseFromString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    ...
    
    opened by basking2 2
  • 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
  • Accessing Features in a layer

    Accessing Features in a layer

    Hi, I can access layers in each vector tile. I wanted to know if there is any method to get list of features in a layer? thanks

    opened by am2222 0
  • Extents of Zero when decoding

    Extents of Zero when decoding

    Currently it is possible to have issues in our scaling during decoding in the case where decoding a tile with an extent of zero. This causes a divide by zero issue and we should prevent this from proceeding further once it is detecting in decoding.

    opened by flippmoke 0
  • Point simplification at low zoom levels?

    Point simplification at low zoom levels?

    For very large point datasets, it'd be great to build a path for simplifying them at low zoom levels like z0, z1, z2 to avoid huge individual tiles. I'm not sure what the best route is, but perhaps we can take a clue from Tippecanoe?

    cc @flippmoke @ericfischer

    opened by mapsam 3
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 31 Nov 2, 2021
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 2k Dec 8, 2021
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 78 Nov 14, 2021
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 8 Apr 23, 2021
tabbed window manager that can tile windows inside floating containers

tabbed window manager that can tile windows inside floating containers

Seninha 30 Nov 24, 2021
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
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 648 Nov 21, 2021
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 959 Nov 24, 2021
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.2k Dec 4, 2021
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.1k Dec 7, 2021
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 686 Nov 26, 2021
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.1k Dec 6, 2021
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 Apr 25, 2021
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.1k Nov 27, 2021
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 31 Nov 2, 2021
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 2k Dec 8, 2021
Open-source vector similarity search for Postgres

Open-source vector similarity search for Postgres

Andrew Kane 428 Nov 28, 2021
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 6 Aug 6, 2021
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 4 Nov 17, 2021
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 40 Nov 24, 2021
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 3 Oct 26, 2021
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 6 Nov 25, 2021
A wrapper of C++ std::vector for functional programming

Say hello to functional C++ vectors A wrapper for C++ std::vector geared towards functional programming and fluent APIs. The primary focus is readabil

null 16 Nov 10, 2021