Можно ли визуализировать векторный файл (.shp) и растровый файл (.gr2) в одно изображение с правильными координатами? - PullRequest
0 голосов
/ 20 марта 2019

Я хочу отобразить векторный файл (. 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()
...