globalforest/forestmapview.py
2020-10-25 22:05:46 +02:00

56 lines
2 KiB
Python

from kivy.app import App
from kivy.clock import Clock
from kivy_garden.mapview import MapView, MapSource
from treemarker import TreeMarker
class ForestMapView(MapView):
get_trees_timer = None
tree_names = []
map_source = MapSource(url="http://forest.deflax.net/tile/{z}/{x}/{y}.png",
cache_key="forest-map", tile_size=256,
image_ext="png", attribution="@ afx")
def print_current_zoom(self, *args):
print("] Zoom level: " + str(self.zoom))
#pqueue.put("] Zoom level: " + str(self.zoom))
def start_get_fov_trees(self):
# After one second get the trees in field of view
try:
self.get_trees_timer.cancel()
except:
pass
self.get_trees_timer = Clock.schedule_once(self.get_fov_trees, 1)
def get_fov_trees(self, *args):
# Get reference to main app and the db cursor
app = App.get_running_app()
# Gebug gps position
print("] Current map position lat: {} lon: {} ".format(self.lat, self.lon))
min_lat, min_lon, max_lat, max_lon = self.get_bbox()
sql_statement = "SELECT * FROM locations WHERE x > %s AND x < %s AND y > %s AND y < %s" % (min_lat, max_lat, min_lon, max_lon) #sql_statement = "SELECT * FROM locations"
app.cursor.execute(sql_statement)
trees = app.cursor.fetchall()
for tree in trees:
name = tree[0]
#print("] Tree detected: " + str(tree))
if name in self.tree_names:
continue
else:
self.add_tree(tree)
def add_tree(self, tree):
# Create TreeMarker
lat, lon = tree[20], tree[21]
treemarker = TreeMarker(lat=lat, lon=lon)
treemarker.tree_data = tree
# Add TreeMarker to the map
self.add_widget(treemarker)
# Keep track of the TreeMarker's name
name = tree[1]
self.tree_names.append(name)