moj_nowy
moj_nowy

Reputation: 23

Cant export coordinates on Folium draw polygon in Pyqt5 app

Im writing app in pyqt5 using folium to mark some area and get gps coordinates. App works I can draw polygon shape but when Im clicking Export button nothing happend. Maybe someone had similiar problem and knows why?

import folium, io, sys
from folium.plugins.draw import Draw
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout
from PyQt5 import QtWebEngineWidgets

class Mapy(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.interfejs()

    def interfejs(self):
        vbox = QVBoxLayout(self)
        self.webEngineView = QtWebEngineWidgets.QWebEngineView()
        self.loadPage()
        vbox.addWidget(self.webEngineView)
        self.setLayout(vbox)
        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('mapy')
        self.show()

    def loadPage(self):
        m = folium.Map(
            location=[51.7687323,19.4569911], zoom_start=5
        )
        Draw(
            export=True,
            filename='my_data.geojson',
            position='topleft',
            draw_options={'polyline': False, 'rectangle': False,'circle':False, 'circlemarker':False},
            edit_options={'poly': {'allowIntersection': False}}
        ).add_to(m)
        data = io.BytesIO()
        m.save(data, close_file=False)
        self.webEngineView.setHtml(data.getvalue().decode())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    okno = Mapy()
    sys.exit(app.exec_())

Upvotes: 2

Views: 1525

Answers (1)

eyllanesc
eyllanesc

Reputation: 243887

You have to manage the downloads using the downloadRequested signal from the page profile:

import io
import sys

import folium
from folium.plugins.draw import Draw

from PyQt5.QtWidgets import QApplication, QFileDialog, QVBoxLayout, QWidget
from PyQt5.QtWebEngineWidgets import QWebEngineView


class Mapy(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.interfejs()

    def interfejs(self):
        vbox = QVBoxLayout(self)
        self.webEngineView = QWebEngineView()
        self.webEngineView.page().profile().downloadRequested.connect(
            self.handle_downloadRequested
        )
        self.loadPage()
        vbox.addWidget(self.webEngineView)
        self.setLayout(vbox)
        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle("mapy")
        self.show()

    def loadPage(self):
        m = folium.Map(location=[51.7687323, 19.4569911], zoom_start=5)
        Draw(
            export=True,
            filename="my_data.geojson",
            position="topleft",
            draw_options={
                "polyline": False,
                "rectangle": False,
                "circle": False,
                "circlemarker": False,
            },
            edit_options={"poly": {"allowIntersection": False}},
        ).add_to(m)
        data = io.BytesIO()
        m.save(data, close_file=False)
        self.webEngineView.setHtml(data.getvalue().decode())

    def handle_downloadRequested(self, item):
        path, _ = QFileDialog.getSaveFileName(
            self, "Save File", item.suggestedFileName()
        )
        if path:
            item.setPath(path)
            item.accept()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    okno = Mapy()
    sys.exit(app.exec_())

Upvotes: 1

Related Questions