我正在做一个项目,我有一个gpx
文件,其中包含latitude
和longitude
。
我需要在pyqt5
窗口中实时绘制一条线,这意味着它应该加载窗口,然后继续绘制线。
这将在以后被来自车辆的实时gps数据所取代,这样我们就可以标出车辆的移动位置。
到目前为止,使用folium
和gpxpy
我已经能够绘制这条线,但我无法找到任何有用的资源来解释如何实时做到这一点。
下面是代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout
from PyQt5.QtWebEngineWidgets import QWebEngineView
import folium
import gpxpy
class MapWidget(QWidget):
def __init__(self, parent=None):
super(MapWidget, self).__init__(parent)
# Parse the GPX file
gpx_file = open('Init.gpx', 'r')
gpx = gpxpy.parse(gpx_file)
# Create a Folium map object
m = folium.Map(location=[51.44948037, -0.47322678], zoom_start=25)
# Add the GPX track to the map
for track in gpx.tracks:
for segment in track.segments:
folium.PolyLine([(p.latitude, p.longitude) for p in segment.points], color='red', weight=2.5, opacity=1).add_to(m)
# Create a QWebEngineView object to display the map
self.webview = QWebEngineView()
self.webview.setHtml(m._repr_html_())
# Create a layout and add the webview to it
layout = QVBoxLayout(self)
layout.addWidget(self.webview)
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MapWidget()
widget.show()
sys.exit(app.exec_())
输出;
谁能推荐一个允许实时数据刷新的可能实现?
1条答案
按热度按时间cidc1ykv1#
我需要在pyqt5窗口中实时绘制一条线,这意味着它应该加载窗口,然后继续绘制线
在PyQt中,这需要一个
QtCore/QTimer
,如“QTimer
example for PyQt5”所示:如果在应用程序中周期性地执行操作,例如周期性地检测主机的CPU值,则需要QTimer定时器。
当窗口控件收到超时信号时,它将停止此计时器。
在您的原始代码中,使用
folium.PolyLine...add_to(m)
绘制线条。相反,您可以从空折线开始:
然后使用
QTimer
循环添加GPX数据(或最终的实时GPS数据)中的行add_point_to_polyline
方法将通过更新folium.PolyLine
对象的locations属性来绘制线条,该属性存储为self.polyline
。把这些放在一起: