1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| import io
import folium
from PyQt6.QtWebEngineWidgets import QWebEngineView
from folium.plugins import MousePosition, BeautifyIcon
from PyQt6 import QtCore, QtWidgets
import numpy as np
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(900, 750)
self.verticalLayoutWidget = QtWidgets.QWidget(Form)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 900, 600))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.depart = (16.90921, -25.11334)
depart_name = "Mindelo"
self.arrivee = (-33.91008, 18.44127)
arrivee_name = "Cape Town"
point_central = (self.depart[0]+self.arrivee[0])/2, (self.depart[1]+self.arrivee[1])/2
mapObj = folium.Map(location=point_central, zoom_start=3, max_zoom=30) #### création carte ####
folium.Marker(self.depart, icon=BeautifyIcon(background_color='white', border_color='blue', border_width=2,
icon="arrow-down",
icon_shape="marker", number="D", text_color="red"),
tooltip=depart_name).add_to(mapObj)
folium.Marker(self.arrivee,
icon=BeautifyIcon(background_color='white', border_color='black', border_width=2,
icon="arrow-down",
icon_shape="marker", number="A"), tooltip=arrivee_name).add_to(mapObj)
MousePosition().add_to(mapObj) #### affichage des coordonnées en bas a droite ####
# enregistrement map data en data object
data = io.BytesIO()
mapObj.save(data, close_file=False)
self.webView = QWebEngineView() #### affichage map dans layout ####
self.webView.setHtml(data.getvalue().decode())
self.verticalLayout.addWidget(self.webView)
self.pushButton = QtWidgets.QPushButton(Form) #### bouton calcul distance ####
self.pushButton.setGeometry(QtCore.QRect(110, 620, 160, 60))
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("calcul distance ortho")
self.pushButton.clicked.connect(self.calDisOrt)
self.textBrowser = QtWidgets.QTextBrowser(Form) #### zone affichage distance ####
self.textBrowser.setGeometry(QtCore.QRect(360, 620, 380, 60))
self.textBrowser.setObjectName("textBrowser")
self.textBrowser.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "distance orthodromique"))
def calDisOrt(self): #### fonction calcule distance ####
latAr = np.deg2rad(self.arrivee[0])
lonAr = np.deg2rad(self.arrivee[1])
latDep = np.deg2rad(self.depart[0])
lonDep = np.deg2rad(self.depart[1])
h = np.arcsin(np.sin(latDep)*np.sin(latAr)+np.cos(latDep)*np.cos(latAr)*np.cos(lonAr-lonDep))
ortho = 60 * (90 - (h/np.pi*180))
self.textBrowser.setText(f'{round(ortho, 2)} milles nautique')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec()) |
Partager