Thanks a lot all! On Wed, Oct 24, 2018 at 12:23 PM Kari Salovaara <[email protected]> wrote:
> Please look at > https://locatepress.com/books > where You can find all essential for QGIS > > Cheers, Kari > > Dimitris Kar kirjoitti 24.10.2018 klo 11:21: > > Hey Raymond, > > Thank you very much for your answer. It worked. Are you aware of any > resources, online trainings, books or anything else which focuses on the > pyqgis3? What would be your recommendation on this. > > Cheers > Dimitris > > On Wed, Oct 24, 2018 at 10:09 AM Raymond Nijssen <[email protected]> > wrote: > >> Hi Dimitris, >> >> It is indeed hard to learn pyqgis 3 with outdated docs. >> >> The following code worked for me (suggested by Martin Dobias): >> >> settings = QgsMapSettings() >> settings.setOutputSize(QSize(512,512)) >> settings.setExtent(layer.extent()) >> settings.setLayers([layer]) >> >> job = QgsMapRendererSequentialJob(settings) >> job.start() >> job.waitForFinished() >> img = job.renderedImage() >> img.save("/tmp/rendered.png") >> >> When you call job.start(), it will start rendering in background and >> immediately return. That's why you need to call job.waitForFinished() >> to block your code until the final image is ready. This approach has a >> downside that it blocks the main thread and therefore the GUI will be >> blocked until rendering has finished. If you would like to avoid this >> blocking, after job.start() you could have a slot that would listen to >> finished() signal coming from "job" - and save the image there. This >> approach makes the code a bit more complex, but the GUI does not get >> blocked and you can even start multiple jobs at a time in parallel. >> >> Hope it helps you. Good luck learning pyqgis! >> >> Raymond >> >> >> >> On 24-10-18 09:47, Dimitris Kar wrote: >> > I am trying to learn and work with PyQGIS 3. >> > >> > It is a very challenging task cause documentation is really [limited >> and >> > out of date][1]. >> > >> > What I am trying to do is to: >> > >> > 1. create a project >> > 2. add a layer >> > 3. save the project >> > 4. export it as a png >> > >> > I have done the first 3 steps (see code below). >> > >> > import sys >> > import qgis >> > from qgis.core import QgsVectorLayer >> > from qgis.core import QgsApplication >> > from qgis.core import QgsProject >> > from qgis.core import QgsMapRendererJob, QgsMapSettings >> > from qgis.gui import QgsMapCanvas >> > from PyQt5.QtGui import QImage, QColor, QPainter >> > from PyQt5.QtCore import QSize >> > >> > # PYTHON APPLICATIONS >> > >> > # prefix path: the location where qgis is installed in the system >> > # the easiest way to find the prefix path to run the following >> > commaand from the python console of qgis: QgsApplication.prefixPath() >> > >> > #1. CREATE THE APPLICATION >> > QgsApplication.setPrefixPath('/usr', True) >> > # second parameter into false disables the gui >> > qgs = QgsApplication([], False) >> > #load providers >> > qgs.initQgis() >> > >> > #2. CREATE THE PROJECT >> > # create project >> > project_name = '/home/dkar/workspaces/qgis/data/test_project_2.qgz' >> > project = QgsProject.instance() >> > new_project = project.write(project_name) >> > >> > #3. READ/OPEN THE PROJECT >> > # modify the project e.g. adding more layers and save it. >> > new_project = project.read(project.fileName()) >> > >> > >> > #4. ADD A VECTORLAYER >> > # add a layer in the QgsProviderRegistry >> > >> > layer=QgsVectorLayer("/home/dkar/workspaces/qgis/data/pakistan_1.shp", >> > "pakistan", "ogr") >> > >> > if not layer.isValid(): >> > print("Layer failed") >> > >> > #5. ADD LAYER TO THE REGISTRY >> > project.addMapLayer(layer, True) >> > project.write('/home/dkar/workspaces/qgis/data/test_project_2.qgz') >> > >> > #6. SAVE THE PROJECT >> > all_layers = QgsProject.instance().mapLayers() >> > >> > >> > img = QImage(QSize (800, 600), QImage.Format_ARGB32_Premultiplied) >> > # set image's backgroud color >> > color = QColor(255, 255, 255) >> > img.fill(color.rgb()) >> > >> > #create painter >> > p = QPainter() >> > p.begin(img) >> > p.setRenderHint(QPainter.Antialiasing) >> > >> > # THIS IS WHERE THE ISSUE APPEARS >> > # THIS IS WHERE THE ISSUE APPEARS >> > render = QgsMapRendererJob() # THIS IS WHERE THE ISSUE APPEARS >> > >> > # set layer set (am I using here the prohect?) >> > lst = [layer.id <http://layer.id>()] # cause "layer" is the name >> of >> > the variable >> > render.setLayerSet(lst) >> > >> > # to remove the provider and layer registries from memory >> > qgs.exitQgis() >> > >> > >> > >> > But when I try to do the last part, following the instructions from the >> > existing documentation. I get issues because the specific function >> > (`QgsMapRenderer`) doesn't exist anymore in QGIS 3. >> > >> > I am not sure how to solve the issue. >> > >> > I see in the documentation that this function: >> > >> > QgsMapRenderer >> > >> > was replaced by >> > >> > QgsMapRendererJob >> > >> > But then when I try to import and use it in the code as: >> > >> > from qgis.core import QgsMapRendererJob, QgsMapSettings >> > render = QgsMapRendererJob() >> > >> > I get an error message: >> > >> > TypeError: qgis._core.QgsMapRendererJob represents a C++ abstract >> > class and cannot be instantiated >> > >> > Any idea how to proceed with this? >> > >> > [1]: >> > >> https://docs.qgis.org/testing/pdf/en/QGIS-testing-PyQGISDeveloperCookbook-en.pdf >> > >> > _______________________________________________ >> > QGIS-Developer mailing list >> > [email protected] >> > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer >> > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer >> > >> >> -- >> Terglobo >> Fahrenheitstraat 1 >> 5223 BJ 's-Hertogenbosch >> The Netherlands >> +31 (0) 6 25 31 49 83 >> _______________________________________________ >> QGIS-Developer mailing list >> [email protected] >> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer >> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer > > > > _______________________________________________ > QGIS-Developer mailing [email protected] > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer > > >
_______________________________________________ QGIS-Developer mailing list [email protected] List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
