コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
    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)
コード例 #4
0
ファイル: alkisImport.py プロジェクト: ruhri/alkisimport
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
コード例 #5
0
    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)
コード例 #6
0
def setLastUsedDir(filePath):
    settings = QSettings()
    fileInfo = QFileInfo(filePath)
    if fileInfo.isDir():
      dirPath = fileInfo.filePath()
    else:
      dirPath = fileInfo.path()
    settings.setValue( "/GdalTools/lastUsedDir", dirPath )
コード例 #7
0
ファイル: main.py プロジェクト: filin86/prncreator
 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()
コード例 #8
0
ファイル: main.py プロジェクト: filin86/prncreator
 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()
コード例 #9
0
ファイル: mainwindow.py プロジェクト: JordanBallew/sunpy
 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())
コード例 #10
0
    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()
コード例 #11
0
    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
コード例 #12
0
ファイル: layers.py プロジェクト: chenlong2019/python
 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
コード例 #13
0
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
コード例 #14
0
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"
コード例 #15
0
 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())
コード例 #16
0
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
コード例 #17
0
ファイル: SilviLiDAR.py プロジェクト: gioman/QGIS-Processing
 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)
コード例 #18
0
ファイル: SilviLiDAR.py プロジェクト: silvilidar/SilviLiDAR
 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)
コード例 #19
0
    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()
コード例 #20
0
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
コード例 #21
0
 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)
コード例 #22
0
    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 )
コード例 #23
0
    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()
コード例 #24
0
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()
コード例 #25
0
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!"
コード例 #26
0
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)
コード例 #27
0
ファイル: layers.py プロジェクト: chenlong2019/python
 def create_table(self, table_path):
     fileInfo = QFileInfo(table_path)
     baseName = fileInfo.baseName()
     path = fileInfo.filePath()
コード例 #28
0
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!'
コード例 #29
0
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)    
コード例 #30
0
    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)
コード例 #31
0
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()
コード例 #32
0
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()
コード例 #33
0
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)
コード例 #34
0
    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)