Afs*_*ehi 2 javascript python leaflet folium
我已经开始使用 Folium 在 GUI 中发布一些地图。用户可以输入开始和结束坐标,它们显示为Folium Markers。我知道 Folium 库只是 Leaflet 的包装器,那么我们可以使用父库来实现 Folium 中不存在的方法吗?
例如,我想使用Leaflet.LatLng.distanceTo已实现的余弦球面定律来计算起始坐标和结束坐标之间的距离。我如何在我的.py文件中使用它们?
我附加了这个示例代码来表示我陷入困境的地方:
.
..
...
self.map = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
..
..
self.m = folium.Map(
location=[32.5236, 54], tiles="Stamen terrain", zoom_start=5, control_scale= True,
box_zoom= True)
# adds the markers
self.marker1 = folium.Marker((lat_1, lng_1)).add_to(self.m)
self.marker2 = folium.Marker((lat_2, lng_2)).add_to(self.m)
#add above to the map
self.data = io.BytesIO()
self.m.save(self.data, close_file=False)
self.map.setHtml(self.data.getvalue().decode())
self.m.add_child(folium.LatLngPopup())
"""
Enter the JavaScript Leaflet
{
Here I want "Leaflet.distanceTo((lat_1, lng_1), (lat_2, lng_2))" method
}
"""
Run Code Online (Sandbox Code Playgroud)
Foilum 的其他缺点之一是无法删除地图元素,例如用户想要编辑的开始标记(这部分无关紧要,我只是为了让您更熟悉情况而这么说)。如果使用适当的 Leaflet 方法来解决这些问题,那就太好了。
任何想法都会非常感激......
您可以将任何您想要的 html、css 或 Javascript 添加到地图中。以下是如何创建自定义 folium 元素然后覆盖其模板的示例。
el = folium.MacroElement().add_to(m)
el._template = jinja2.Template("""
{% macro script(this, kwargs) %}
// write JS here
{% endmacro %}
""")
Run Code Online (Sandbox Code Playgroud)
该script宏是一个自定义 Jinja2 宏,可确保其中的代码放置在页面底部的脚本标记中。其他选项适用header于头部和html身体。
您还可以访问之前创建的 folium 对象的 Javascript 名称:
popup = folium.LatLngPopup()
popup_js_name = popup.get_name()
Run Code Online (Sandbox Code Playgroud)
既然您似乎已经对大叶和传单有所了解,我希望这足以帮助您!