如何使用PyQGIS加载栅格图层?

时间:2014-11-05 00:56:31

标签: pyqt4 qgis

虽然在这个问题上有一些帖子,但其中任何一个都没有答案。这就是为什么我再问它。

我发现的一个帖子是https://gis.stackexchange.com/questions/68032/raster-layer-invalid

我从以下链接阅读信息:https://hub.qgis.org/wiki/17/Arcgis_rest。

我使用了命令:gdal_translate" http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer?f = json& pretty = true" s.xml -of WMS。它成功生成了文件。但是,当我尝试打开文件并假设提供程序是wms时,代码报告层无效。

我使用的代码是:

    file = QFileDialog.getOpenFileName(self, 
               "Open WMS", ".", "WMS (*.xml)")
    fileInfo = QFileInfo(file)
    # Add the layer
    layer = QgsRasterLayer(file, fileInfo.fileName(),"wms")

    if not layer.isValid():
        print "Failed to load."
        return

我只是从对话框中选择文件。

我还尝试了另一个命令:qgis.utils.iface.addRasterLayer(" http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer?f = json& pretty = true&# 34;," raster")使用以下代码:

    layer = QgsRasterLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer?f=json&pretty=true", "layer")

    if not layer.isValid():
        print "Failed to load."
        return

它还报告"无法加载"。原始命令可以在QGIS python命令行中成功运行。此外,如果我尝试在python控制台中输入代码,则layer.isValid()将返回true。它只是在独立脚本中工作。

2 个答案:

答案 0 :(得分:0)

答案可以在这里找到:https://gis.stackexchange.com/questions/120823/how-to-load-a-wms-layer-using-pyqgis

基本上,它只是一个版本问题。如果你有比v2.6更早的qgis,它将无法正常工作。但它固定为2.6

如果它仍然不适合你,你很可能对环境变量设置有问题。

答案 1 :(得分:0)

这对我的单波段图像很有用。我使用的是python 2.7和QGIS 2.0.1。你可以使用它加载任何像wms,tiff(单波段或多波段)等光栅层。:

def ifile(self):
        global fileName
        fileName = str(QtGui.QFileDialog.getOpenFileName(self.iface.mainWindow(),"Open Raster File",'C:\\',"raster files(*.tif *.tiff *.TIF *.TIFF *.IMG *.img )"))
        if len(fileName) is 0:
            return
        else:
            self.inFileName = fileName;
        filelayer = QgsRasterLayer(fileName,os.path.basename(fileName))
        if filelayer == None or filelayer.bandCount() != 1:
            self.errorMessage = "Not a DEM Image"
            QMessageBox.information(self.iface.mainWindow(), "Error", self.errorMessage)
        else:
            #f=open(str(self.inFileName))
            self.dlg.lineEdit.setText(self.inFileName)
            if filelayer.isValid():
                QgsMapLayerRegistry.instance().addMapLayer(filelayer)
        pass