114 lines
3.5 KiB
C++
114 lines
3.5 KiB
C++
/*****************************************************************************
|
|
|
|
Example program for vtzero library.
|
|
|
|
vtzero-create - Create a vector tile
|
|
|
|
*****************************************************************************/
|
|
|
|
#include "utils.hpp"
|
|
|
|
#include <vtzero/builder.hpp>
|
|
#include <vtzero/index.hpp>
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
int main() {
|
|
try {
|
|
vtzero::tile_builder tile;
|
|
vtzero::layer_builder layer_points{tile, "points"};
|
|
vtzero::layer_builder layer_lines{tile, "lines"};
|
|
vtzero::layer_builder layer_polygons{tile, "polygons"};
|
|
|
|
vtzero::key_index<std::unordered_map> idx{layer_points};
|
|
|
|
{
|
|
vtzero::point_feature_builder feature{layer_points};
|
|
feature.set_id(1);
|
|
feature.add_points(1);
|
|
feature.set_point(10, 10);
|
|
feature.add_property("foo", "bar");
|
|
feature.add_property("x", "y");
|
|
feature.rollback();
|
|
}
|
|
|
|
const auto some = idx("some");
|
|
|
|
{
|
|
vtzero::point_feature_builder feature{layer_points};
|
|
feature.set_id(2);
|
|
feature.add_point(20, 20);
|
|
feature.add_property(some, "attr");
|
|
feature.commit();
|
|
}
|
|
{
|
|
vtzero::point_feature_builder feature{layer_points};
|
|
feature.set_id(3);
|
|
feature.add_point(20, 20);
|
|
feature.add_property(idx("some"), "attr");
|
|
feature.commit();
|
|
}
|
|
|
|
{
|
|
vtzero::point_feature_builder feature{layer_points};
|
|
feature.set_id(4);
|
|
feature.add_point(20, 20);
|
|
feature.add_property(idx("some"), "otherattr");
|
|
feature.commit();
|
|
}
|
|
|
|
|
|
vtzero::point_feature_builder feature1{layer_points};
|
|
feature1.set_id(5);
|
|
feature1.add_point(vtzero::point{20, 20});
|
|
feature1.add_property("otherkey", "attr");
|
|
feature1.commit();
|
|
|
|
vtzero::value_index<vtzero::sint_value_type, int32_t, std::unordered_map> maxspeed_index{layer_lines};
|
|
{
|
|
vtzero::linestring_feature_builder feature{layer_lines};
|
|
feature.set_id(6);
|
|
feature.add_linestring(3);
|
|
feature.set_point(10, 10);
|
|
feature.set_point(10, 20);
|
|
feature.set_point(vtzero::point{20, 20});
|
|
std::vector<vtzero::point> points = {{11, 11}, {12, 13}};
|
|
feature.add_linestring_from_container(points);
|
|
feature.add_property("highway", "primary");
|
|
feature.add_property(std::string{"maxspeed"}, maxspeed_index(50));
|
|
feature.commit();
|
|
}
|
|
|
|
{
|
|
vtzero::polygon_feature_builder feature{layer_polygons};
|
|
feature.set_id(7);
|
|
feature.add_ring(5);
|
|
feature.set_point(0, 0);
|
|
feature.set_point(10, 0);
|
|
feature.set_point(10, 10);
|
|
feature.set_point(0, 10);
|
|
feature.set_point(0, 0);
|
|
feature.add_ring(4);
|
|
feature.set_point(3, 3);
|
|
feature.set_point(3, 5);
|
|
feature.set_point(5, 5);
|
|
feature.close_ring();
|
|
feature.add_property("natural", "wood");
|
|
feature.add_property("number_of_trees", vtzero::sint_value_type{23402752});
|
|
feature.commit();
|
|
}
|
|
|
|
const auto data = tile.serialize();
|
|
write_data_to_file(data, "test.mvt");
|
|
} catch (const std::exception& e) {
|
|
std::cerr << "Fatal error: " << e.what() << '\n';
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|