Я хочу отобразить векторный файл (. shp ) и растровый файл ( .gr2 (GRIB-2) ) как один и сохранить их как изображение, используя python.
Мой файл .shp имеет координаты EPSG по умолчанию: 4326
мой растровый файл имеет пользовательскую координату, и я не могу сохранить эти два слоя как одно изображение.
Я новичок в использовании QGIS и Python. Большое вам спасибо
Вот мой текущий код:
from qgis.core import *
from qgis.gui import *
from qgis import core
from qgis.utils import iface
from PyQt4.QtCore import *
from PyQt4.QtGui import *
#supply path of qgis install location
QgsApplication.setPrefixPath("/usr/bin/qgis", True)
#this argument disables the GUI
qgs = QgsApplication([], False)
#load the providers
qgs.initQgis()
#Loading of post-wrf(raster) files starts here
rLayer = QgsRasterLayer("/home/francis/QGIS/tiffout/test.tif", "")
def enableUseofProjectCrs(rLayer):
rLayer.s = QSettings()
rLayer.oldValidation = rLayer.s.value("/Projection/defaultBehaviour").toString()
rLayer.s.setValue( "/Projection/defaultBehaviour", "useProject" )
if rLayer.isValid() is True:
print("Layer {} loaded successfully".format(rLayer.name()))
else:
print("Layer {} did not load successfully".format(rLayer.name()))
QgsMapLayerRegistry.instance().addMapLayers([rLayer])
#Loading of Shp file (vector) starts here
vLayer = QgsVectorLayer("/home/francis/QGIS/shpfile/PHL_adm1.shp", "Map", "ogr")
def enableUseofGlobalCrs(vLayer):
vLayer.s = QSettings()
vLayer.oldValidation = vLayer.s.value("/Projection/defaultBehaviour").toString()
vLayer.s.setValue( "/Projection/defaultBehaviour", "useGlobal" )
if vLayer.isValid() is True:
print("Layer {} loaded successfully".format(vLayer.name()))
else:
print("Layer {} did not load".format(vLayer.name()))
QgsMapLayerRegistry.instance().addMapLayers([vLayer])
#save file as PNG starts here
# create image
img = QImage(QSize(800, 600), QImage.Format_ARGB32_Premultiplied)
# set image's background color
color = QColor(255, 255, 255)
img.fill(color.rgb())
# create painter
p = QPainter()
p.begin(img)
p.setRenderHint(QPainter.Antialiasing)
render = QgsMapRenderer()
# set layer set
lst = [rLayer.id()]
render.setLayerSet(lst)
# set extent
rect = QgsRectangle(render.fullExtent())
rect.scale(1.1)
render.setExtent(rect)
# set output size
render.setOutputSize(img.size(), img.logicalDpiX())
# do the rendering
render.render(p)
p.end()
# save image
img.save("/home/francis/QGIS/PNG/render.png","png")
qgs.exitQgis()