From d824a8638f393d3edfd42cedd5a0a69ba9c54578 Mon Sep 17 00:00:00 2001 From: Koa Wells Date: Mon, 18 Dec 2023 16:21:57 -0500 Subject: [PATCH] Add side bar with button and textbox --- map_view_simple_example.py | 62 ++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/map_view_simple_example.py b/map_view_simple_example.py index b3a098a..5189523 100644 --- a/map_view_simple_example.py +++ b/map_view_simple_example.py @@ -1,54 +1,52 @@ import tkinter import tkintermapview -import json -import copy -with open('./data/collinear_clean.geojson', 'r') as city_file: - city = json.load(city_file) - buildings = city['features'] +select_buildings = False +selected_coordinates = [] -building_polygons = [] +def marker_click(marker): + print(f"marker clicked - text: {marker.text} position: {marker.position}") -for building in buildings: - building_polygon = [] - if building['geometry']['type'] == 'Polygon': - for coordinate in building['geometry']['coordinates'][0]: - building_polygon.append((coordinate[1], coordinate[0])) - building_polygons.append({'id': building['id'], - 'polygon': copy.deepcopy(building_polygon)}) +def on_click(coordinates_tuple): + if select_buildings: + print(coordinates_tuple) + selected_coordinates.append(coordinates_tuple) + +def activate_selection_box(): + select_buildings = True # create tkinter window root_tk = tkinter.Tk() root_tk.geometry(f"{1000}x{700}") root_tk.title("Building Selection Tool") +# create left frame +leftframe = tkinter.Frame(root_tk) +leftframe.pack(side=tkinter.LEFT) + +# create right frame +rightframe = tkinter.Frame(root_tk,width=80) +rightframe.pack(side=tkinter.RIGHT) + +# create button for activating building selection +selection_box_button = tkinter.Button(leftframe, text="Create Selection Box", command=activate_selection_box) +selection_box_button.pack(side=tkinter.TOP) + +# create text box for viewing selecting coordinates +text_width = tkinter.Text(leftframe,height=50,width=30) +text_width.pack(side=tkinter.BOTTOM,padx=50) + # create map widget -map_widget = tkintermapview.TkinterMapView(root_tk, width=1000, height=700, corner_radius=0) +map_widget = tkintermapview.TkinterMapView(rightframe, width=1000, height=700, corner_radius=0) map_widget.pack(fill="both", expand=True) # set other tile server (standard is OpenStreetMap) -map_widget.set_tile_server("https://mt0.google.com/vt/lyrs=m&hl=en&x={x}&y={y}&z={z}&s=Ga", max_zoom=22) # google normal -# map_widget.set_tile_server("https://mt0.google.com/vt/lyrs=s&hl=en&x={x}&y={y}&z={z}&s=Ga", max_zoom=22) # google satellite +map_widget.set_tile_server("https://mt0.google.com/vt/lyrs=m&hl=en&x={x}&y={y}&z={z}&s=Ga", max_zoom=14) # google normal # set current position and zoom map_widget.set_position(45.497059, -73.578451, marker=False) # Montreal, Quebec map_widget.set_zoom(11) -# set current position with address -# map_widget.set_address("Berlin Germany", marker=False) - -def marker_click(marker): - print(f"marker clicked - text: {marker.text} position: {marker.position}") - -building_polygon_markers = [] -count = 0 -for building_polygon in building_polygons: - if count > 1000: - break - building_polygon_markers.append(map_widget.set_polygon(building_polygon['polygon'], - fill_color='black', - outline_color='black', - name=building_polygon['id'])) - count+=1 +map_widget.add_left_click_map_command(on_click) root_tk.mainloop() \ No newline at end of file