কিউজিসে পাইথন স্ক্রিপ্ট ব্যবহার করে ক্যানভাস ডেটা এবং রফতানি রচনা দিয়ে সুরকার মানচিত্র কীভাবে পূরণ করতে হয়


10

আমি কিউজিআইএসে পাইথন স্ক্রিপ্ট তৈরি করতে চাই যা কিছু ডেটা নেবে (shp + tif, আমার উদাহরণে), ট্যাম্পলেট মানচিত্র রচয়িতা (একটি ফাইল থেকে) এবং একটি পিএনজি ছবিতে তৈরি রচনা রফতানি করবে।

প্রোগ্রামিংয়ের প্রায় কোনও অভিজ্ঞতা ছাড়াই (বেসিক পাইথনের জ্ঞানের চেয়ে কম) আমি কিছু কোড স্নিপেট গুগল করি এবং সেগুলি একসাথে কাজ করার চেষ্টা করি। আমি পূর্বের উত্তর দেওয়া কিছু প্রশ্ন থেকে মানচিত্রের সুরকার কোডটি নিয়েছি: পাইথন ব্যবহার করে প্রিন্ট / ম্যাপ কিউজিআইএস সুরকারের ভিউ পিএনজি / পিডিএফ হিসাবে সংরক্ষণ করুন (দৃশ্যমান বিন্যাসে কোনও পরিবর্তন না করে)?

আমি ডেটা এবং মানচিত্রের সুরকার টেমপ্লেট লোড করতে পরিচালিত (একক মানচিত্র এবং কিংবদন্তী আইটেম সংজ্ঞায়িত) তবে আমার রফতানি পিএনজি চিত্রটিতে খালি মানচিত্রের ফ্রেম রয়েছে ( ফ্রেমের মধ্যে কোনও ভেক্টর / রাস্টার ডেটা নেই)। কিংবদন্তি আইটেমটি তবে দুর্দান্ত দেখাচ্ছে।

এই কোড কাজ করে কোন সাহায্য?

from qgis.core import *
import qgis.utils

from PyQt4 import QtCore, QtGui
from qgis import core, gui

# ADD VECTOR LAYER

data_folder = "D:/QGIS/dane/"
granica = "granica_SZ VI_UTM34.shp"
granica_name = granica[0:-4]
granica = data_folder + granica
granica_style = "granica_style.qml"
granica_style = data_folder + granica_style

granica = iface.addVectorLayer(granica, granica_name, "ogr")
granica.loadNamedStyle(granica_style) 
if not granica.isValid():
  print "Granica failed to load or already loaded!"

qgis.utils.iface.legendInterface().setLayerVisible(granica, True)

# ADD RASTER LAYER

landsat = "SZ_VI_LC8-190-022_2015-111_LGN00_OLI_TIRS_atm.TIF"
landsat_name = landsat[0:-4]
landsat = data_folder + landsat
landsat_style = "landsat_style.qml"
landsat_style = data_folder + landsat_style

landsat = iface.addRasterLayer(landsat, landsat_name)
landsat.loadNamedStyle(landsat_style) 
qgis.utils.iface.legendInterface().setLayerVisible(landsat, True)

iface.zoomFull()

# MOVE RASTER DOWN (change order)

canvas = qgis.utils.iface.mapCanvas()
layers = canvas.layers()

root = QgsProject.instance().layerTreeRoot()

landsat_old = root.findLayer(landsat.id())
landsat_move = landsat_old.clone()
parent = landsat_old.parent()
parent.insertChildNode(2, landsat_move)
parent.removeChildNode(landsat_old)

# USE MAP COMPOSER TEMPLATE TO EXPORT IMAGE

from qgis.gui import QgsMapCanvas, QgsLayerTreeMapCanvasBridge
from PyQt4.QtXml import QDomDocument
from PyQt4.QtGui import QImage
from PyQt4.QtGui import QPainter
from PyQt4.QtCore import QSize

template_path = data_folder + 'template.qpt'
template_file = file(template_path)

# Set output DPI
dpi = 300

canvas = QgsMapCanvas()

template_file = file(template_path)
template_content = template_file.read()
template_file.close()
document = QDomDocument()
document.setContent(template_content)
ms = canvas.mapSettings()
composition = QgsComposition(ms)
composition.loadFromTemplate(document, {})

# You must set the id in the template
map_item = composition.getComposerItemById('map')
map_item.setMapCanvas(canvas)
map_item.zoomToExtent(canvas.extent())
# You must set the id in the template
legend_item = composition.getComposerItemById('legend')
legend_item.updateLegend()
composition.refreshItems()

dpmm = dpi / 25.4
width = int(dpmm * composition.paperWidth())
height = int(dpmm * composition.paperHeight())

# create output image and initialize it
image = QImage(QSize(width, height), QImage.Format_ARGB32)
image.setDotsPerMeterX(dpmm * 1000)
image.setDotsPerMeterY(dpmm * 1000)
image.fill(0)

# render the composition
imagePainter = QPainter(image)
composition.renderPage(imagePainter, 0)
imagePainter.end()

image.save(data_folder + "out3.png", "png")

QgsApplication.exitQgis()

কেবল কোড অপ্টিমাইজেশনের জন্য, আপনি সম্ভবত প্রথমে ক্রম পরিবর্তন করার পরিবর্তে রাস্টার এবং ভেক্টর স্তর যুক্ত করতে পারেন। এটি অবিলম্বে সঠিক ক্রমে হবে।
ক্লিমেন্ট

উত্তর:


1
canvas = QgsMapCanvas()
layers = [QgsMapCanvasLayer(landsat),QgsMapCanvasLayer(granica)] 
canvas.setLayerSet(layers)

পিএনজি হিসাবে রফতানির আগে আপনাকে এই স্তরগুলি ক্যানভাসে যুক্ত করতে হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.