def openRasterFile(sFileName, sLayerName, iLayerEPSG=4326, bMapUpd=False): # Check layer in registry if bMapUpd is False: bMapLayer = checkMapLayer(sLayerName) else: bMapLayer = False # Upload or reload layer if bMapLayer is False: # Get layer information and data oFileInfo = QFileInfo(sFileName) oFilePath = oFileInfo.filePath() oFileBase = oFileInfo.baseName() # Define layer object oMapLayer = QgsRasterLayer(oFilePath, oFileBase) # Set layer crs oCrs = oMapLayer.crs() oCrs.createFromId(iLayerEPSG) oMapLayer.setCrs(oCrs) else: # Layer available in registry oMapLayer = getMapLayer(sLayerName) return oMapLayer, bMapLayer
def getFiles(pattern, directory): files = [] d = QDir(directory) for f in d.entryList(): if f == "." or f == "..": continue fi = QFileInfo(d, f) if fi.isDir(): files.extend(getFiles(pattern, unicode(fi.filePath()))) elif re.search(pattern, f): files.append(os.path.abspath(unicode(fi.filePath()))) return files
def __init__(self, methodName): """Run once on class initialisation.""" unittest.TestCase.__init__(self, methodName) myPath = os.path.join(TEST_DATA_DIR, 'landsat.tif') rasterFileInfo = QFileInfo(myPath) mRasterLayer = QgsRasterLayer(rasterFileInfo.filePath(), rasterFileInfo.completeBaseName()) rasterRenderer = QgsMultiBandColorRenderer(mRasterLayer.dataProvider(), 2, 3, 4) mRasterLayer.setRenderer(rasterRenderer) #pipe = mRasterLayer.pipe() #assert pipe.set(rasterRenderer), 'Cannot set pipe renderer' QgsMapLayerRegistry.instance().addMapLayers([mRasterLayer]) # create composition with composer map self.mMapRenderer = QgsMapRenderer() layerStringList = [] layerStringList.append(mRasterLayer.id()) self.mMapRenderer.setLayerSet(layerStringList) self.mMapRenderer.setProjectionsEnabled(False) self.mComposition = QgsComposition(self.mMapRenderer) self.mComposition.setPaperSize(297, 210) self.mComposerMap = QgsComposerMap(self.mComposition, 20, 20, 200, 100) self.mComposerMap.setFrameEnabled(True) self.mComposition.addComposerMap(self.mComposerMap)
def getFiles(pattern, directory): files = [] d = QDir(directory) for f in d.entryList(): if f=="." or f=="..": continue fi = QFileInfo(d, f) if fi.isDir(): files.extend( getFiles( pattern, unicode( fi.filePath() ) ) ) elif re.search( pattern, f): files.append( os.path.abspath( unicode( fi.filePath() ) ) ) return files
def __init__(self, methodName): """Run once on class initialisation.""" unittest.TestCase.__init__(self, methodName) myPath = os.path.join(TEST_DATA_DIR, 'landsat.tif') rasterFileInfo = QFileInfo(myPath) mRasterLayer = QgsRasterLayer(rasterFileInfo.filePath(), rasterFileInfo.completeBaseName()) rasterRenderer = QgsMultiBandColorRenderer( mRasterLayer.dataProvider(), 2, 3, 4) mRasterLayer.setRenderer(rasterRenderer) #pipe = mRasterLayer.pipe() #assert pipe.set(rasterRenderer), 'Cannot set pipe renderer' QgsMapLayerRegistry.instance().addMapLayers([mRasterLayer]) # create composition with composer map self.mMapRenderer = QgsMapRenderer() layerStringList = QStringList() layerStringList.append(mRasterLayer.id()) self.mMapRenderer.setLayerSet(layerStringList) self.mMapRenderer.setProjectionsEnabled(False) self.mComposition = QgsComposition(self.mMapRenderer) self.mComposition.setPaperSize(297, 210) self.mComposerMap = QgsComposerMap(self.mComposition, 20, 20, 200, 100) self.mComposerMap.setFrameEnabled(True) self.mComposition.addComposerMap(self.mComposerMap)
def setLastUsedDir(filePath): settings = QSettings() fileInfo = QFileInfo(filePath) if fileInfo.isDir(): dirPath = fileInfo.filePath() else: dirPath = fileInfo.path() settings.setValue( "/GdalTools/lastUsedDir", dirPath )
def dropEvent(self, event): for file in event.mimeData().urls(): fi = QFileInfo(QFile(file.toLocalFile())) if fi.suffix() in self.acceptedFormats: self.addImageToTable(fi.filePath(), self.table.rowCount()) else: self.statusBar.showMessage('File format of {} not supported'.format(fi.fileName()), 5000) event.accept()
def dropEvent(self, event): for file in event.mimeData().urls(): fi = QFileInfo(QFile(file.toLocalFile())) if fi.suffix() in self.acceptedFormats: self.addImageToTable(fi.filePath(), self.table.rowCount()) else: self.statusBar.showMessage( 'File format of {} not supported'.format(fi.fileName()), 5000) event.accept()
def on_actionOpen_file_triggered(self): file_dialog = QFileDialog(self, self.tr("Open file(s)..."), filter=self.tr("FITS files (*.fit *.dst *.fits *.fts *.lilo *.lihi *.silo *.sihi *.mxlo *.mxhi *.rilo *.rihi *.vdlo *.vdhi)")) file_dialog.setFileMode(QFileDialog.ExistingFile) files = file_dialog.getOpenFileNames() if files: for file_ in files: file_info = QFileInfo(file_) file_path = str(file_info.filePath()) self.add_tab(file_path, file_info.fileName())
def method_41(self): filePathDir = QFileDialog.getOpenFileName(self, "Open Data",QCoreApplication.applicationDirPath (),"XML Files (*.xml)") if filePathDir == "": return self.parametersPanel.pnlFile.Value = filePathDir fileInfo = QFileInfo(filePathDir) self.directory = fileInfo.filePath() self.loaderAixm.method_1(filePathDir, True); self.method_40()
def testPrintMapFromTemplate(self): """Test that we can get a map to render in the template.""" myPath = os.path.join(TEST_DATA_DIR, 'landsat.tif') myFileInfo = QFileInfo(myPath) myRasterLayer = QgsRasterLayer(myFileInfo.filePath(), myFileInfo.completeBaseName()) myRenderer = QgsMultiBandColorRenderer( myRasterLayer.dataProvider(), 2, 3, 4 ) #mRasterLayer.setRenderer( rasterRenderer ) myPipe = myRasterLayer.pipe() assert myPipe.set( myRenderer ), "Cannot set pipe renderer" QgsMapLayerRegistry.instance().addMapLayers([myRasterLayer]) myMapRenderer = QgsMapRenderer() myLayerStringList = [] myLayerStringList.append(myRasterLayer.id()) myMapRenderer.setLayerSet(myLayerStringList) myMapRenderer.setProjectionsEnabled(False) myComposition = QgsComposition(myMapRenderer) myFile = os.path.join(TEST_DATA_DIR, 'template-for-substitution.qpt') myTemplateFile = file(myFile, 'rt') myTemplateContent = myTemplateFile.read() myTemplateFile.close() myDocument = QDomDocument() myDocument.setContent(myTemplateContent) myComposition.loadFromTemplate(myDocument) # now render the map, first zooming to the raster extents myMap = myComposition.getComposerMapById(0) myMessage = ('Map 0 could not be found in template %s', myFile) assert myMap is not None, myMessage myExtent = myRasterLayer.extent() myMap.setNewExtent(myExtent) myImagePath = os.path.join(str(QDir.tempPath()), 'template_map_render_python.png') myPageNumber = 0 myImage = myComposition.printPageAsRaster(myPageNumber) myImage.save(myImagePath) assert os.path.exists(myImagePath), 'Map render was not created.' # Not sure if this is a predictable way to test but its quicker than # rendering. myFileSize = QFileInfo(myImagePath).size() myExpectedFileSize = 100000 myMessage = ('Expected file size to be greater than %s, got %s' ' for %s' % (myExpectedFileSize, myFileSize, myImagePath)) assert myFileSize > myExpectedFileSize, myMessage
def create_raster(self, raster_path, crs=None): fileInfo = QFileInfo(raster_path) baseName = fileInfo.baseName() path = fileInfo.filePath() if (baseName and path): layer = QgsRasterLayer(path, baseName) if crs != None: layer.setCrs(crs) return layer else: return layer
def grassExtent(vector1): #Set GRASS extent fileInfo0 = QFileInfo(vector1) path0 = fileInfo0.filePath() baseName0 = fileInfo0.baseName() layer0 = QgsVectorLayer("%s" % (vector1), "vector1", "ogr") ext = layer0.extent() (xmin, xmax, ymin, ymax) = (ext.xMinimum(), ext.xMaximum(), ext.yMinimum(), ext.yMaximum()) grassExtent = str(xmin) + "," + str(xmax) + "," + str(ymin) + "," + str( ymax) return grassExtent
def ExportHUMgrid2raster(diretorioOut, resolucao): resultado3 = diretorioOut + r"\resultado.shp" layer = QgsVectorLayer(resultado3, 'resultado', 'ogr') ext = layer.extent() (xmin, xmax, ymin, ymax) = (ext.xMinimum(), ext.xMaximum(), ext.yMinimum(), ext.yMaximum()) grassExtent = str(xmin) + "," + str(xmax) + "," + str(ymin) + "," + str( ymax) QgsMapLayerRegistry.instance().addMapLayer(layer) query = '"sumINDIVAL" is null' selection = layer.getFeatures( QgsFeatureRequest().setFilterExpression(query)) layer.setSelectedFeatures([k.id() for k in selection]) selection = layer.getFeatures( QgsFeatureRequest().setFilterExpression(query)) layer.setSelectedFeatures([k.id() for k in selection]) # Update do campo sumINDIVAL no shapefile expressionB = QgsExpression("0") indexB = layer.fieldNameIndex("sumINDIVAL") expressionB.prepare(layer.pendingFields()) layer.startEditing() for feature in layer.getFeatures( QgsFeatureRequest().setFilterExpression(query)): valueB = expressionB.evaluate(feature) layer.changeAttributeValue(feature.id(), indexB, valueB) layer.commitChanges() layer.updateExtents() layer.dataProvider().forceReload() layer.removeSelection() print 'Updated!' resultado4 = diretorioOut + r"\centroides.shp" processing.runalg("qgis:polygoncentroids", resultado3, resultado4) layer1 = QgsVectorLayer(resultado4, 'centroides', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(layer1) resultado5 = diretorioOut + r"\resultado.tif" #processing.runalg("saga:shapestogrid",resultado4,"sumINDIVAL",2,4,0,0,3,grassExtent,resolucao,0,resultado5) processing.runalg("grass7:v.to.rast.attribute", resultado4, 0, "sumINDIVAL", grassExtent, resolucao, -1, 0.0001, resultado5) fileInfo2 = QFileInfo(resultado5) path2 = fileInfo2.filePath() baseName2 = fileInfo2.baseName() layer2 = QgsRasterLayer(path2, baseName2) if layer2.isValid() is True: QgsMapLayerRegistry.instance().addMapLayer(layer2) print "Layer2 was loaded successfully!" else: print "Unable to read basename2 and file path2 - Your string is probably invalid"
def on_actionOpen_file_triggered(self): file_dialog = QFileDialog( self, self.tr("Open file(s)..."), filter=self. tr("FITS files (*.fit *.dst *.fits *.fts *.lilo *.lihi *.silo *.sihi *.mxlo *.mxhi *.rilo *.rihi *.vdlo *.vdhi)" )) file_dialog.setFileMode(QFileDialog.ExistingFile) files = file_dialog.getOpenFileNames() if files: for file_ in files: file_info = QFileInfo(file_) file_path = str(file_info.filePath()) self.add_tab(file_path, file_info.fileName())
def StringToRaster(raster): # Mira si se le pasa un string if isinstance(raster, basestring): fileInfo = QFileInfo(raster) baseName = fileInfo.baseName() path = fileInfo.filePath() # Chequea el base name y la ruta if (baseName and path): raster = QgsRasterLayer(path, baseName) # carga la capa raster if not raster.isValid(): print("Fallo al cargar la capa raster") return else: print("Ruta de la capa raster o nombre de la capa incorrectos") return return raster
def StringToRaster(raster,banda): fileInfo = QFileInfo(raster) path = fileInfo.filePath() baseName = fileInfo.baseName() global layerglobal layerglobal = QgsRasterLayer(path, baseName) QgsMapLayerRegistry.instance().addMapLayer(layerglobal) if layerglobal.isValid() is True: bandaref=str(banda)+'@1' # Define band1 banda = QgsRasterCalculatorEntry() banda.ref = bandaref banda.raster = layerglobal banda.bandNumber = 1 entries.append( banda ) else: print "Unable to read basename and file path - Your string is probably invalid" +str(baseName)
def StringToRaster(raster, banda): fileInfo = QFileInfo(raster) path = fileInfo.filePath() baseName = fileInfo.baseName() global layerglobal layerglobal = QgsRasterLayer(path, baseName) QgsMapLayerRegistry.instance().addMapLayer(layerglobal) if layerglobal.isValid() is True: bandaref = str(banda) + '@1' # Define band1 banda = QgsRasterCalculatorEntry() banda.ref = bandaref banda.raster = layerglobal banda.bandNumber = 1 entries.append(banda) else: print "Unable to read basename and file path - Your string is probably invalid" + str( baseName)
def on_open(self): '''打开现有配置''' fileName = QFileDialog.getOpenFileName( self, "选择现有模板", app.g_pwd + os.sep + "configurations", "Config (*.json)") if fileName.isEmpty(): return self.path = fileName with open(app.QString2str(fileName), 'r') as f: content = f.read() fileInfo = QFileInfo(fileName) if not fileInfo.exists(): return config = Configuration() config.fromJson(content) config.allone_dir = os.getenv('ALLONEDIR', '../..').replace('\\', '/') self.addConfig(fileInfo.baseName(), fileInfo.filePath(), content) self.on_select()
def openVectorFile(sFileName, sLayerName, iLayerEPSG, sLayerField): # Check layer in registry bMapLayer = checkMapLayer(sLayerName) # Upload or reload layer if bMapLayer is False: # Get layer information and data oFileInfo = QFileInfo(sFileName) oFilePath = oFileInfo.filePath() oFileBase = oFileInfo.baseName() # Define layer object oMapLayer = QgsVectorLayer(sFileName, sLayerName, "ogr") # Set layer crs oCrs = oMapLayer.crs() oCrs.createFromId(iLayerEPSG) oMapLayer.setCrs(oCrs) # Label point(s) oPoint = QgsPalLayerSettings() oPoint.readFromLayer(oMapLayer) oPoint.enabled = True oPoint.fieldName = sLayerField oPoint.placement = QgsPalLayerSettings.AroundPoint oPoint.textColor = QColor('yellow') oPoint.textTransp = 0 oPoint.setDataDefinedProperty(QgsPalLayerSettings.Size, True, True, '8', '') oPoint.writeToLayer(oMapLayer) # Redefine name (sometimes qgis upload shapefile including filename sLayerName_Shorted = str(oMapLayer.name().split()[0]) oMapLayer.setLayerName(sLayerName_Shorted) else: # Layer available in registry oMapLayer = getMapLayer(sLayerName) return oMapLayer, bMapLayer
def on_new(self): '''新建向导''' app.g_configurations = Configuration() # 用来渲染的配置数据 dlg = wizard.MyWizard() if dlg.exec_(): app.g_configurations.initialized = True app.g_projects.append(app.g_configurations) content = app.g_configurations.toJson() self.path = QFileDialog.getSaveFileName( self, "选择模板保存的路径", app.g_pwd + os.sep + "configurations" + os.sep + app.g_configurations.project_name.encode('utf-8') + ".json", "Config (*.json)") fileInfo = QFileInfo(self.path) if not self.path.isEmpty(): path = app.QString2str(self.path) with open(path, 'w+') as f: f.write(content) self.addConfig(fileInfo.baseName(), fileInfo.filePath(), content)
def testCase(self): TEST_DATA_DIR = unitTestDataPath() vectorFileInfo = QFileInfo( TEST_DATA_DIR + "/france_parts.shp") mVectorLayer = QgsVectorLayer( vectorFileInfo.filePath(), vectorFileInfo.completeBaseName(), "ogr" ) QgsMapLayerRegistry.instance().addMapLayers( [mVectorLayer] ) # create composition with composer map mMapRenderer = QgsMapRenderer() layerStringList = [] layerStringList.append( mVectorLayer.id() ) mMapRenderer.setLayerSet( layerStringList ) mMapRenderer.setProjectionsEnabled( False ) mComposition = QgsComposition( mMapRenderer ) mComposition.setPaperSize( 297, 210 ) mLabel = QgsComposerLabel( mComposition ) mComposition.addComposerLabel( mLabel ) self.evaluation_test( mComposition, mLabel ) self.feature_evaluation_test( mComposition, mLabel, mVectorLayer ) self.page_evaluation_test( mComposition, mLabel, mVectorLayer )
def testCase(self): self.TEST_DATA_DIR = unitTestDataPath() vectorFileInfo = QFileInfo( self.TEST_DATA_DIR + "/france_parts.shp") mVectorLayer = QgsVectorLayer( vectorFileInfo.filePath(), vectorFileInfo.completeBaseName(), "ogr" ) QgsMapLayerRegistry.instance().addMapLayers( [mVectorLayer] ) # create composition with composer map mMapRenderer = QgsMapRenderer() layerStringList = [] layerStringList.append( mVectorLayer.id() ) mMapRenderer.setLayerSet( layerStringList ) mMapRenderer.setProjectionsEnabled( True ) mMapRenderer.setMapUnits( QGis.Meters ) # select epsg:2154 crs = QgsCoordinateReferenceSystem() crs.createFromSrid( 2154 ) mMapRenderer.setDestinationCrs( crs ) self.mComposition = QgsComposition( mMapRenderer ) self.mComposition.setPaperSize( 297, 210 ) # fix the renderer, fill with green props = { "color": "0,127,0" } fillSymbol = QgsFillSymbolV2.createSimple( props ) renderer = QgsSingleSymbolRendererV2( fillSymbol ) mVectorLayer.setRendererV2( renderer ) # the atlas map self.mAtlasMap = QgsComposerMap( self.mComposition, 20, 20, 130, 130 ) self.mAtlasMap.setFrameEnabled( True ) self.mComposition.addComposerMap( self.mAtlasMap ) # the atlas self.mAtlas = self.mComposition.atlasComposition() self.mAtlas.setCoverageLayer( mVectorLayer ) self.mAtlas.setEnabled( True ) self.mComposition.setAtlasMode( QgsComposition.ExportAtlas ) # an overview mOverview = QgsComposerMap( self.mComposition, 180, 20, 50, 50 ) mOverview.setFrameEnabled( True ) mOverview.setOverviewFrameMap( self.mAtlasMap.id() ) self.mComposition.addComposerMap( mOverview ) nextent = QgsRectangle( 49670.718, 6415139.086, 699672.519, 7065140.887 ) mOverview.setNewExtent( nextent ) # set the fill symbol of the overview map props2 = { "color": "127,0,0,127" } fillSymbol2 = QgsFillSymbolV2.createSimple( props2 ) mOverview.setOverviewFrameMapSymbol( fillSymbol2 ) # header label self.mLabel1 = QgsComposerLabel( self.mComposition ) self.mComposition.addComposerLabel( self.mLabel1 ) self.mLabel1.setText( "[% \"NAME_1\" %] area" ) self.mLabel1.setFont( QgsFontUtils.getStandardTestFont() ) self.mLabel1.adjustSizeToText() self.mLabel1.setSceneRect( QRectF( 150, 5, 60, 15 ) ) qWarning( "header label font: %s exactMatch:%s" % ( self.mLabel1.font().toString(), self.mLabel1.font().exactMatch() ) ) # feature number label self.mLabel2 = QgsComposerLabel( self.mComposition ) self.mComposition.addComposerLabel( self.mLabel2 ) self.mLabel2.setText( "# [%$feature || ' / ' || $numfeatures%]" ) self.mLabel2.setFont( QgsFontUtils.getStandardTestFont() ) self.mLabel2.adjustSizeToText() self.mLabel2.setSceneRect( QRectF( 150, 200, 60, 15 ) ) qWarning( "feature number label font: %s exactMatch:%s" % ( self.mLabel2.font().toString(), self.mLabel2.font().exactMatch() ) ) self.filename_test() self.autoscale_render_test() self.autoscale_render_test_old_api() self.fixedscale_render_test() self.predefinedscales_render_test() self.hidden_render_test()
def CrossTab(raster1, raster2, vector1, diretorioOut, resolucao, campoID, weight111, weight112, weight121, weight122, weight199, weight299, weight399, weight499599): fileInfo1 = QFileInfo(raster1) path1 = fileInfo1.filePath() baseName1 = fileInfo1.baseName() layer1 = QgsRasterLayer(path1, baseName1) QgsMapLayerRegistry.instance().addMapLayer(layer1) if layer1.isValid() is True: print "Layer1 was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" provider1 = layer1.dataProvider() extent1 = provider1.extent() rows1 = layer1.height() cols1 = layer1.width() block1 = provider1.block(1, extent1, cols1, rows1) fileInfo2 = QFileInfo(raster2) path2 = fileInfo2.filePath() baseName2 = fileInfo2.baseName() layer2 = QgsRasterLayer(path2, baseName2) QgsMapLayerRegistry.instance().addMapLayer(layer2) if layer2.isValid() is True: print "Layer2 was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" provider2 = layer2.dataProvider() extent2 = provider2.extent() rows2 = layer2.height() cols2 = layer2.width() block2 = provider2.block(1, extent2, cols2, rows2) fileInfo3 = QFileInfo(vector1) path3 = fileInfo3.filePath() baseName3 = fileInfo3.baseName() layer3 = QgsVectorLayer("%s" % (vector1), "vector1", "ogr") QgsMapLayerRegistry.instance().addMapLayer(layer3) feats_count = layer3.featureCount() if layer3.isValid() is True: print "Layer3 was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" valoresBGRI = [] valoresBGRIunicos = [] # lista de valores BGRI unicos for feature in layer3.getFeatures(): objectid = feature.attributes()[layer3.fieldNameIndex(campoID)] valoresBGRI.append(objectid) for v in valoresBGRI: if v not in valoresBGRIunicos: valoresBGRIunicos.append(v) a = len(valoresBGRIunicos) print a feats_count = layer3.featureCount() print feats_count valoresCLCunicos = [111, 112, 121, 122, 199, 299, 399, 499, 599] b = len(valoresCLCunicos) print b crossTabMatrix = [[0 for y in range(b + 1)] for x in range(a + 1)] for y in range(b): crossTabMatrix[0][y + 1] = valoresCLCunicos[y] for x in range(a): crossTabMatrix[x + 1][0] = valoresBGRIunicos[x] #print crossTabMatrix #crosstab for i in range(rows1): for j in range(cols1): cell_value1 = int(block1.value(i, j)) cell_value2 = int(block2.value(i, j)) for y in range(b): for x in range(a): if cell_value1 == crossTabMatrix[ x + 1][0] and cell_value2 == crossTabMatrix[0][y + 1]: crossTabMatrix[x + 1][y + 1] += 1 #print crossTabMatrix #exportar a tabulacao para csv csvfile = diretorioOut + r"\crosstab.csv" print csvfile with open(csvfile, "w") as output: writer = csv.writer(output, lineterminator='\n') writer.writerows(crossTabMatrix) # Adicionar campos para calculo (Campo1, Campo 2) shp_uri = vector1 shp = QgsVectorLayer(shp_uri, 'bgri', 'ogr') caps = shp.dataProvider().capabilities() if caps & QgsVectorDataProvider.AddAttributes: res = shp.dataProvider().addAttributes([ QgsField("E", QVariant.Double), QgsField("TOTAL", QVariant.Double) ]) #if caps & QgsVectorDataProvider.DeleteAttributes: # res = shp.dataProvider().deleteAttributes([0]) shp.updateFields() QgsMapLayerRegistry.instance().addMapLayer(shp) # Get input (csv) and target (Shapefile) layers csv_uri = 'file:///' + diretorioOut + r'/crosstab.csv?delimiter=,' print csv_uri csvlayer = QgsVectorLayer(csv_uri, "crosstab", "delimitedtext") QgsMapLayerRegistry.instance().addMapLayer(csvlayer) # Set properties for the join shpField = campoID csvField = '0_1' joinObject = QgsVectorJoinInfo() joinObject.joinLayerId = csvlayer.id() joinObject.joinFieldName = csvField joinObject.targetFieldName = shpField joinObject.memoryCache = True shp.addJoin(joinObject) # Calcular pesos, TOTAL e E # Update do campo TOTAL no shapefile resolucao2 = int(resolucao) * int(resolucao) expressionT = QgsExpression( "(crosstab_111_1+crosstab_112_1+crosstab_121_1+crosstab_122_1+crosstab_199_1+crosstab_299_1+crosstab_399_1+crosstab_499_1+crosstab_599_1)*{}" .format(resolucao2)) indexT = shp.fieldNameIndex("TOTAL") expressionT.prepare(shp.pendingFields()) shp.startEditing() for feature in shp.getFeatures(): valueT = expressionT.evaluate(feature) shp.changeAttributeValue(feature.id(), indexT, valueT) shp.commitChanges() # Update do campo E no shapefile expressionE = QgsExpression( "((crosstab_111_1*{})/TOTAL)*{}+((crosstab_112_1*{})/TOTAL)*{}+((crosstab_121_1*{})/TOTAL)*{}+((crosstab_122_1*{})/TOTAL)*{}+((crosstab_199_1*{})/TOTAL)*{}+((crosstab_299_1*{})/TOTAL)*{}+((crosstab_399_1*{})/TOTAL)*{}" .format(resolucao2, weight111, resolucao2, weight112, resolucao2, weight121, resolucao2, weight122, resolucao2, weight199, resolucao2, weight299, resolucao2, weight399)) indexE = shp.fieldNameIndex("E") expressionE.prepare(shp.pendingFields()) shp.startEditing() for feature in shp.getFeatures(): valueE = expressionE.evaluate(feature) shp.changeAttributeValue(feature.id(), indexE, valueE) shp.commitChanges()
def DasimetricCalculator(diretorioOut, resolucao): try: raster1 = diretorioOut + r"\pop.asc" popLayer = QgsRasterLayer(raster1, "pop") raster2 = diretorioOut + r"\rdensity.asc" rdensityLayer = QgsRasterLayer(raster2, "rdensity") raster3 = diretorioOut + r"\outputE.asc" eLayer = QgsRasterLayer(raster3, "e") raster4 = diretorioOut + r"\outputT.asc" tLayer = QgsRasterLayer(raster4, "t") entries = [] pop = QgsRasterCalculatorEntry() pop.ref = 'pop@1' pop.raster = popLayer pop.bandNumber = 1 entries.append(pop) rdensity = QgsRasterCalculatorEntry() rdensity.ref = 'rdensity@1' rdensity.raster = rdensityLayer rdensity.bandNumber = 1 entries.append(rdensity) e = QgsRasterCalculatorEntry() e.ref = 'e@1' e.raster = eLayer e.bandNumber = 1 entries.append(e) t = QgsRasterCalculatorEntry() t.ref = 't@1' t.raster = tLayer t.bandNumber = 1 entries.append(t) resultado = diretorioOut + r"\dasimetric.tif" resolucao2 = int(resolucao) * int(resolucao) expression = '(pop@1 * rdensity@1 *{})/(e@1 * t@1)'.format(resolucao2) print expression calc = QgsRasterCalculator(expression, resultado, 'GTiff', popLayer.extent(), popLayer.width(), popLayer.height(), entries) calc.processCalculation() fileInfo5 = QFileInfo(resultado) path5 = fileInfo5.filePath() baseName5 = fileInfo5.baseName() layer5 = QgsRasterLayer(path5, baseName5) QgsMapLayerRegistry.instance().addMapLayer(layer5) if layer5.isValid() is True: print "Dasimetric result was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" except CalculationError: print "Dasimetric calculation error!" finally: print "Dasimetric calculation was successfully!"
def StringToRaster(raster): # Check if string is provided fileInfo = QFileInfo(raster) path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) #QgsMapLayerRegistry.instance().addMapLayer(layer) entries = [] # Define band1 boh1 = QgsRasterCalculatorEntry() boh1.ref = 'ndvi20160607sentinel@5' boh1.raster = layer boh1.bandNumber = 5 entries.append(boh1) # Process calculation with input extent and resolution calc = QgsRasterCalculator( '(ndvi20160607sentinel@5) * 166.67 + 111.67', 'C:/Hackathon Farmhack data/Output/outputfile.tif', 'GTiff', layer.extent(), layer.width(), layer.height(), entries) calc.processCalculation() fileInfo = QFileInfo('C:/Hackathon Farmhack data/Output/outputfile.tif') path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) #QgsMapLayerRegistry.instance().addMapLayer(layer) if layer.isValid() is True: print "Layer was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" shape = QgsVectorLayer( 'C:/Hackathon Farmhack data/perceel-hier-rdnew.geojson', 'perceel', 'ogr') #QgsMapLayerRegistry.instance().addMapLayer(shape) xmin = (shape.extent().xMinimum() ) #extract the minimum x coord from our layer xmax = (shape.extent().xMaximum() ) #extract our maximum x coord from our layer ymin = (shape.extent().yMinimum() ) #extract our minimum y coord from our layer ymax = (shape.extent().yMaximum() ) #extract our maximum y coord from our layer #prepare the extent in a format the VectorGrid tool can interpret (xmin,xmax,ymin,ymax) extent = str(xmin) + ',' + str(xmax) + ',' + str(ymin) + ',' + str(ymax) # raster the given shape processing.runalg( 'qgis:vectorgrid', extent, 20, 20, 0, 'C:/Hackathon Farmhack data/Output/rasterShapes.geojson') shapeRaster = QgsVectorLayer( 'C:/Hackathon Farmhack data/Output/rasterShapes.geojson', 'perceelRaster', 'ogr') shapeRaster.setCrs( QgsCoordinateReferenceSystem(28992, QgsCoordinateReferenceSystem.EpsgCrsId)) #QgsMapLayerRegistry.instance().addMapLayer(shapeRaster) #clip the raster returned processing.runalg('qgis:clip', shapeRaster, shape, 'C:/Hackathon Farmhack data/Output/clippedRaster.shp') #define oldPath and newPath ogr2ogr.main([ "", "-f", "ESRI Shapefile", "-s_srs", "epsg:28992", "-t_srs", "epsg:32632", "C:/Hackathon Farmhack data/Output/clippedRasterNew.shp", "C:/Hackathon Farmhack data/Output/clippedRaster.shp" ]) clippedRaster = QgsVectorLayer( 'C:/Hackathon Farmhack data/Output/clippedRasterNew.shp', 'clippedRaster', 'ogr') clippedRaster.setCrs( QgsCoordinateReferenceSystem(32632, QgsCoordinateReferenceSystem.EpsgCrsId)) #QgsMapLayerRegistry.instance().addMapLayer(clippedRaster) #zonalstatistics processing.runalg( 'qgis:zonalstatistics', layer, 1, clippedRaster, '', False, 'C:/Hackathon Farmhack data/Output/filledRaster.geojson') filledRaster = QgsVectorLayer( 'C:/Hackathon Farmhack data/Output/filledRaster.geojson', 'filledRaster', 'ogr') filledRaster.setCrs( QgsCoordinateReferenceSystem(32632, QgsCoordinateReferenceSystem.EpsgCrsId)) #QgsMapLayerRegistry.instance().addMapLayer(filledRaster) ogr2ogr.main([ "", "-f", "GeoJSON", "-s_srs", "epsg:32632", "-t_srs", "epsg:4326", "C:/Hackathon Farmhack data/Output/taakkaart.geojson", "C:/Hackathon Farmhack data/Output/filledRaster.geojson" ]) taakkaart = QgsVectorLayer( 'C:/Hackathon Farmhack data/Output/taakkaart.geojson', 'taakkaart', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(taakkaart)
def create_table(self, table_path): fileInfo = QFileInfo(table_path) baseName = fileInfo.baseName() path = fileInfo.filePath()
def CalcHUM(vector1, vector2, diretorioOut, resolucao, campoPopulation, campoHousing): #Set GRASS extent fileInfo1 = QFileInfo(vector1) path1 = fileInfo1.filePath() baseName1 = fileInfo1.baseName() layer1 = QgsVectorLayer(vector1, "bgri", "ogr") if layer1.isValid() is True: print "Layer1 was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" ext = layer1.extent() (xmin, xmax, ymin, ymax) = (ext.xMinimum(), ext.xMaximum(), ext.yMinimum(), ext.yMaximum()) grassExtent = str(xmin) + "," + str(xmax) + "," + str(ymin) + "," + str( ymax) print grassExtent fileInfo2 = QFileInfo(vector2) path2 = fileInfo2.filePath() baseName2 = fileInfo2.baseName() layer2 = QgsVectorLayer(vector2, "addresses", "ogr") if layer2.isValid() is True: print "Layer2 was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" # Adicionar campos para calculo (Campo1, Campo 2) #shp_uri = vector1 #shp = QgsVectorLayer(shp_uri, 'bgri', 'ogr') #print shp caps = layer1.dataProvider().capabilities() if caps & QgsVectorDataProvider.AddAttributes: res = layer1.dataProvider().addAttributes( [QgsField("INDIVALOJ", QVariant.Double)]) layer1.updateFields() layer1.commitChanges() layer1.dataProvider().forceReload() # Update do campo INDALOJ no shapefile expressionA = QgsExpression("N_INDIVIDU/N_ALOJAMEN") indexA = layer1.fieldNameIndex("INDIVALOJ") expressionA.prepare(layer1.pendingFields()) layer1.startEditing() for feature in layer1.getFeatures(): valueA = expressionA.evaluate(feature) layer1.changeAttributeValue(feature.id(), indexA, valueA) layer1.commitChanges() layer1.dataProvider().forceReload() print 'Updated!' QgsMapLayerRegistry.instance().reloadAllLayers() #Processing HUM to vector grid resultado1 = diretorioOut + r"\addresses_join_stats.shp" processing.runalg("qgis:joinattributesbylocation", vector2, vector1, ['intersects'], 0, 0, "sum", 0, resultado1) resultado2 = diretorioOut + r"\grelha.shp" processing.runalg("qgis:vectorgrid", grassExtent, resolucao, resolucao, 0, resultado2) resultado3 = diretorioOut + r"\resultado.shp" processing.runalg("qgis:joinattributesbylocation", resultado2, resultado1, ['intersects'], 0, 1, "sum", 1, resultado3) print 'Processed!'
def StringToRaster(raster): # Check if string is provided fileInfo = QFileInfo(raster) path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) #QgsMapLayerRegistry.instance().addMapLayer(layer) entries = [] # Define band1 boh1 = QgsRasterCalculatorEntry() boh1.ref = 'ndvi20160607sentinel@5' boh1.raster = layer boh1.bandNumber = 5 entries.append( boh1 ) # Process calculation with input extent and resolution calc = QgsRasterCalculator( '(ndvi20160607sentinel@5) * 166.67 + 111.67', 'C:/Hackathon Farmhack data/Output/outputfile.tif', 'GTiff', layer.extent(), layer.width(), layer.height(), entries ) calc.processCalculation() fileInfo = QFileInfo('C:/Hackathon Farmhack data/Output/outputfile.tif') path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) #QgsMapLayerRegistry.instance().addMapLayer(layer) if layer.isValid() is True: print "Layer was loaded successfully!" else: print "Unable to read basename and file path - Your string is probably invalid" shape = QgsVectorLayer('C:/Hackathon Farmhack data/perceel-hier-rdnew.geojson', 'perceel', 'ogr') #QgsMapLayerRegistry.instance().addMapLayer(shape) xmin = (shape.extent().xMinimum()) #extract the minimum x coord from our layer xmax = (shape.extent().xMaximum()) #extract our maximum x coord from our layer ymin = (shape.extent().yMinimum()) #extract our minimum y coord from our layer ymax = (shape.extent().yMaximum()) #extract our maximum y coord from our layer #prepare the extent in a format the VectorGrid tool can interpret (xmin,xmax,ymin,ymax) extent = str(xmin)+ ',' + str(xmax)+ ',' +str(ymin)+ ',' +str(ymax) # raster the given shape processing.runalg('qgis:vectorgrid', extent, 20, 20, 0, 'C:/Hackathon Farmhack data/Output/rasterShapes.geojson') shapeRaster = QgsVectorLayer('C:/Hackathon Farmhack data/Output/rasterShapes.geojson', 'perceelRaster', 'ogr') shapeRaster.setCrs(QgsCoordinateReferenceSystem(28992, QgsCoordinateReferenceSystem.EpsgCrsId)) #QgsMapLayerRegistry.instance().addMapLayer(shapeRaster) #clip the raster returned processing.runalg('qgis:clip', shapeRaster, shape, 'C:/Hackathon Farmhack data/Output/clippedRaster.shp') #define oldPath and newPath ogr2ogr.main(["","-f", "ESRI Shapefile", "-s_srs", "epsg:28992", "-t_srs", "epsg:32632", "C:/Hackathon Farmhack data/Output/clippedRasterNew.shp", "C:/Hackathon Farmhack data/Output/clippedRaster.shp"]) clippedRaster = QgsVectorLayer('C:/Hackathon Farmhack data/Output/clippedRasterNew.shp', 'clippedRaster', 'ogr') clippedRaster.setCrs(QgsCoordinateReferenceSystem(32632, QgsCoordinateReferenceSystem.EpsgCrsId)) #QgsMapLayerRegistry.instance().addMapLayer(clippedRaster) #zonalstatistics processing.runalg('qgis:zonalstatistics', layer, 1, clippedRaster, '', False, 'C:/Hackathon Farmhack data/Output/filledRaster.geojson') filledRaster = QgsVectorLayer('C:/Hackathon Farmhack data/Output/filledRaster.geojson', 'filledRaster', 'ogr') filledRaster.setCrs(QgsCoordinateReferenceSystem(32632, QgsCoordinateReferenceSystem.EpsgCrsId)) #QgsMapLayerRegistry.instance().addMapLayer(filledRaster) ogr2ogr.main(["","-f", "GeoJSON", "-s_srs", "epsg:32632", "-t_srs", "epsg:4326", "C:/Hackathon Farmhack data/Output/taakkaart.geojson", "C:/Hackathon Farmhack data/Output/filledRaster.geojson"]) taakkaart = QgsVectorLayer('C:/Hackathon Farmhack data/Output/taakkaart.geojson', 'taakkaart', 'ogr') QgsMapLayerRegistry.instance().addMapLayer(taakkaart)
def testCase(self): self.TEST_DATA_DIR = unitTestDataPath() tmppath = tempfile.mkdtemp() for file in glob.glob( os.path.join(self.TEST_DATA_DIR, 'france_parts.*')): shutil.copy(os.path.join(self.TEST_DATA_DIR, file), tmppath) vectorFileInfo = QFileInfo(tmppath + "/france_parts.shp") mVectorLayer = QgsVectorLayer(vectorFileInfo.filePath(), vectorFileInfo.completeBaseName(), "ogr") QgsMapLayerRegistry.instance().addMapLayers([mVectorLayer]) # create composition with composer map mMapRenderer = QgsMapRenderer() layerStringList = [] layerStringList.append(mVectorLayer.id()) mMapRenderer.setLayerSet(layerStringList) mMapRenderer.setProjectionsEnabled(True) mMapRenderer.setMapUnits(QGis.Meters) # select epsg:2154 crs = QgsCoordinateReferenceSystem() crs.createFromSrid(2154) mMapRenderer.setDestinationCrs(crs) self.mComposition = QgsComposition(mMapRenderer) self.mComposition.setPaperSize(297, 210) # fix the renderer, fill with green props = {"color": "0,127,0"} fillSymbol = QgsFillSymbolV2.createSimple(props) renderer = QgsSingleSymbolRendererV2(fillSymbol) mVectorLayer.setRendererV2(renderer) # the atlas map self.mAtlasMap = QgsComposerMap(self.mComposition, 20, 20, 130, 130) self.mAtlasMap.setFrameEnabled(True) self.mComposition.addComposerMap(self.mAtlasMap) # the atlas self.mAtlas = self.mComposition.atlasComposition() self.mAtlas.setCoverageLayer(mVectorLayer) self.mAtlas.setEnabled(True) self.mComposition.setAtlasMode(QgsComposition.ExportAtlas) # an overview mOverview = QgsComposerMap(self.mComposition, 180, 20, 50, 50) mOverview.setFrameEnabled(True) mOverview.setOverviewFrameMap(self.mAtlasMap.id()) self.mComposition.addComposerMap(mOverview) nextent = QgsRectangle(49670.718, 6415139.086, 699672.519, 7065140.887) mOverview.setNewExtent(nextent) # set the fill symbol of the overview map props2 = {"color": "127,0,0,127"} fillSymbol2 = QgsFillSymbolV2.createSimple(props2) mOverview.setOverviewFrameMapSymbol(fillSymbol2) # header label self.mLabel1 = QgsComposerLabel(self.mComposition) self.mComposition.addComposerLabel(self.mLabel1) self.mLabel1.setText("[% \"NAME_1\" %] area") self.mLabel1.setFont(QgsFontUtils.getStandardTestFont()) self.mLabel1.adjustSizeToText() self.mLabel1.setSceneRect(QRectF(150, 5, 60, 15)) qWarning( "header label font: %s exactMatch:%s" % (self.mLabel1.font().toString(), self.mLabel1.font().exactMatch())) # feature number label self.mLabel2 = QgsComposerLabel(self.mComposition) self.mComposition.addComposerLabel(self.mLabel2) self.mLabel2.setText("# [%$feature || ' / ' || $numfeatures%]") self.mLabel2.setFont(QgsFontUtils.getStandardTestFont()) self.mLabel2.adjustSizeToText() self.mLabel2.setSceneRect(QRectF(150, 200, 60, 15)) qWarning( "feature number label font: %s exactMatch:%s" % (self.mLabel2.font().toString(), self.mLabel2.font().exactMatch())) self.filename_test() self.autoscale_render_test() self.autoscale_render_test_old_api() self.fixedscale_render_test() self.predefinedscales_render_test() self.hidden_render_test() shutil.rmtree(tmppath, True)
def mapa_final_no_compensatorio(n_variables, pesos, raster_inputs, raster_salida): ecuacion = '(' for a, b in zip(range(n_variables), pesos): if a < n_variables - 1: ecuacion += ("(" + str(b) + "^10) * " + "'(1 - (layer" + str(a + 1) + "@1 ^10))'" + ' + ') else: ecuacion += ("(" + str(b) + "^10) * " + "'(1 - (layer" + str(a + 1) + "@1 ^10))'") ecuacion += ' ) ^ 1/10' entries = [] #abre el archivo raster1 fileInfo = QFileInfo(raster_inputs[0]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer1 = QgsRasterLayer(path, baseName) var1 = QgsRasterCalculatorEntry() var1.ref = 'layer1@1' var1.raster = layer1 var1.bandNumber = 1 entries.append(var1) if n_variables == 2: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) elif n_variables == 3: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) fileInfo = QFileInfo(raster_inputs[2]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer3 = QgsRasterLayer(path, baseName) var3 = QgsRasterCalculatorEntry() var3.ref = 'layer3@1' var3.raster = layer3 var3.bandNumber = 1 entries.append(var3) elif n_variables == 4: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) fileInfo = QFileInfo(raster_inputs[2]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer3 = QgsRasterLayer(path, baseName) var3 = QgsRasterCalculatorEntry() var3.ref = 'layer3@1' var3.raster = layer3 var3.bandNumber = 1 entries.append(var3) fileInfo = QFileInfo(raster_inputs[3]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer4 = QgsRasterLayer(path, baseName) var4 = QgsRasterCalculatorEntry() var4.ref = 'layer4@1' var4.raster = layer4 var4.bandNumber = 1 entries.append(var4) elif n_variables == 5: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) fileInfo = QFileInfo(raster_inputs[2]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer3 = QgsRasterLayer(path, baseName) var3 = QgsRasterCalculatorEntry() var3.ref = 'layer3@1' var3.raster = layer3 var3.bandNumber = 1 entries.append(var3) fileInfo = QFileInfo(raster_inputs[3]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer4 = QgsRasterLayer(path, baseName) var4 = QgsRasterCalculatorEntry() var4.ref = 'layer4@1' var4.raster = layer4 var4.bandNumber = 1 entries.append(var4) fileInfo = QFileInfo(raster_inputs[4]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer5 = QgsRasterLayer(path, baseName) var5 = QgsRasterCalculatorEntry() var5.ref = 'layer5@1' var5.raster = layer5 var5.bandNumber = 1 entries.append(var5) calc = QgsRasterCalculator(ecuacion, raster_salida, 'GTiff', layer1.extent(), layer1.width(), layer1.height(), entries) calc.processCalculation()
def raster_calc_qgis(ecuacion, raster_inputs, raster_salida): n_variables = len(raster_inputs) entries = [] #abre el archivo raster1 fileInfo = QFileInfo(raster_inputs[0]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer1 = QgsRasterLayer(path, baseName) var1 = QgsRasterCalculatorEntry() var1.ref = 'layer1@1' var1.raster = layer1 var1.bandNumber = 1 entries.append(var1) if n_variables == 2: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) elif n_variables == 3: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) fileInfo = QFileInfo(raster_inputs[2]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer3 = QgsRasterLayer(path, baseName) var3 = QgsRasterCalculatorEntry() var3.ref = 'layer3@1' var3.raster = layer3 var3.bandNumber = 1 entries.append(var3) elif n_variables == 4: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) fileInfo = QFileInfo(raster_inputs[2]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer3 = QgsRasterLayer(path, baseName) var3 = QgsRasterCalculatorEntry() var3.ref = 'layer3@1' var3.raster = layer3 var3.bandNumber = 1 entries.append(var3) fileInfo = QFileInfo(raster_inputs[3]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer4 = QgsRasterLayer(path, baseName) var4 = QgsRasterCalculatorEntry() var4.ref = 'layer4@1' var4.raster = layer4 var4.bandNumber = 1 entries.append(var4) elif n_variables == 5: fileInfo = QFileInfo(raster_inputs[1]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer2 = QgsRasterLayer(path, baseName) var2 = QgsRasterCalculatorEntry() var2.ref = 'layer2@1' var2.raster = layer2 var2.bandNumber = 1 entries.append(var2) fileInfo = QFileInfo(raster_inputs[2]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer3 = QgsRasterLayer(path, baseName) var3 = QgsRasterCalculatorEntry() var3.ref = 'layer3@1' var3.raster = layer3 var3.bandNumber = 1 entries.append(var3) fileInfo = QFileInfo(raster_inputs[3]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer4 = QgsRasterLayer(path, baseName) var4 = QgsRasterCalculatorEntry() var4.ref = 'layer4@1' var4.raster = layer4 var4.bandNumber = 1 entries.append(var4) fileInfo = QFileInfo(raster_inputs[4]) path = fileInfo.filePath() baseName = fileInfo.baseName() layer5 = QgsRasterLayer(path, baseName) var5 = QgsRasterCalculatorEntry() var5.ref = 'layer5@1' var5.raster = layer5 var5.bandNumber = 1 entries.append(var5) calc = QgsRasterCalculator(ecuacion, raster_salida, 'GTiff', layer1.extent(), layer1.width(), layer1.height(), entries) calc.processCalculation()
from qgis.core import QgsMapLayerRegistry, QgsRasterLayer from qgis.analysis import QgsRasterCalculatorEntry, QgsRasterCalculator from PyQt4.QtCore import QFileInfo # Split rasters layers = Raster.split(';') output_path = OUT + "/" suffix = "_suffix.tif" for ras in layers: # Get layer object lyr = processing.getObjectFromUri(ras) entries = [] ras = QgsRasterCalculatorEntry() ras.ref = 'lyr@1' ras.raster = lyr ras.bandNumber = 1 entries.append(ras) calc = QgsRasterCalculator('(lyr@1 / lyr@1) * lyr@1', output_path + lyr.name() + suffix, 'GTiff', lyr.extent(), lyr.width(), lyr.height(), entries) calc.processCalculation() for results in glob.glob(output_path + "*" + suffix): fileInfo = QFileInfo(results) path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) QgsMapLayerRegistry.instance().addMapLayer(layer)
def interpolatePoints(self): if self.datafolder is None: return outfolder = self.datafolder + '/Surface' # Interpolate each layer by using TIN interpolation nlayers = int(self.dlg.lineEdit_22.text()) xblock = int(self.dlg.lineEdit_13.text()) yblock = int(self.dlg.lineEdit_14.text()) kzthresh = int(self.dlg.lineEdit_16.text()) kvthresh = int(self.dlg.lineEdit_15.text()) res = int(self.dlg.lineEdit_17.text()) smooth = int(self.dlg.lineEdit_18.text()) for k in xrange(1, nlayers + 1): ptfile = outfolder + '/surface-%s.txt' % k outfile = outfolder + '/surface-%s_flt.txt' % k if not os.path.isfile(outfile): filterPoints(ptfile, outfile, xblock, yblock, kvthresh, kzthresh) ptfile = outfile outfile = outfolder + '/surface-%s_flt.tif' % k if not os.path.isfile(outfile): interpolatePoints(ptfile, outfile, res, smooth) 1 # find out which is the top surface layer mdtm = np.zeros(nlayers) for k in xrange(1, nlayers + 1): tiffile = outfolder + '/surface-%s_flt.tif' % k ds = gdal.Open(tiffile, gdal.GA_ReadOnly) data = ds.GetRasterBand(1).ReadAsArray() maskeddata = np.ma.masked_invalid(data) mdtm[k - 1] = maskeddata.mean() surfidx = np.argmax(mdtm) + 1 tiffile = outfolder + '/surface-%s_flt.tif' % surfidx ds1 = gdal.Open(tiffile, gdal.GA_ReadOnly) data1 = ds1.GetRasterBand(1).ReadAsArray() for k in xrange(1, nlayers + 1): if k != surfidx: tiffile = outfolder + '/surface-%s_flt.tif' % k ds2 = gdal.Open(tiffile, gdal.GA_ReadOnly) data2 = ds2.GetRasterBand(1).ReadAsArray() driver = gdal.GetDriverByName('GTiff') outfile = outfolder + '/surface-%s_flt_depth.tif' % k dsOut = driver.Create(outfile, ds1.RasterXSize, ds1.RasterYSize, 1, gdal.GDT_Float32) gdalnumeric.CopyDatasetInfo(ds1, dsOut) dsOut.GetRasterBand(1).WriteArray( (data1 - data2) / np.sqrt(3.14)) dsOut.GetRasterBand(1).SetNoDataValue(-32768) dsOut = None ds1 = None for k in xrange(1, nlayers + 1): print k if k == surfidx: outfile = outfolder + '/surface-%s_flt.tif' % surfidx else: outfile = outfolder + '/surface-%s_flt_depth.tif' % k plotGeotiff(outfile) ### Load print outfile fileInfo = QFileInfo(outfile) path = fileInfo.filePath() baseName = fileInfo.baseName() layer = QgsRasterLayer(path, baseName) if layer.isValid() is True: QgsMapLayerRegistry.instance().addMapLayer(layer)