building_selection_tool/map_view_simple_example.py

54 lines
1.9 KiB
Python

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']
building_polygons = []
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)})
# create tkinter window
root_tk = tkinter.Tk()
root_tk.geometry(f"{1000}x{700}")
root_tk.title("Building Selection Tool")
# create map widget
map_widget = tkintermapview.TkinterMapView(root_tk, 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
# 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
root_tk.mainloop()