Пример #1
0
 mapnik::parameters params;
 params["type"] = "gdal";
 // created with:
 // wget http://www.nacis.org/naturalearth/50m/raster/NE2_50m_SR_W.zip
 // gdalwarp -t_srs EPSG:3857 -ts 1048 1048 -r bilinear NE2_50M_SR_W.tif natural_earth.tif
 params["file"] = "test/natural_earth.tif";
 MAPNIK_SHARED_PTR<mapnik::datasource> ds =
     mapnik::datasource_cache::instance().create(params);
 lyr.set_datasource(ds);
 map.MAPNIK_ADD_LAYER(lyr);
 mapnik::request m_req(tile_size,tile_size,bbox);
 m_req.set_buffer_size(map.buffer_size());
 renderer_type ren(backend,map,m_req,1.0,0,0,1,"jpeg",mapnik::SCALING_BILINEAR);
 ren.apply();
 CHECK(1 == tile.layers_size());
 mapnik::vector::tile_layer const& layer = tile.layers(0);
 CHECK(std::string("layer") == layer.name());
 CHECK(1 == layer.features_size());
 mapnik::vector::tile_feature const& f = layer.features(0);
 CHECK(static_cast<mapnik::value_integer>(1) == static_cast<mapnik::value_integer>(f.id()));
 CHECK(0 == f.geometry_size());
 CHECK(f.has_raster());
 std::string const& ras_buffer = f.raster();
 CHECK(!ras_buffer.empty());
 // debug
 bool debug = false;
 if (debug) {
     std::ofstream file("out.jpeg", std::ios::out|std::ios::trunc|std::ios::binary);
     file << ras_buffer;
     file.close();
 }
    ren.apply();
    // serialize to message
    std::string buffer;
    CHECK(tile.SerializeToString(&buffer));
    CHECK(151 == buffer.size());
    // now create new objects
    mapnik::Map map2(tile_size,tile_size,"+init=epsg:3857");
    tile_type tile2;
    CHECK(tile2.ParseFromString(buffer));
    std::string key("");
    CHECK(false == mapnik::vector_tile_impl::is_solid_extent(tile2,key));
    CHECK("" == key);
    CHECK(false == mapnik::vector_tile_impl::is_solid_extent(buffer,key));
    CHECK("" == key);
    CHECK(1 == tile2.layers_size());
    vector_tile::Tile_Layer const& layer2 = tile2.layers(0);
    CHECK(std::string("layer") == layer2.name());
    CHECK(1 == layer2.features_size());

    mapnik::layer lyr2("layer",map.srs());
    
    protozero::pbf_reader pbf_tile(buffer.c_str(), buffer.size());
    pbf_tile.next();
    protozero::pbf_reader layer3 = pbf_tile.get_message();
    
    std::shared_ptr<mapnik::vector_tile_impl::tile_datasource_pbf> ds = std::make_shared<
                                    mapnik::vector_tile_impl::tile_datasource_pbf>(
                                        layer3,0,0,0,map2.width());
    CHECK(ds->get_name() == "layer");
    ds->set_envelope(bbox);
    CHECK( ds->type() == mapnik::datasource::Vector );