2014-11-05 63 views
1

雖然在這個問題上有一些帖子,但其中任何一個都沒有答案。這就是爲什麼我再問一次。如何使用PyQGIS加載柵格圖層?

一後我發現了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」,「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。它在獨立腳本中不起作用。

回答

0

這是爲我工作爲單頻帶image.I現在用蟒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