def run(self): """Run method that performs all the real work""" # Create the dialog with elements (after translation) and keep reference # Only create GUI ONCE in callback, so that it will only load when the plugin is started if self.first_start == True: self.first_start = False self.dlg = FeatureSelectExprSampleDialog(self.iface.mainWindow()) self.layer = self.iface.activeLayer() if (self.layer == None) or (type(self.layer) is not qgis.core.QgsVectorLayer): QMessageBox.about(None, '警告', 'ベクタレイヤを選択してから実行してください') return # 邪魔にならない場所にダイアログを表示させたいので pos = self.canvas.mapToGlobal(QPoint(0, 0)) self.dlg.move(pos.x(), pos.y()) # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result: # Do something useful here - delete the line containing pass and # substitute with your code. pass
def execSample(self): if self.action.isChecked(): self.layer = self.iface.activeLayer() if (self.layer == None) or (type(self.layer) is not qgis._core.QgsVectorLayer): QMessageBox.about(None, '警告', 'ベクタレイヤを選択してから実行してください') self.action.setChecked(False) return self.previousMapTool = self.canvas.mapTool() self.canvas.setMapTool(self.mouseEventSample) self.canvas.mapToolSet.connect(self.unsetTool) self.iface.layerTreeView().currentLayerChanged.connect( self.changeLayer) # アクティブレイヤが変更された時に呼ぶメソッドを登録 self.mouseEventSample.setLayer(self.iface.activeLayer()) self.mouseEventSample.featureIdentified.connect(self.editAttribute) else: self.mouseEventSample.featureIdentified.disconnect( self.editAttribute) self.iface.layerTreeView().currentLayerChanged.disconnect( self.changeLayer) self.canvas.mapToolSet.disconnect(self.unsetTool) self.canvas.unsetMapTool(self.mouseEventSample) self.canvas.setMapTool(self.previousMapTool)
def start(self): # このプログラム使うときはこの辺を調整してください self._llcrs = 4326 self._xycrs = 2451 # 千葉県のDEMでテストしたので9系になってます。 self._savedir = 'c:\\users\\〇〇\\desktop\\pic\\' # 横断図の保存先 self._odanlinespan = 100 # 横断線の間隔 self._odanlinelength = 200 # 横断線の片側の長さ self._odanpointspan = 10 # 横断線上のサンプリング間隔 layer = self.iface.activeLayer() if type(layer) != qgis.core.QgsRasterLayer: QMessageBox.about(None, 'エラー', 'ラスタレイヤを選択してから実行してください。') self.action.setChecked(False) self.canvas.setMapTool(self.previousMapTool) # このツール実行前に戻す return self.gr = GetRasterPixelValue(layer) maptool = RubberBand(self.iface, self.canvas, QgsWkbTypes.LineGeometry) maptool.getObject.connect(self.setFeature) if len(QgsProject.instance().mapLayersByName('縦断線')) == 0: self.ver = self.createTemporaryLayer('縦断線', 'LineString', '&field=key:string') else: self.ver = QgsProject.instance().mapLayersByName('縦断線')[0] if len(QgsProject.instance().mapLayersByName('横断線')) == 0: self.hol = self.createTemporaryLayer('横断線', 'Point', '&field=key:string&field=linecount:integer&field=pointcount:integer&field=elev:double') else: self.hol = QgsProject.instance().mapLayersByName('横断線')[0] self.canvas.setMapTool(maptool) self.canvas.mapToolSet.connect(self.unsetTool) # このサンプル実行中に他のアイコンを押した場合
def setConfig(self): self.config["Ptx_BS"] = np.round(self.PtxBS.value(), 2) self.config["G_BS"] = np.round(self.G_BS.value(), 2) self.config["cable_Loss_BS"] = np.round(self.cableLossBs.value(), 2) self.config["sensitivity_BS"] = np.round(self.sensivityBS.value(), 2) self.config["G_device"] = np.round(self.G_device.value(), 2) self.config["cable_Loss_device"] = np.round( self.Cable_Loss_device.value(), 2) self.config["Indoor_Loss"] = np.round(self.indoorLoss.value(), 2) self.config["Urban_res"] = self.Urbanres.value() self.config["heigth_floor"] = np.round(self.HeightbyFloor.value(), 2) self.config["deltaFrequencyDL"] = np.round( self.deltaFrequencyDL.value(), 2) self.config["K"] = np.round(self.Kfactor.value(), 3) self.config["Miscelaneous_loss"] = np.round( self.miscellaneousLoss.value(), 2) index = self.modelPropagation.currentIndex() self.config["Model"] = self.models[str(index)] self.chooseModel(index) QMessageBox.about(self, "Message", "The changes have been saved successfully") if self.config["Urban_res"] != 5: self.refreshPlot() else: self.profiletoolcore.plotProfil()
def run(self): """Run method that performs all the real work""" # Create the dialog with elements (after translation) and keep reference # Only create GUI ONCE in callback, so that it will only load when the plugin is started if self.first_start == True: self.first_start = False self.dlg = PositionalAccuracyDialog() self.dlg.comboBox.currentIndexChanged.connect(self.return_units) # Preenchendo o comboBox (principal) self.dlg.comboBox.clear() #self.dlg.lineEditSize.setText(str(10.0)) layers = QgsProject.instance().mapLayers().values() for layer in layers: if layer.type() == QgsMapLayer.VectorLayer: self.dlg.comboBox.addItem(layer.name(), layer) # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result: # Do something useful here - delete the line containing pass and # substitute with your code. #pass #Calculate lenghts #ly = iface.activeLayer() #Input data selection index = self.dlg.comboBox.currentIndex() selection = self.dlg.comboBox.itemData(index) ly = selection features = ly.getFeatures() d = QgsDistanceArea() d.setEllipsoid('WGS84') total = 0 soma2 = 0 n = 0 emq = 0 for f in features: geom = f.geometry() soma2 = soma2 + d.measureLength(geom)**2 n = n + 1 emq = (soma2 / n)**(1 / 2) self.dlg.label_size.setText(str(emq)) QMessageBox.about(None, "Systematic random sampling", str(emq))
def exportEvent(self): mapName = self.txtMapName.text().strip() if mapName == '': QtWidgets.QMessageBox.about(self, 'Message', 'Map name is required!') return exportDst = self.txtExportDestination.text() # Lấy địa chỉ đường dẫn xuất và kiểm tra if not os.path.exists(exportDst): QMessageBox.about(self, "Error", "Invalid path") return self.txtMapName.setText(mapName) self.parent.exportDst = exportDst self.parent.mapName = mapName self.parent.exportEvent()
def loadOrders(self): ret = True if self.request_order is None: self.request_order = bbp_order.requestOrders() if self.request_order is None: QMessageBox.about(self, "NTSOMZ_BBPCatalog", "Order request Failed") return False current_orders = None current_scenes = None current_orders = self.request_order.getOrders() print(current_orders) if current_orders is None: QMessageBox.about( self, "NTSOMZ_BBPCatalog", "Request failed. Possible reasons:\n 1. Server is down.\n 2. API key is invalid." ) self.scenes = None self.orders = None ret = False else: current_orders = [ checkedDataStructure(False, i) for i in current_orders ] current_scenes = [ checkedDataStructure(False, j) for i in current_orders for j in i.data.getProducts() if not j.tile_service is None ] print(current_scenes) def crosscheck(ListReference: List[checkedDataStructure], ListInQuestion: List[checkedDataStructure]): if ListReference is None: return ListInQuestion if ListInQuestion is None: return None for i in ListInQuestion: for j in ListReference: if i.data == j.data: i.isChecked = j.isChecked return ListInQuestion if ret: self.orders = crosscheck(self.orders, current_orders) self.scenes = crosscheck(self.scenes, current_scenes) self.updateTabWidget() return ret
def showEvent(self, e): self.layer = self.iface.activeLayer() if type(self.layer) is not qgis.core.QgsVectorLayer: QMessageBox.about(None, '警告', 'ベクタレイヤを選択してから実行してください') return self.execButton.setEnabled(False) self.saveButton.setEnabled(False) self.layer.removeSelection() # コンボボックスにフィールド名を設定する self.fieldsBox.clear() for s in self.layer.fields(): self.fieldsBox.addItem(s.name()) self.oldsetting = QSettings().value("/Qgis/dockAttributeTable") # 一時退避
def _aboutPlugin(self): """Show the about dialog""" QMessageBox.about(self, "About", """<h1>geoCore</h1> <p> Copyright (C) 2019-2021 Gerrit Bette, T-Systems on site services GmbH<br> This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions; see <a href="https://www.gnu.org/licenses/gpl-3.0-standalone.html"> https://www.gnu.org/licenses</a> for details. </p> <p> Citation: G. Bette & M. Mennenga 2021: t-systems-on-site-services-gmbh/geoCore v0.8 (Version v0.8). Zenodo. <a href=" http://doi.org/10.5281/zenodo.4548887"> http://doi.org/10.5281/zenodo.4548887</a> </p> <p> <a href="https://github.com/t-systems-on-site-services-gmbh/geoCore/blob/master/geoCore/help/usage.md"> Manual</a> </p> """)
def run(self): """Run method that performs all the real work""" # 設定ダイアログ self.initDialog = initDialog(self.iface, self.iface.mainWindow()) self.initDialog.show() result = self.initDialog.exec_() if result: layerName = self.initDialog.layerName userName = self.initDialog.userName if layerName == '': QMessageBox.about(self.iface.mainWindow(), "警告", "編集するレイヤ名を入力してください") return # プラグイン実行 pos = self.canvas.mapToGlobal(QPoint(0, 0)) self.dlg = AddFeatureSampleDialog(self.iface, layerName, userName, self.iface.mainWindow()) self.dlg.move(pos.x(), pos.y()) self.dlg.show()
def __init__(self): super(MainWindow, self).__init__() self.setupUi(self) self.first_flag = True self.setWindowTitle('PyQGIS') # 调整窗口大小 self.resize(800, 600) # 初始化图层树 vl = QVBoxLayout(self.dockWidgetContents) self.layerTreeView = QgsLayerTreeView(self) vl.addWidget(self.layerTreeView) # 初始化地图画布 self.mapCanvas = QgsMapCanvas(self) hl = QHBoxLayout(self.frame) hl.setContentsMargins(0, 0, 0, 0) hl.addWidget(self.mapCanvas) # 建立桥梁 self.model = QgsLayerTreeModel(PROJECT.layerTreeRoot(), self) self.model.setFlag(QgsLayerTreeModel.AllowNodeRename) self.model.setFlag(QgsLayerTreeModel.AllowNodeReorder) self.model.setFlag(QgsLayerTreeModel.AllowNodeChangeVisibility) self.model.setFlag(QgsLayerTreeModel.ShowLegendAsTree) self.model.setAutoCollapseLegendNodes(10) self.layerTreeView.setModel(self.model) self.layerTreeBridge = QgsLayerTreeMapCanvasBridge( PROJECT.layerTreeRoot(), self.mapCanvas, self) # 显示经纬度 self.mapCanvas.xyCoordinates.connect(self.showLngLat) # 打开工程 self.actionOpen.triggered.connect(self.actionOpenTriggered) # 退出程序 self.actionQuit.triggered.connect(self.close) # 地图工具 # TODO:放大、缩小没有图标 self.actionPanTriggered() self.actionPan.triggered.connect(self.actionPanTriggered) self.actionZoomin.triggered.connect(self.actionZoomInTriggered) self.actionZoomout.triggered.connect(self.actionZoomOutTriggered) self.actionIdentity.triggered.connect(self.actionIdentifyTriggered) # 图层 self.actionShapefile.triggered.connect(self.actionShapefileTriggered) self.actionCsv.triggered.connect(self.actionCsvTriggered) self.actionPostGIS.triggered.connect(self.actionPostGISTriggered) self.actionWFS.triggered.connect(self.actionWFSTriggered) self.actionGeotiff.triggered.connect(self.actionGeotiffTriggered) self.actionXYZ.triggered.connect(self.actionXYZTriggered) # 绘图工具 self.actionPoint.triggered.connect(self.actionPointTriggered) self.actionLine.triggered.connect(self.actionLineTriggered) self.actionRectangle.triggered.connect(self.actionRectangleTriggered) self.actionPolygon.triggered.connect(self.actionPolygonTriggered) # 关于Qt self.actionAboutQt.triggered.connect( lambda: QMessageBox.aboutQt(self, '关于Qt')) self.actionAbout.triggered.connect( lambda: QMessageBox.about(self, '关于', 'PyQGIS二次开发')) # self.actionPan.triggered.connect(self.actionPanTriggered) # self.actionIdentify.triggered.connect(self.actionIdentifyTriggered) # 图层右键菜单 self.customMenuProvider = CustomMenuProvider(self.layerTreeView, self.mapCanvas) self.layerTreeView.setMenuProvider(self.customMenuProvider)
def showAbout(self): about = open(os.path.join(BASE_DIR, 'ABOUT.html')).read().format(version='.'.join(map(str, VERSION))) QMessageBox.about(self.iface.mainWindow(), 'ProMaIDes Toolbox', about)