map.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from qgis.core import *
  2. from qgis.gui import *
  3. from qgis.PyQt.QtWidgets import *
  4. from qgis.PyQt.QtGui import *
  5. from qgis.PyQt.QtCore import *
  6. from os.path import *
  7. import sys
  8. class MyWnd(QMainWindow):
  9. def __init__(self):
  10. QMainWindow.__init__(self)
  11. self.resize(1200, 800)
  12. self.setWindowTitle("GIS软件")
  13. self.canvas = QgsMapCanvas()
  14. self.canvas.setCanvasColor(Qt.white)
  15. self.canvas.setVisible(True)
  16. self.canvas.xyCoordinates.connect(self.showXY)
  17. self.actionZoomIn = QAction("放大工具", self)
  18. self.actionZoomOut = QAction("缩小工具", self)
  19. self.actionPan = QAction("平移工具", self)
  20. self.actionOpenRas = QAction("打开影像", self)
  21. self.actionZoomIn.setCheckable(True)
  22. self.actionZoomOut.setCheckable(True)
  23. self.actionPan.setCheckable(True)
  24. self.actionZoomIn.triggered.connect(self.zoomIn)
  25. self.actionZoomOut.triggered.connect(self.zoomOut)
  26. self.actionPan.triggered.connect(self.pan)
  27. self.actionOpenRas.triggered.connect(self.openDialogRas)
  28. self.toolbar = QToolBar("Canvas actions")
  29. self.addToolBar(self.toolbar)
  30. self.toolbar.addAction(self.actionZoomIn)
  31. self.toolbar.addAction(self.actionZoomOut)
  32. self.toolbar.addAction(self.actionPan)
  33. self.toolbar.addAction(self.actionOpenRas)
  34. self.root = QgsProject.instance().layerTreeRoot()
  35. self.model = QgsLayerTreeModel(self.root, self)
  36. self.model.setFlag(QgsLayerTreeModel.AllowNodeReorder)
  37. self.model.setFlag(QgsLayerTreeModel.AllowNodeChangeVisibility)
  38. self.tocView = QgsLayerTreeView()
  39. self.tocView.setModel(self.model)
  40. self.tocView.setFixedWidth(200)
  41. self.bridge = QgsLayerTreeMapCanvasBridge(self.root, self.canvas, self)
  42. # create the map tools
  43. self.toolPan = QgsMapToolPan(self.canvas)
  44. self.toolPan.setAction(self.actionPan)
  45. self.toolZoomIn = QgsMapToolZoom(self.canvas, False) # false = in
  46. self.toolZoomIn.setAction(self.actionZoomIn)
  47. self.toolZoomOut = QgsMapToolZoom(self.canvas, True) # true = out
  48. self.toolZoomOut.setAction(self.actionZoomOut)
  49. centralWidget = QWidget()
  50. hLayout = QHBoxLayout()
  51. hLayout.addWidget(self.canvas)
  52. hLayout.addWidget(self.tocView)
  53. centralWidget.setLayout(hLayout)
  54. self.setCentralWidget(centralWidget)
  55. self.pan()
  56. def zoomIn(self):
  57. self.canvas.setMapTool(self.toolZoomIn)
  58. def zoomOut(self):
  59. self.canvas.setMapTool(self.toolZoomOut)
  60. def pan(self):
  61. self.canvas.setMapTool(self.toolPan)
  62. def openDialogRas(self):
  63. path_to_tif = QFileDialog.getOpenFileName()[0]
  64. if path_to_tif == "":
  65. return
  66. self.addRaster(path_to_tif)
  67. def openDialogVec(self):
  68. path_to_vec = QFileDialog.getOpenFileName()[0]
  69. if path_to_vec == "":
  70. return
  71. self.addVector(path_to_vec)
  72. def addRaster(self, path):
  73. layer = QgsRasterLayer(path, basename(path))
  74. if not layer.isValid():
  75. QMessageBox.information(self, '提示', '文件打开失败', QMessageBox.Ok)
  76. return
  77. layer.dataProvider().setNoDataValue(1, 0)
  78. QgsProject.instance().addMapLayers([layer])
  79. self.canvas.setLayers([layer])
  80. self.canvas.setExtent(layer.extent())
  81. self.canvas.refresh()
  82. def showXY(self, point):
  83. m_statusBar = self.statusBar()
  84. m_statusBar.showMessage("Coordinate:" + str(point.x()) + "," + str(point.y()))
  85. if __name__ == "__main__":
  86. QgsApplication.setPrefixPath("./qgis_init", True)
  87. qgs = QgsApplication([], False)
  88. qgs.initQgis()
  89. w = MyWnd()
  90. w.show()
  91. sys.exit(qgs.exec_())
  92. qgs.exitQgis()