Gerar blocos XYZ com Python não funcionando
Atualmente, estou tentando gerar blocos XYZ com Python de um arquivo .tif. Tentei usar a GUI do QGis e depois de algum tempo os blocos estavam gerando corretamente. Depois disso eu vi em outro link, que pude ver o comando de processamento no Histórico de Processamento na GUI. A saída da minha pasta na GUI é a seguinte:
O comando de histórico correspondente na GUI é:
processing.run("qgis:tilesxyzdirectory", {'EXTENT':'-443.962200000,456.037800000,-4759.144700000,-3659.144700000 []','ZOOM_MIN':11,'ZOOM_MAX':11,'DPI':96,'BACKGROUND_COLOR':QColor(0, 0, 0, 0),'TILE_FORMAT':0,'QUALITY':75,'METATILESIZE':4,'TILE_WIDTH':256,'TILE_HEIGHT':256,'TMS_CONVENTION':False,'OUTPUT_DIRECTORY':'C:\\Users\\xxx\\Documents\\FP\\QGIS EPSG','OUTPUT_HTML':'TEMPORARY_OUTPUT'})
Depois disso, tentei reproduzir a mesma saída em python. O código em si é executado sem erros, mas a estrutura da pasta é completamente diferente e contém muitas pastas Y negativas e o código em si realmente não para. A saída da pasta gerada a partir do script Python é a seguinte:
Meu script python para os tiles é:
import requests
import numpy as np
import wradlib as wrl
import sys
import matplotlib.pyplot as pl
import os
from qgis.core import *
QgsApplication.setPrefixPath('C:\\OSGeo4W\\apps\\qgis\\', True)
qgs = QgsApplication([], False)
qgs.initQgis()
import processing
from processing.core.Processing import Processing
Processing.initialize()
path_to_tif = "geotiff30101055.tiff"
rlayer = QgsRasterLayer(path_to_tif, "Standard raster layer")
QgsProject.instance().addMapLayer(rlayer, False)
processing.run("qgis:tilesxyzdirectory", {
'EXTENT': '-443.962200000,456.037800000,-4759.144700000,-3659.144700000 []',
'ZOOM_MIN': 11, 'ZOOM_MAX': 11, 'DPI': 100,
'TILE_FORMAT': 0,
'QUALITY': 75,
'METATILESIZE': 4,
'TILE_WIDTH': 256,
'TILE_HEIGHT': 256,
'TMS_CONVENTION': False,
'OUTPUT_DIRECTORY': 'C:\\Users\\xxx\\Documents\\FP\\First', 'OUTPUT_HTML': 'TEMPORARY_OUTPUT'
})
Espero que você possa me ajudar agora porque não encontrei uma solução sozinho até agora.
desde já, obrigado
Respostas
Na GUI você não definiu um esquema de tiling (CRS) e em seu script você definiu uma projeção.
Tentei o mesmo e o que acontece é que o algoritmo assume que, sem um esquema de tiling definido, suas coordenadas estão se referindo a EPSG: 3857 (WGS 84 / Pseudo-Mercator (web mercator)).
Se você deseja publicar seus ladrilhos em algum lugar público, você pode definir seu projeto como EPSG: 3857 e selecionar a extensão com a GUI primeiro para ter certeza de que está no local correto.
processing.run("qgis:tilesxyzdirectory",
{'EXTENT':'-443.962200000,456.037800000,
-4759.144700000,-3659.144700000 []', # No Defined tiling scheme or CRS
'ZOOM_MIN':11,
'ZOOM_MAX':11,
'DPI':96,
'BACKGROUND_COLOR':QColor(0, 0, 0, 0),
'TILE_FORMAT':0,
'QUALITY':75,
'METATILESIZE':4,
'TILE_WIDTH':256,
'TILE_HEIGHT':256,
'TMS_CONVENTION':False,
'OUTPUT_DIRECTORY':'C:\\Users\\xxx\\Documents\\FP\\QGIS EPSG',
'OUTPUT_HTML':'TEMPORARY_OUTPUT'})
processing.run("qgis:tilesxyzdirectory", {
'EXTENT': '-443.962200000,456.037800000,
-4759.144700000,-3659.144700000 [Radolan Projection]', # Defined Radolan Projection
'ZOOM_MIN': 11, 'ZOOM_MAX': 11, 'DPI': 100,
'TILE_FORMAT': 0,
'QUALITY': 75,
'METATILESIZE': 4,
'TILE_WIDTH': 256,
'TILE_HEIGHT': 256,
'TMS_CONVENTION': False,
'OUTPUT_DIRECTORY': 'C:\\Users\\xxx\\Documents\\FP\\First', 'OUTPUT_HTML': 'TEMPORARY_OUTPUT'
})