【问题标题】:How to trace a path in Kivy map?如何在 Kivy 地图中追踪路径?
【发布时间】:2016-11-27 13:18:08
【问题描述】:

我正在尝试绘制街道实际上我想绘制街道路径(如谷歌地图)但这是我得到的。enter image description here

    puntoA = self.puntos[0]
    puntoB = self.puntos[1]
    direccionx = puntoA.lon - puntoB.lon
    direcciony = puntoA.lat - puntoB.lat
    distanciax = direccionx/25
    distanciay = direcciony/25
    for i in range(25):
        print i
        puntox = distanciax*i
        puntoy = distanciay*i
        self.mv.add_marker(MapMarker(lat = self.puntos[1].lat + puntoy , lon = self.puntos[1].lon + puntox, source = self.icons + "Entypo_e78b(0)_32.png"))

【问题讨论】:

    标签: android python kivy android-mapview kivy-language


    【解决方案1】:

    我在一个 google 群组中找到了这个,它可以工作。

    class LineMapLayer(MapLayer):
    def __init__(self, **kwargs):
        super(LineMapLayer, self).__init__(**kwargs)
        self.zoom = 15
    
        geo_dover   = [18.455750,-69.970347]
        geo_calais  = [18.456259,-69.966334]
    
        # NOTE: Points must be valid as they're no longer clamped
        self.coordinates = []
    
    
    def newpointgeo(self,longlat):
        longlatx = (longlat[1],longlat[0])
        self.coordinates.append(longlatx)
    
    def reposition(self):
        mapview = self.parent
    
        #: Must redraw when the zoom changes 
        #: as the scatter transform resets for the new tiles
        if (self.zoom != mapview.zoom):
            self.draw_line()
    
    def gen_point(self):
        n = len(self.coordinates)
        dx,dy = random.randint(-100,100)/10000.0,random.randint(0,100)/10000.0
        c = (self.coordinates[-1][0]+dx,
             self.coordinates[-1][1]+dy)
    
        return c
    
    def add_point(self):
        #: Add a random point close to the previous one
        for i in range(len(self.coordinates)):
            self.coordinates.append(self.gen_point())
        self.draw_line()
    
    def get_x(self, lon):
        """Get the x position on the map using this map source's projection
        (0, 0) is located at the top left.
        """
        return clamp(lon, MIN_LONGITUDE, MAX_LONGITUDE)
    
    def get_y(self, lat):
        """Get the y position on the map using this map source's projection
        (0, 0) is located at the top left.
        """
        lat = clamp(-lat, MIN_LATITUDE, MAX_LATITUDE)
        lat = lat * pi / 180.
        return ((1.0 - log(tan(lat) + 1.0 / cos(lat)) / pi))
    
    def draw_line(self, *args):
        mapview = self.parent
        self.zoom = mapview.zoom
    
        # When zooming we must undo the current scatter transform
        # or the animation distorts it
        scatter = mapview._scatter
        map_source = mapview.map_source
        sx,sy,ss = scatter.x, scatter.y, scatter.scale
        vx,vy,vs = mapview.viewport_pos[0], mapview.viewport_pos[1], mapview.scale
    
        # Account for map source tile size and mapview zoom
        ms = pow(2.0,mapview.zoom) * map_source.dp_tile_size
    
        #: Since lat is not a linear transform we must compute manually 
        line_points = []
        for lat,lon in self.coordinates:
            line_points.extend((self.get_x(lon),self.get_y(lat)))
            #line_points.extend(mapview.get_window_xy_from(lat,lon,mapview.zoom))
    
    
        with self.canvas:
            # Clear old line
            self.canvas.clear()
    
            # Undo the scatter animation transform
            Scale(1/ss,1/ss,1)
            Translate(-sx,-sy)
    
            # Apply the get window xy from transforms
            Scale(vs,vs,1)
            Translate(-vx,-vy)
    
            # Apply the what we can factor out
            # of the mapsource long,lat to x,y conversion
            Scale(ms/360.0,ms/2.0,1)
            Translate(180,0)
    
            # Draw new
            Color( 0, 0 , 0 , .8)
            Line(points=line_points , width=4/ms , joint_presicion = 100)#4/ms)#,joint_precision=100)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 2012-10-23
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      相关资源
      最近更新 更多