我有以下代码在 Jupyter 笔记本中运行良好:
import os
import json
import random
import requests
from ipyleaflet import Map, GeoJSON, LayersControl
def handle_click(**kwargs):
print(kwargs.get('feature')['properties']['ID1'])
with open('roadway.geojson', 'r') as f:
data = json.load(f)
m = Map(center=(39.7, -86), zoom=10)
geo_json = GeoJSON(
data=data,
)
m.add_layer(geo_json)
geo_json.on_click(handle_click)
m.add_control(LayersControl())
m
我想使用 pyqt5 在窗口中显示它。我想我需要使用 pyqtlet 编写一个等效的代码,我尝试这样做,但我不知道如何添加我的geojson文件,然后当然使用 pyqtlet 处理我的 geojson 层上的鼠标点击。这是我对 pyqtlet 的试用:
import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget
from pyqtlet import L, MapWidget
class MapWindow(QWidget):
def __init__(self):
super().__init__()
self.mapWidget = MapWidget()
self.layout = QVBoxLayout()
self.layout.addWidget(self.mapWidget)
self.setLayout(self.layout)
self.map = L.map(self.mapWidget)
self.map.setView([39.7, -86], 10)
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png').addTo(self.map)
self.data = L.layerGroup("roadway.geojson") ### This is where I get stuck and of course, how to handle clicks on this layer
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MapWindow()
sys.exit(app.exec_())