python 搭建一个gis界面 可以加载shp文件 显示在地图中 并有工具按钮可以绘制点、线、面
时间: 2024-06-12 19:06:02 浏览: 198
要搭建一个GIS界面,需要使用Python中的一些常用库,如PyQt5、QGIS、GDAL、shapely等。以下是一个简单的示例代码,可以加载shp文件并在地图中显示,同时还有绘制点、线、面的工具按钮。
```python
import sys
import os
from qgis.core import *
from qgis.gui import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MapViewer(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('GIS Viewer')
self.setGeometry(100, 100, 800, 600)
# 初始化QGIS应用程序
QgsApplication.setPrefixPath('/usr', True)
self.qgs = QgsApplication([], False)
self.qgs.initQgis()
# 创建地图Canvas
self.canvas = QgsMapCanvas()
self.canvas.setCanvasColor(Qt.white)
self.canvas.enableAntiAliasing(True)
self.canvas.useImageToRender(False)
# 添加图层
self.shplayer = QgsVectorLayer('path/to/shapefile', 'Layer Name', 'ogr')
QgsProject.instance().addMapLayer(self.shplayer)
# 设置地图范围
self.canvas.setExtent(self.shplayer.extent())
self.canvas.setLayers([self.shplayer])
self.canvas.zoomToFullExtent()
# 创建地图工具栏
self.toolPan = QgsMapToolPan(self.canvas)
self.toolZoomIn = QgsMapToolZoom(self.canvas, False)
self.toolZoomOut = QgsMapToolZoom(self.canvas, True)
self.toolPoint = QgsMapToolEmitPoint(self.canvas)
self.toolLine = QgsMapToolEmitPoint(self.canvas)
self.toolPolygon = QgsMapToolEmitPoint(self.canvas)
self.toolLine.setAction(self.toolLine.ActionDrawLine)
self.toolPolygon.setAction(self.toolPolygon.ActionDrawPolygon)
# 创建工具栏
self.toolbar = QToolBar(self)
self.toolbar.addAction(QIcon('path/to/pan.png'), 'Pan', self.toolPan.activate)
self.toolbar.addAction(QIcon('path/to/zoom-in.png'), 'Zoom In', self.toolZoomIn.activate)
self.toolbar.addAction(QIcon('path/to/zoom-out.png'), 'Zoom Out', self.toolZoomOut.activate)
self.toolbar.addAction(QIcon('path/to/point.png'), 'Point', self.toolPoint.activate)
self.toolbar.addAction(QIcon('path/to/line.png'), 'Line', self.toolLine.activate)
self.toolbar.addAction(QIcon('path/to/polygon.png'), 'Polygon', self.toolPolygon.activate)
# 创建布局
layout = QVBoxLayout()
layout.addWidget(self.toolbar)
layout.addWidget(self.canvas)
self.setLayout(layout)
def closeEvent(self, event):
self.qgs.exitQgis()
if __name__ == '__main__':
app = QApplication(sys.argv)
viewer = MapViewer()
viewer.show()
sys.exit(app.exec_())
```
在代码中,首先初始化了QGIS应用程序,然后创建了一个QgsMapCanvas对象,用于显示地图。接着通过QgsVectorLayer加载了一个shapefile文件,并添加到了工程中。设置了地图范围,并将图层添加到了canvas中。
接下来创建了一些地图工具,包括平移、缩放、绘制点、绘制线、绘制面等工具,并将它们添加到了工具栏中。
最后创建了一个垂直布局,并将工具栏和canvas添加到了其中,最终将布局设置为窗口的主布局。
运行代码后,将会显示一个包含工具栏和地图的窗口,通过点击工具栏上的按钮可以使用对应的地图工具。同时在地图中加载了一个shapefile文件,可以进行缩放、平移等操作。
阅读全文