#include #include #include "xwidgets/xoutput.hpp" #include "xleaflet/xmap.hpp" #include "xleaflet/xdraw_control.hpp" #include "xleaflet/xbasemaps.hpp" namespace nl = nlohmann; // Create map widget auto water_color = xlf::basemap({"OpenStreetMap", "France"}); auto map = xlf::map::initialize() .layers({water_color}) .center({47, 363}) .zoom(5) .finalize(); map // Create output widget to log draw events xw::output out; out // Options for the draw control nl::json polyline_options = { {"shapeOptions", { {"color", "#6bc2e5"}, {"weight", 8}, {"opacity", 1.0} }} }; nl::json polygon_options = { {"shapeOptions", { {"fillColor", "#6be5c3"}, {"color", "#6be5c3"}, {"fillOpacity", 1.0} }}, {"drawError", { {"color", "#dd253b"}, {"message", "Oups!"} }}, {"allowIntersection", false} }; nl::json circle_options = { {"shapeOptions", { {"fillColor", "#efed69"}, {"fillOpacity", 1.0}, {"color", "#efed69"} }} }; nl::json rectangle_options = { {"shapeOptions", { {"fillColor", "#fca45d"}, {"fillOpacity", 1.0}, {"color", "#fca45d"} }} }; // Log last action void print_draw_event(std::string action, nl::json geo_json) { // Capturing the stdout with the output widget auto guard = out.guard(); std::cout << action << " a " << geo_json["geometry"]["type"] << std::endl; } // Add the draw control and event logger auto draw_control = xlf::draw_control::initialize() .polyline(polyline_options) .polygon(polygon_options) .circle(circle_options) .rectangle(rectangle_options) .finalize(); draw_control.on_draw(print_draw_event); map.add_control(draw_control);