Листовка рисует линию между выпуском маркеров - PullRequest
0 голосов
/ 14 марта 2020

Я хочу соединить две точки маркера, рисуя линию между ними. Я использую Leaflet API карты отсюда: https://github.com/kivy-garden/garden.mapview

Код:

from kivymd.app import MDApp
from kivy.garden.mapview import MapView, MapMarker

class MapViewApp(MDApp):
    def build(self):
        mapData = MapView(zoom=6, lat=10.4735, lon=55.9754)
        marker1 = MapMarker(lat=20.3572136, lon=43.5032709)
        marker2 = MapMarker(lat=20.3572136, lon=53.5032709)
        mapData.add_marker(marker1)
        mapData.add_marker(marker2)
        return mapData

if __name__ == "__main__":
    MapViewApp().run()

Любые идеи, как соединить два маркера указывает вместе? Заранее спасибо.

1 Ответ

1 голос
/ 15 марта 2020

Вы можете использовать canvas, чтобы нарисовать Line, но вы должны включить обновление линии при каждом обновлении MapView. Вот простой подход для одной строки:

from functools import partial
from kivy.graphics.context_instructions import Color
from kivy.graphics.vertex_instructions import Line
from kivymd.app import MDApp
from kivy.garden.mapview import MapView, MapMarker

class MapViewApp(MDApp):
    def build(self):
        mapData = MapView(zoom=6, lat=10.4735, lon=55.9754)
        marker1 = MapMarker(lat=20.3572136, lon=43.5032709)
        marker2 = MapMarker(lat=20.3572136, lon=53.5032709)
        mapData.add_marker(marker1)
        mapData.add_marker(marker2)
        self.line = None
        mapData.bind(on_map_relocated=partial(self.draw_line, marker1, marker2))
        return mapData

    def draw_line(self, m1, m2, *args):
        if self.line is None:
            with self.root.canvas:
                Color(1, 0, 0, 1)
                self.line = Line(points=[m1.center_x, m1.y, m2.center_x, m2.y], width=1)
        else:
            self.line.points = [m1.center_x, m1.y, m2.center_x, m2.y]

if __name__ == "__main__":
    MapViewApp().run()
...