【问题标题】:Folium: How can I change fill color in semicircle plugin?Folium:如何更改半圆插件中的填充颜色?
【发布时间】:2019-07-26 21:35:18
【问题描述】:

我正在使用 Folium 的半圆插件 (https://github.com/syberworld/Folium-SemiCircle)。它具有默认的蓝色:

我尝试使用一些传单方法,例如 line_color、color、fill_color,但它们似乎没有实现。

代码如下:

import folium
from folium import plugins
m = folium.Map(
    width='100%', height='100%',
    location=[39.217, 9.136],
    zoom_start=14,
    tiles='CartoDB positron'
)

def add_semicircle(location,azimute, m, radius=2000, arc=30, popup=None):
    x = plugins.SemiCircle(
        location=location,   # Location of center
        radius= radius,               # Radius in meters
        direction = azimute,
        line_color = 'red',
        opacity = 0,
        icon_color='red',
        arc = arc
    )
    x.add_child(folium.Popup(popup))
    x.add_to(m)

add_semicircle([39.217, 9.136],270, m,arc=30)  

display(m)

有什么办法可以改变这些颜色吗?

【问题讨论】:

    标签: python plugins folium


    【解决方案1】:

    我对 folium semicircle 插件进行了更改,以便它可以接受缺少的选项。我提出了合并请求。这是新类 semicircle.py 的代码,以防它没有更新:

    # -*- coding: utf-8 -*-
    
    from __future__ import (absolute_import, division, print_function)
    
    import json
    
    from branca.element import Figure, JavascriptLink
    
    from folium.map import Marker
    from folium.utilities import validate_location
    
    from jinja2 import Template
    
    class SemiCircle(Marker):
        """
        Creates a Semicircle plugin to append into a map with
        Map.add_plugin.
        Use (direction and arc) or (startAngle and stopAngle)
        Parameters
        ----------
        location: tuple of length 2, default None
            The latitude and longitude of the marker.
            If None, then the middle of the map is used.
        radius: int, default 0
            Radius of semicircle
        direction: int, default 0
            Heading of direction angle value between 0 and 360 degrees
        arc: int, default 0
            Heading of arc angle value between 0 and 360 degrees.
        startAngle: int, default 0
            Heading of the start angle value between 0 and 360 degrees
        stopAngle: int, default 0
            Heading of the stop angle value between 0 and 360 degrees.
        """
        _template = Template(u"""
                {% macro script(this, kwargs) %}
                    if ({{this.direction}} || {{this.arc}}) {
                        var {{this.get_name()}} = L.semiCircle(
                            [{{this.location[0]}},{{this.location[1]}}],
                            {radius:{{this.radius}},
                            fill: {{this.fill}},
                            fillColor:'{{this.fill_color}}',
                            fillOpacity: {{this.fill_opacity}},
                            color: '{{this.color}}',
                            opacity: {{this.opacity}}
                            }).setDirection({{this.direction}},{{this.arc}})
                            .addTo({{this._parent.get_name()}});
                    } else if ({{this.startAngle}} || {{this.stopAngle}}) {
                        var {{this.get_name()}} = L.semiCircle(
                            [{{this.location[0]}},{{this.location[1]}}],
                            {radius:{{this.radius}},
                            fill: {{this.fill}},
                            fillColor:'{{this.fill_color}}',
                            fillOpacity: {{this.fill_opacity}},
                            color: '{{this.color}}',
                            opacity: {{this.opacity}},
                            startAngle:{{this.startAngle}}, 
                            stopAngle:{{this.stopAngle}}
                            })
                            .addTo({{this._parent.get_name()}});
                    }
                {% endmacro %}
                """)
    
        def __init__(self, 
                    location, 
                    radius=0, 
                    fill = True,  
                    fill_color='#3388ff', 
                    fill_opacity = 0.5,
                    color = '#3388ff',
                    opacity = 1,
                    direction=0, 
                    arc=0, 
                    startAngle=0, 
                    stopAngle=0, **kwargs):
    
            super(SemiCircle, self).__init__( validate_location(location), **kwargs)
            self._name = 'SemiCircle'
            self.radius = radius
            if fill == True:
                self.fill = 'true'
            else: self.fill = 'false'
            self.fill_color = fill_color
            self.fill_opacity = fill_opacity
            self.color = color
            self.opacity = opacity
            self.direction = direction
            self.arc = arc
            self.startAngle = startAngle
            self.stopAngle = stopAngle
            self.fill_color = fill_color
            self.kwargs = json.dumps(kwargs)
    
        def render(self, **kwargs):
            super(SemiCircle, self).render(**kwargs)
    
            figure = self.get_root()
            assert isinstance(figure, Figure), ('You cannot render this Element '
                                                'if it is not in a Figure.')
    
            figure.header.add_child(
                JavascriptLink('http://jieter.github.io/Leaflet-semicircle/Semicircle.js'),
    name='semicirclejs')
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      相关资源
      最近更新 更多