示例#1
0
class GpsTrackingWidget(Widget):
    is_screen = BooleanProperty(True)
    cur_loc = ListProperty([0, 0])

    def __init__(self, walking_widget):
        super().__init__()
        self.walking_widget = walking_widget
        self.widget_layout = FloatLayout()
        self.origin_size = (1, 1)
        self.map_view = MapView(zoom=12, lat=37.5606,
                                lon=126.9790)  # gps에서 현재위치 받아서 띄우기
        self.cur_lat, self.cur_lon = 37.5606, 126.9790
        self.marker_layer = MarkerMapLayer()
        self.map_view.add_layer(self.marker_layer)
        self.positions = [(self.cur_lat, self.cur_lon)]
        self.save_button = Button(text='save',
                                  pos_hint={
                                      'x': 0.0,
                                      'y': 0.0
                                  },
                                  size_hint=(.1, .1))
        self.clear_button = Button(text='clear',
                                   pos_hint={
                                       'x': 0.1,
                                       'y': 0.0
                                   },
                                   size_hint=(.1, .1))

        self.items_bind()

    def pos_changed(self, instance, coord, gps):
        self.walking_widget.on_walk()
        self.positions.append((gps.lon, gps.lat))
        self.map_view.add_marker(
            MapMarker(lat=gps.lon, lon=gps.lat,
                      source='images/mmy_marker.png'),
            layer=self.marker_layer)  #오류로 gps.lat과 gps.lon의 값이 바뀌어있음

    def clear_button_release(self, btn):
        self.marker_layer.unload()

    def save_button_release(self, btn):
        cur_time = datetime.datetime.now()
        t = threading.Thread(target=self.save_data,
                             args=[self.positions, cur_time])
        t.start()
        t.join()

    def save_data(self, *args):
        obj = self.map_view

        def insert_pressed(btn):
            def wrong_back_pressed(_btn):
                popupp.dismiss()

            def good_back_pressed(_btn):
                popuppp.dismiss()

            box3 = BoxLayout(orientation='vertical')
            box3.add_widget(Label(text='wrong'))
            box3.add_widget(Button(text='back', on_release=wrong_back_pressed))
            popupp = Popup(title='wrong', content=box3)

            box4 = BoxLayout(orientation='vertical')
            box4.add_widget(Label(text='good'))
            box4.add_widget(Button(text='back', on_release=good_back_pressed))
            popuppp = Popup(title='good', content=box4)

            if not text_input.text:
                popupp.open()
            else:
                _list, cur_time = args
                sql_connection = sqlite3.connect('Records/records.db')
                cur = str(cur_time.year) + str(cur_time.month) + str(
                    cur_time.day) + str(cur_time.hour) + str(
                        cur_time.minute) + str(cur_time.second)
                cursor = sql_connection.cursor()
                cursor.execute(
                    "insert into my_records (datetime,lat,lon,title,markers) values (?,?,?,?,?)",
                    [
                        cur, _list[0][0], _list[0][1], text_input.text,
                        pickle.dumps(_list)
                    ])

                sql_connection.commit()
                sql_connection.close()
                obj.export_to_png(filename='Records/' + str(cur_time.year) +
                                  str(cur_time.month) + str(cur_time.day) +
                                  str(cur_time.hour) + str(cur_time.minute) +
                                  str(cur_time.second) + '.png')
                text_input.text = ''
                popuppp.open()

        def back_pressed(btn):
            popup.dismiss()

        box = BoxLayout(orientation='vertical')
        box2 = BoxLayout(orientation='horizontal')

        insert_button = Button(text='insert', on_release=insert_pressed)
        back_button = Button(text='back', on_release=back_pressed)
        box2.add_widget(insert_button)
        box2.add_widget(back_button)

        text_input = TextInput(text='insert title for map')

        box.add_widget(text_input)
        box.add_widget(box2)
        popup = Popup(title='title the map', content=box)
        popup.open()

    def items_bind(self):
        self.map_view.bind(on_map_relocated=self.pos_changed)
        self.save_button.bind(on_release=self.save_button_release)
        self.clear_button.bind(on_release=self.clear_button_release)
        self.widget_layout.add_widget(self.map_view)
        self.widget_layout.add_widget(self.save_button)
        self.widget_layout.add_widget(self.clear_button)
        self.bind(is_screen=self.on_is_screen)
        #self.bind(cur_loc=self.pos_changed)

    def on_is_screen(self, instance, value):
        if value:
            self.items_bind()
        else:
            self.widget_layout.clear_widgets()

    def set_screen(self, value):
        self.is_screen = value

    """    def on_walk(self,lat,lon):