Folium 地图与 PySide2 QWebEngineView 一起使用时,不显示底图

如何解决Folium 地图与 PySide2 QWebEngineView 一起使用时,不显示底图

概述:我有一个使用 pyside2/PyQt5 和 QWebEngineView 构建的 GUI,我能够显示 folium 生成的地图,保存到 html,然后显示在 QWebEngineView 小部件中。

问题:直到本周,显示的地图在底图顶部显示重叠图标。如下图。

enter image description here

现在,地图不显示底图,而是只显示图标,如下所示。

enter image description here

如果我选择不同的源作为底图,例如 MapBox,它工作正常。此外,如果我在普通 Web 浏览器中打开 folium 生成的 html,它会正确显示底图。

我的尝试:我昨天更新了 pyside2folium,但它没有影响或改变结果。

这里有一些示例代码供您自己尝试。我已将 html 作为文本包含在内,但没有办法真正简化那么多,所以很抱歉文本太多。

import os
import sys
from pyside2.QtCore import QUrl
from pyside2.QtWidgets import QApplication,QLineEdit,QMainWindow,qtoolbar
from pyside2.QtWebEngineWidgets import QWebEngineView

placeholder_html = r"""<!DOCTYPE html>
<head>    
    <Meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    
        <script>
            L_NO_TOUCH = false;
            L_disABLE_3D = false;
        </script>
    
    <script src="https://cdn.jsdelivr.net/npm/leaflet@1.5.1/dist/leaflet.js"></script>
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.5.1/dist/leaflet.css"/>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
    <link rel="stylesheet" href="https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/leaflet.awesome.rotate.css"/>
    <style>html,body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
    <style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
    
            <Meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" />
            <style>
                #map_305dcca754af4fd68c9ec8c6f4d22187 {
                    position: relative;
                    width: 100.0%;
                    height: 100.0%;
                    left: 0.0%;
                    top: 0.0%;
                }
            </style>
        
    <script src="https://rawcdn.githack.com/ljagis/leaflet-measure/2.1.7/dist/leaflet-measure.js"></script>
    <link rel="stylesheet" href="https://rawcdn.githack.com/ljagis/leaflet-measure/2.1.7/dist/leaflet-measure.css"/>
</head>
<body>    
    
            <div class="folium-map" id="map_305dcca754af4fd68c9ec8c6f4d22187" ></div>
        
</body>
<script>    
    
            var map_305dcca754af4fd68c9ec8c6f4d22187 = L.map(
                "map_305dcca754af4fd68c9ec8c6f4d22187",{
                    center: [37.97388131,-122.0443919],crs: L.CRS.epsg3857,zoom: 12,zoomControl: true,preferCanvas: false,}
            );

            

        
    
            var tile_layer_a14f036f31594845b89380be31bb09fd = L.tileLayer(
                "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{"attribution": "Data by \u0026copy; \u003ca href=\"http://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e,under \u003ca href=\"http://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e.","detectRetina": false,"maxNativeZoom": 18,"maxZoom": 18,"minZoom": 0,"Nowrap": false,"opacity": 1,"subdomains": "abc","tms": false}
            ).addTo(map_305dcca754af4fd68c9ec8c6f4d22187);
        
    
            var feature_group_093f66692993484ba636a59ef8052169 = L.featureGroup(
                {}
            ).addTo(map_305dcca754af4fd68c9ec8c6f4d22187);
        
    
            var marker_dd85fc86d67445dfb4f4c435187f91e0 = L.marker(
                [37.97388131,{}
            ).addTo(feature_group_093f66692993484ba636a59ef8052169);
        
    
        marker_dd85fc86d67445dfb4f4c435187f91e0.setIcon(custom_icon_1ef21e7003ac401183c880dcbdb0e61c);
        
    
        var popup_98cc02d3036844c097ff39167bd52667 = L.popup({"maxWidth": "100%"});

        
            var html_a1239c595b2e4c07a7035181d7dce41a = $(`<div id="html_a1239c595b2e4c07a7035181d7dce41a" style="width: 100.0%; height: 100.0%;">WW-01</div>`)[0];
            popup_98cc02d3036844c097ff39167bd52667.setContent(html_a1239c595b2e4c07a7035181d7dce41a);
        

        marker_dd85fc86d67445dfb4f4c435187f91e0.bindPopup(popup_98cc02d3036844c097ff39167bd52667)
        ;

        
    
    
            var measure_control_757d1e5bfbe34cfb8f6e311097138e29 = new L.Control.Measure(
                {"position": "topright","primaryAreaUnit": "sqmeters","primaryLengthUnit": "meters","secondaryAreaUnit": "acres","secondaryLengthUnit": "miles"});
            map_305dcca754af4fd68c9ec8c6f4d22187.addControl(measure_control_757d1e5bfbe34cfb8f6e311097138e29);

        
    
            var layer_control_38ec13a480454bf98e94d88f44f11118 = {
                base_layers : {
                    "openstreetmap" : tile_layer_a14f036f31594845b89380be31bb09fd,},overlays :  {
                    "WW-01" : feature_group_093f66692993484ba636a59ef8052169,};
            L.control.layers(
                layer_control_38ec13a480454bf98e94d88f44f11118.base_layers,layer_control_38ec13a480454bf98e94d88f44f11118.overlays,{"autoZIndex": true,"collapsed": true,"position": "topright"}
            ).addTo(map_305dcca754af4fd68c9ec8c6f4d22187);
        
</script>"""

with open('placeholder.html','w') as f:
    f.write(placeholder_html)

class browser(QMainWindow):
    def __init__(self):
        super(browser,self).__init__()
        current_path = os.getcwd()
        filepath = '%s%s' % (current_path,'\\placeholder.html')
        filepath = filepath.replace('\\','/')
        url = r'file:///' + filepath        
        self.toolbar = qtoolbar()
        self.addToolBar(self.toolbar)
        self.address = QLineEdit()
        self.address.setText(url)
        self.address.returnpressed.connect(self.load)
        self.toolbar.addWidget(self.address)
        self.view = QWebEngineView()
        self.view.load(QUrl(url))
        self.view.page().urlChanged.connect(self.url_changed)
        self.setCentralWidget(self.view)

    def load(self):
        url = QUrl.fromUserInput(self.address.text())
        if url.isValid():
            self.view.load(url)

    def url_changed(self,url):
        self.address.setText(url.toString())

app = QApplication(sys.argv)
main_window = browser()
main_window.show()
sys.exit(app.exec_())

也许我只需要更新一些我没有想到的东西,或者 OpenStreetMap 不再工作了。在此期间,我会尝试其他一些事情,但如果有人能发现我可能出错的地方,或者如果他们知道我正在使用的这些软件包之一发生了变化,我们将非常感谢您的帮助。谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?