dc = DrawControl()

def handle_draw(self, action, geo_json):
    print(action)
    print(geo_json)

dc.on_draw(handle_draw)
m.add_control(dc)

"""
Explanation: Now create the DrawControl and add it to the Map using add_control. We also register a handler for draw events. This will fire when a drawn path is created, edited or deleted (there are the actions). The  geo_json argument is the serialized geometry of the drawn path, along with its embedded style.
End of explanation
"""


dc.last_action

dc.last_draw

"""
Explanation: In addition, the DrawControl also has last_action and last_draw attributes that are created dynamicaly anytime a new drawn path arrives.
End of explanation
"""


m2 = Map(layout={'width': '600px', 'height': '400px'}, center=[34.6252978589571, -77.34580993652344], zoom=m.zoom)
m2

"""
Explanation: Let's draw a second map and try to import this GeoJSON data into it.
End of explanation
"""


map_center_link = link((m, 'center'), (m2, 'center'))
map_zoom_link = link((m, 'zoom'), (m2, 'zoom'))

new_poly = GeoJSON(data=dc.last_draw)

m2.add_layer(new_poly)

"""
Explanation: We can use link to synchronize traitlets of the two maps:
End of explanation
"""


dc2 = DrawControl(polygon={'shapeOptions': {'color': '#0000FF'}}, polyline={},
                  circle={'shapeOptions': {'color': '#0000FF'}})
m2.add_control(dc2)

"""
Explanation: Note that the style is preserved! If you wanted to change the style, you could edit the properties.style dictionary of the GeoJSON data. Or, you could even style the original path in the DrawControl by setting the polygon dictionary of that object. See the code for details.
Now let's add a DrawControl to this second map. For fun we will disable lines and enable circles as well and change the style a bit.
End of explanation
"""


