Genera XYZ Tiles con Python non funzionante

Nov 01 2020

Attualmente sto cercando di generare XYZ Tiles con Python da un file .tif. Ho provato a usare la GUI di QGis e dopo un po 'di tempo le tessere venivano generate correttamente. Dopo di che ho visto su un altro collegamento, che ho potuto vedere il comando di elaborazione nella cronologia di elaborazione nella GUI. L'output della mia cartella nella GUI è il seguente:

Il comando cronologico corrispondente nella 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'})

Successivamente ho provato a riprodurre lo stesso output in Python. Il codice stesso viene eseguito senza errori ma la struttura delle cartelle è completamente diversa e contiene molte cartelle Y negative e il codice stesso non si ferma davvero. L'output della cartella generato dallo script python è il seguente:

Il mio script Python per le piastrelle è:

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'
})


Spero che tu possa aiutarmi ora perché finora non ho trovato una soluzione da solo.

Grazie in anticipo

Risposte

1 DrorBogin Nov 01 2020 at 18:40

Nella GUI non hai definito uno schema di piastrellatura (SR) e nel tuo script hai definito una proiezione.

Ho provato lo stesso e quello che succede è che l'algoritmo presume che senza uno schema di piastrellatura definito le tue coordinate si riferiscano a EPSG: 3857 (WGS 84 / Pseudo-Mercator (web mercator)).

Se vuoi pubblicare i tuoi riquadri da qualche parte pubblica potresti voler impostare il tuo progetto su EPSG: 3857 e selezionare prima l'estensione con la GUI per assicurarti di avere la posizione corretta.

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'
})