pyqt5 加载shp并显示
时间: 2024-09-28 09:03:35 浏览: 14
在PyQt5中使用QGIS库加载.shp文件并显示地图可以分为几个步骤。这里提供一个简化版本的教程:
首先,确保已安装了`qgis-python`库以及`PyQt5`。如果没有,你可以通过pip安装它们:
```bash
pip install qgis python-qgis
```
接下来,我们创建一个简单的GUI应用,其中包含一个按钮来触发加载.shp文件的操作:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout
from PyQt5.QtGui import QIcon
from qgis.core import QgsApplication, QgsVectorLayer, QgsMessageLog
class ShpLoader(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle("PyQt5 Shp 文件加载器")
self.setWindowIcon(QIcon('path_to_your_icon.ico')) # 设置图标路径
load_button = QPushButton("加载 Shapefile", self)
load_button.clicked.connect(self.load_shp_file)
load_button.resize(150, 40)
load_button.move(100, 100)
layout = QVBoxLayout()
layout.addWidget(load_button)
self.setLayout(layout)
def load_shp_file(self):
try:
# 初始化QGIS应用程序
QgsApplication.setPrefixPath("/usr", True) # 根据你的系统设置
QgsApplication.initQgis()
# 弹出文件选择对话框
file_dialog = QFileDialog()
file_path = file_dialog.getOpenFileName(None, '选择Shapefile', '', "*.shp")[0]
if not file_path:
return # 如果没有选择文件则退出
# 加载Shapefile
layer = QgsVectorLayer(file_path, "shapefile", "ogr")
if layer.isValid():
# 将地图层添加到当前项目
QgsProject.instance().addMapLayer(layer)
print(f"成功加载 Shapefile: {file_path}")
QgsMessageLog.logMessage(f"已将 Shapefile '{file_path}' 添加到地图上", level=QgsMessageLog.INFO)
else:
QgsMessageLog.logMessage(f"无法加载 Shapefile '{file_path}'", level=QgsMessageLog.ERROR)
except Exception as e:
QgsMessageLog.logMessage(str(e), level=QgsMessageLog.CRITICAL)
if __name__ == "__main__":
app = QApplication(sys.argv)
shp_loader = ShpLoader()
shp_loader.show()
sys.exit(app.exec_())
```
这个例子中,我们创建了一个主窗口,点击“加载 Shapefile”按钮后,会选择一个.shp文件并将其作为矢量图层加入到QGIS地图上。