QGISとPythonを組み合わせることで、地理情報システム(GIS)のタスクを自動化することが可能になります。特に、複数のシェープファイルをレンダリングする際に、Pythonで制御を行うことが求められる場合があります。

しかし、複数のシェープファイルをレンダリングする際には、各シェープファイルが完全にレンダリングされるのを待つ必要があります。これを実現するためには、Pythonのtime.sleep()関数を使用することが一般的ですが、この関数を使用するとプログラム全体が停止してしまうため、QGISのレンダリングが中断されてしまいます。

そのため、time.sleep()の代わりにQtGui.QApplication.processEvents()を使用することで、プログラムがバックグラウンドでレンダリングを続けることが可能になります。

以下に、QGISとPythonを使用して複数のシェープファイルを順番にレンダリングするサンプルコードを示します。

import ogr, os
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from qgis.core import *
import qgis.utils
import glob
from time import sleep
import math
import processing
from processing.core.Processing import Processing
from PyQt4.QtCore import QTimer

Processing.initialize()
Processing.updateAlgsList()

OutputFileName = "ABC"    # Temporary global placeholder for filename
canvas = iface.mapCanvas()

def startstuffs():
    qgis.utils.iface.zoomToActiveLayer()    # Zoom to Layer
    scale = canvas.scale()    # Get current Scale
    scale =  scale * 1.5
    canvas.zoomScale(scale)   # Zoomout a bit
    QTimer.singleShot(2000, saveImg)   # Jump to save img

def saveImg():
    qgis.utils.iface.mapCanvas().saveAsImage(OutputFileName)
    QgsMapLayerRegistry.instance().removeAllMapLayers()

# Add array of address below
allFiles = ["C:/Shapefiles/Map_00721.shp"]
filesLen = len(allFiles)

TexLayer = "C:/US_County_NAD27.shp"

for lop in range(filesLen):
    currentShpFile = allFiles[lop]
    currentShpFileName = currentShpFile.strip("C:/Shapefiles/")
    OutputFileName = "C:/ImageOut/" + currentShpFileName + ".png"
    wb = QgsVectorLayer(currentShpFile, currentShpFileName, 'ogr')
    wbTex = QgsVectorLayer(TexLayer, 'CountyGrid', 'ogr')
    QgsMapLayerRegistry.instance().addMapLayer(wb)    # Add the shapefile
    QgsMapLayerRegistry.instance().addMapLayer(wbTex)    # Add the county shapefile
    qgis.utils.iface.setActiveLayer(wb)   # Makes wb as active shapefile
    QTimer.singleShot(3000, startstuffs)    # This start stuffs

print("Done!")

このコードは、指定されたシェープファイルを順番にレンダリングし、各シェープファイルが完全にレンダリングされるのを待つことで、複数のシェープファイルを正確にレンダリングすることができます。

以上が、QGISとPythonを使用したシェープファイルのレンダリングについての技術記事です。この情報が、PythonとQGISを使用したGISプログラミングに役立つことを願っています。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です