Sunteți pe pagina 1din 30

Todas las novedades del lanzamiento de QGIS 3.

4
Madeira LTR
Detalle de todas las novedades de QGIS 3.4 Madeira

Por Asociación Geoinnova

(8 votos, media: 5,00 sobre 5)

El lanzamiento de QGIS 3.4 Madeira es una LTR (Long Term Release) y estaba previsto para
este 26 de Octubre del 2018. YA puedes descargártelo desde los paquetes de repositorios.
Como partners del proyecto QGIS no deja de ilusionarnos cada vez que hay un lanzamiento
así.

Después de los avances de QGIS 3.2, va a ser el primer lanzamiento a largo plazo de la
plataforma de QGIS 3.x, existiendo una gran lista de cambios en esta nueva versión LTR de los
que pasamos a hablar.

Artículo traducido de la web http://changelog.qgis.org

CARACTERÍSTICAS GENERALES DE QGIS 3.4

Los archivos SVG se pueden incrustar en proyectos y símbolos


Permite que las imágenes SVG para simbología, etiquetas, etc. se incrusten directamente
dentro de un archivo de proyecto (o estilo QML o plantilla de impresión QPT) codificando el svg
como una cadena base64 estándar. Además, los archivos incrustados pueden extraerse de
proyectos y símbolos y guardarse en archivos SVG basados ​en disco.

Disponible como aplicación Flatpak para Linux


Permite a los usuarios instalar diferentes versiones de QGIS en Linux sin tener que volver a
compilar o usar Docker. Es un paquete completo con todas las bibliotecas incluidas y utiliza sus
propias ubicaciones de perfil de usuario.

Aceleración basada en OpenCL

INTERFACE DE USUARIO EN QGIS 3.4 MADEIRA

Selección automática de archivos exportados en el administrador de


archivos
Cada vez que un elemento de la barra de mensajes se vincula con un archivo creado (por
ejemplo, después de exportar un diseño o una capa de mapa), el enlace ahora abrirá
directamente la carpeta que contiene este archivo dentro del buscador de archivos del sistema
operativo y preseleccionará el archivo creado.

Añadir la opción Open Directory a los proyectos de página de bienvenida


deshabilitados
Esto permite a los usuarios abrir la ruta más cercana a la ubicación del proyecto original en su
administrador de archivos, para ayudarles a reubicar proyectos perdidos / movidos /
renombrados.

Mejoras de UX para las capas temporales de Scratch


Agregue una entrada de menú a las capas temporales de “scratch” en “Hacer permanente”, que
solicita una ubicación para guardar la capa, luego la reemplaza en su lugar (manteniendo la
misma ID, estilo, etc.).

Además, las capas temporales temporales ahora muestran un ícono indicador junto a la capa en
el árbol de capas, lo que deja en claro de inmediato qué capas son temporales y se perderán
cuando se cierre el proyecto.

Muestra el tiempo estimado restante y el tiempo de Snalización en el


widget del administrador de tareas de la barra de estado
Calculado utilizando una interpolación lineal simple basada en el tiempo transcurrido y el
progreso actual, permite a los usuarios obtener un ETA estimado para completar la tarea de
ejecución prolongada.

Hipervínculos a datasets locales de vectores y ráster en el panel de


información
Para los conjuntos de datos locales de vectores y ráster, el panel de información del cuadro de
diálogo de propiedades de capa ahora presenta un hipervínculo de ruta. Al hacer clic en el
hipervínculo, el navegador de archivos del sistema se abrirá y resaltará automáticamente el
conjunto de datos.

El gestor de estilos se abre de forma no modal


Permite utilizar el cuadro de diálogo del administrador de estilos junto con la ventana principal
de QGIS, al igual que el administrador de diseño.

Añade un botón para alternar entre la vista de iconos y una vista de lista
para los símbolos en el selector de símbolos

Interfaz y experiencia del panel del navegador pulido


Se realizaron toneladas de trabajo para esta versión para mejorar la interfaz de usuario y la
experiencia del panel del navegador, incluidas las correcciones de HiDPI, las mejoras de dataset
vector / raster comprimido y un conjunto de iconos actualizado.
Panel de navegador de QGIS 3.4 LTR

Panel de navegador de QGIS 3.4 Madeira

QML gráSco y widget de dibujos


Nuevo tipo de widget para mostrar elementos atractivos e interactivos gráficamente, como
gráficos o dibujos técnicos en forma de atributo. La configuración se reduce a lo básico.
Incluyendo plantillas de ejemplo y añadiendo expresiones.

QML gráfico y widget de dibujos

QML gráfico y widget de dibujos

SIMBOLOGÍA

Estilo de capa de malla


Añade las siguientes características:
Agregar conjuntos de datos a la capa de malla desde el panel de propiedades
Panel de información y fuente en el panel de propiedades.
Selección de conjunto de datos activo (propiedades o panel de estilo)
Estilo de contornos / escalares (propiedades o panel de estilo)
Estilo de marco de malla (propiedades o panel de estilo)
Estilo de flechas vectoriales (propiedades o panel de estilo)

ClasiScar simétrico en renderizador graduado.

MAP COMPOSER

Elementos del mapa 3d


Esta función permite a los usuarios agregar su vista de mapa 3D al diseño de impresión.

Vista 3D en el compositor de mapas de QGIS 3.4 LTR

Vista 3D en el compositor de mapas de QGIS 3.4 Madeira

NUEVAS CARACTERÍSTICAS 3D

Navegación mejorada en QGIS 3.4 Madeira


Esto actualizará el centro de visión de la cámara a medida que la cámara se mueve. Antes, el
centro de la vista estaría siempre en la elevación cero, lo que significa que con el terreno más
alejado de la inclinación cero y la rotación de la cámara se sentiría extraño debido a que el
punto central está muy lejos.

Permite mover la cámara hacia arriba / abajo usando las teclas de subir / bajar página.
Mueva la cámara manteniendo la posición con Ctrl + teclas de flecha / mouse
Nueva navegación 3D mejorada en QGIS 3.4 LTR

Nueva navegación 3D mejorada en QGIS 3.4 LTR

Animación
Puede crear una animación basada en un conjunto de fotogramas clave: posiciones de la
cámara en momentos específicos. QGIS 3D luego interpola las posiciones / rotaciones de la
cámara entre los fotogramas clave.

Para crear los fotogramas clave, primero configure la escena para su mapa, girando, acercando
o moviendo la cámara. A continuación, asigne un tiempo al marco. Hay varios métodos para
interpolaciones entre fotogramas clave.
Animación 3D en QGIS 3.4 LTR

Animación 3D en QGIS 3.4 LTR

Representación simple de cadenas lineales 3D


Este modo de representación de líneas 3D utilizará la representación de líneas OpenGL en lugar
de dividir las líneas en polígonos y presentarlas como mallas. La ventaja es que las líneas 3D no
pierden su coordenada Z, que es el caso actualmente con la representación 3D “normal”
después del búfer. La desventaja es que las líneas no pueden ser anchas (solo se admite en
Qt3D desde 5.10, pero incluso en ese caso no tendrán uniones / tapas agradables) y solo se
utiliza el color ambiental del material.

Representación de lineas 3D

Representación de lineas 3D
Herramienta de mapa de identiScación para vistas 3D
Se introdujo una nueva herramienta de identificación en el mapa 3D. Con esta herramienta,
podrás inspeccionar las características de la escena 3D.

Nueva herrramienta para la identificación de elementos en las vistas 3D de QGIS 3.4 LTR

Nueva herramienta para la identificación de elementos en las vistas 3D de QGIS 3.4 LTR

DIGITALIZACIÓN

Intervalo de adquisición de GPS y opciones de umbral de distancia


Agrega un parámetro de intervalo de adquisición y un parámetro de umbral de distancia al
complemento de gps para mantener el cursor quieto cuando el receptor está en condiciones
estáticas.

Más opciones de ángulo en la ventana de digitalización avanzada


Nuevas opciones en la ventana de digitalización avanzada

Nuevas opciones en la ventana de digitalización avanzada

Nuevas opción de la herramienta Vertex para funcionar únicamente en la


capa actual
El nuevo Vertex es mucho más productivo ahora. Puede mover los vértices de todas las capas
editables a la vez, lo que es excelente para preservar la topología de capas cruzadas. Sin
embargo, en muchos casos, muchos de nosotros no queríamos modificar todas las capas a la
vez. Añadimos una variación de la herramienta de mapa de vértice solo para eso.

Herramienta Vértices de QGIS 3.4 LTR

Herramienta Vértices de QGIS 3.4 LTR

Invertir la dirección de una línea


Ahora ya puedes invertir la dirección de una línea sin necesidad de plugins externos o
algoritmos, con lo que la edición de redes geométricas es mucho más sencilla.
Invertir la dirección de una línea en QGIS 3.4 LTR

Invertir la dirección de una línea en QGIS 3.4 LTR

Precisión de la geometría
Ahora, las capas vectoriales tienen una opción de configuración de precisión, para definir cómo
se debe guardar la ubicación de los nodos. Cada nodo de geometrías nuevas o editadas se
ajusta a una cuadrícula de esta resolución. Mientras se digitaliza, se muestra la cuadrícula para
guiar al usuario.

Define la precisión de los nodos

Define la precisión de los nodos

Eliminar automáticamente los nodos duplicado


Al agregar o editar geometrías en una capa vectorial, QGIS podrá eliminar automáticamente los
nodos duplicados de las geometrías. Esta opción ahora es configurable en la pestaña de
digitalización de capas vectoriales.
Comprobar la validez de la geometría
Se puede verificar la validez de cada geometría nueva o editada si esta opción está activada.
Esto permite en QGIS 3.4 Madeira, comunicarse de forma transparente a un usuario cuando
hay geometrías erróneas producidas por la sesión de edición actual.

Comprobar la validez de la geometría en QGIS 3.4 LTR

VeriScaciones de topología durante la edición


Las comprobaciones de topología se pueden activar en una capa. En las geometrías recién
agregadas y editadas, se pueden ejecutar verificaciones de topología. Las comprobaciones se
ejecutarán cuando la capa se guarde o al hacer clic en el botón de verificación de topología en
el panel de validación de geometría. Los siguientes controles están disponibles:

Brechas
Superposiciones
Faltan vértices en polígonos vecinos.
Verificación en tiempo real de edición la topología

PROCESAMIENTO

Nuevas opciones de edición de entidades


Con esta nueva herrramienta de QGIS 3.4 Madeira, se aborda lo que vemos como la principal
deficiencia dentro de las herramientas de edición de capas vectoriales de QGIS, y cerramos la
brecha entre el gran poder de los algoritmos de procesamiento de QGIS y las operaciones
fáciles de usar que modifican las características de la capa “en su lugar”. Aquí hay una vista
previa rápida de lo que hemos planeado:
Nuevas operaciones de edición de elementos en QGIS 3.4 LTR

Almacenar modelos dentro del proyecto en QGIS 3.4 Madeira


Permite que los modelos de procesamiento se almacenen dentro de los archivos de proyecto de
QGIS, de modo que la apertura del proyecto haga que ese modelo esté disponible.

Algunos modelos están tan intrínsecamente vinculados a la lógica dentro de un proyecto en


particular que no tienen ningún significado (o están totalmente rotos) fuera de ese proyecto
(por ejemplo, modelos que se basan en la presencia de capas de mapa, relaciones, etc.)

Este cambio en QGIS 3.4 Madeira, permite que estos modelos se almacenen dentro de ese
proyecto, evitando saturar al proveedor de modelos “global” con modelos que no tienen sentido
y facilitando la distribución de un solo proyecto con estos modelos incluidos.

Los modelos se almacenan dentro de los proyectos haciendo clic en el nuevo botón
“incrustar en el proyecto” en la barra de herramientas del diálogo del modelador. Los modelos
se pueden eliminar de un proyecto del menú de clic derecho del modelo en la
caja de herramientas.

CURSO DE QGIS: INTRODUCCIÓN A LOS SISTEMAS DE INFORMACIÓN


GEOGRÁFICA
Sampleo de Valores de ráster
Nuevo algoritmo para muestrear valores ráster en ubicaciones de puntos.

Nuevo algoritmo de rastreo ráster

Nuevo algoritmo ‘Raster pixeles a polígonos’


Convierte una capa ráster en una capa vectorial, con una función de polígono correspondiente a
cada píxel del ráster y un solo campo que contiene el valor de la banda del ráster.

Nuevo algoritmo de agrupamiento “K Means” (spatial clustering)


Agrega un algoritmo nativo de clustering de k-means. Este nuevo algoritmo agrega un nuevo
campo de ID para identificar el clúster . Si se utilizan geometrías no puntuales como entrada, la
agrupación se basará en el centroide de las estas geometrías.

Nuevo algoritmo de agrupamiento espacial “dbscan” (spatial clustering)


En QGIS 3.4 Madeira, se implementa un nuevo análisis optimizado para hallar clusters basado
en densidades, DBSCAN, optimizado para agrupar entidades 2d de puntos.

Parámetros más dinámicos


Líneas de extensión: distancia de inicio / final
dinámica Líneas de compensación: distancia de compensación dinámica

Algoritmos mejorados
El algoritmo de dirección de línea inversa ahora puede funcionar con “Multi LineStrings”

Algoritmo para Sltrar vértices por valores M y valores Z


Agrega dos nuevos algoritmos, para filtrar los vértices de línea / polígono por sus valores M o Z.
Se puede ingresar un valor M / Z mínimo y máximo, y si los vértices caen fuera de estos
rangos, se descartarán de la geometría de salida. Los valores de filtro mínimo y máximo
también pueden definirse por datos, por lo que pueden variar según la función.

Nuevo algoritmo “Array of Offset Features”


Este algoritmo crea copias de entidades en una capa, al crear varias versiones de
compensación de la entidad. Cada copia es desplazada por una cantidad preestablecida en el
eje x/y/z/m.

Nuevo algoritmo para “Crear líneas paralelas”


Este algoritmo crea copias de entidades de línea en una capa, creando múltiples versiones
paralelas de cada entidad. Cada copia se compensa con una distancia preestablecida.

Elección de unidades para distancias no graduadas / desconocidas


Esta nueva característica te permite mostrar un cuadro combinado que permita elegir el tipo de
unidad, cuando el algoritmo de trabajo tiene un parámetro de distancia en metros / pies / etc
(es decir, distancias no geográficas). Recuerden que NO se debería de trabajar con las
distancias en grados: los usuarios en esta situación deben elegir una proyección local adecuada
y reproyectar sus datos para que coincidan.

Características nativas para establecer valores z / m desde un ráster


Establece los valores de z/m de vértice a valores muestreados desde una banda de ráster. Los
valores se pueden escalar opcionalmente usando un valor de escala.

Nuevo algoritmo “píxeles a puntos”


En QGIS 3.4 Madeira, se añade un nuevo algoritmo de “píxeles a puntos”, que crea una entiad
de puntos en el centro de cada píxel. Se omiten los píxeles nodata.

Un nuevo algoritmo de subcadena de línea


Este algoritmo devuelve la parte de una línea (o curva) que se encuentra entre las distancias de
inicio y final especificadas (medidas desde el principio de la línea). Los valores Z y M se
interpolan linealmente a partir de valores existentes.

Nuevo algoritmo de interpolación de punto sobre línea


Este algoritmo crea una geometría de punto interpolada a una distancia establecida a lo largo
de las geometrías de línea (o límite de polígono).
Mejoras en los algoritmos de Unión por valor de campo y de ubicación
Los algoritmos “unir por valor de campo” y “unir por ubicación” ahora pueden opcionalmente
exportar registros no coincidentes. “Join by Field Value” también informa de recuentos de
características coincidentes / no coincidentes.

Los scripts de Python que implementan algoritmos ahora ejecutan el


algoritmo al arrastrar y soltar y hacer doble clic en el navegador
Cuando sea apropiado, los scripts ahora iniciarán un cuadro de diálogo de algoritmo de
procesamiento cuando:

Arrastre y suelte un script de python en la ventana principal


Usando la acción del script de ejecución del botón derecho del panel del navegador

Ejecuciónde scripts de Python desde el Navegador de QGIS 3.4 Madeira

Nuevo algoritmo de banda de GDAL


En QGIS 3.4 Madeira, se ha agregado también un nuevo algoritmo GDAL “Reorganizar banda”
del proveedor a la caja de herramientas de procesamiento. El algoritmo permite generar
rásteres que continúan un subconjunto de las bandas de un ráster de entrada dado y ofrece la
posibilidad de reordenar las bandas.
Nuevo algoritmo de banda de GDAL en QGIS 3.4 Madeira LTR

Valores “precalculados” para los parámetros del algoritmo modelo


Una nueva opción está presente para todos los parámetros de usar una “expresión
precalculada”. Esta expresión se evalúa una vez antes de que el algoritmo hijo se ejecute y se
use durante la ejecución de ese algoritmo.

Categorizar una capa usando un archivo XML de estilo


Establece el renderizador de una capa vectorial en un renderizador categorizado usando
símbolos coincidentes de una base de datos de estilo. La expresión especificada (o nombre de
campo) se utiliza para crear categorías para el renderizador. Se creará una categoría para cada
valor único dentro de la capa.

Cada categoría se hace coincidir individualmente con los símbolos que existen dentro de la base
de datos de estilo QGIS XML especificada. Siempre que se encuentre un nombre de símbolo
coincidente, el símbolo de la categoría se establecerá en este símbolo coincidente.

La coincidencia no distingue entre mayúsculas y minúsculas de forma predeterminada, pero se


puede hacer que distinga entre mayúsculas y minúsculas si es necesario. Opcionalmente, los
caracteres no alfanuméricos tanto en el valor de categoría como en el nombre del símbolo
pueden ignorarse mientras se realiza la coincidencia. Esto permite una mayor tolerancia al
combinar categorías con símbolos.

Si lo desea, también se pueden generar tablas que contengan listas de las categorías que no
pueden coincidir con los símbolos, y los símbolos que no se corresponden con las categorías.
Categorización mediante archivos XML

COMPLEMENTOS

Soporte para Zips cifrados desde el Administrador de complementos


El gestor de complementos ahora puede instalar complementos desde archivos zip locales
incluso si están cifrados.
Gestión de complementos comprimidos

Edición GeoPackage fuera de línea


Con la funcionalidad de edición sin conexión, es posible seleccionar si la exportación debe crear
un archivo SpatiaLite o GeoPackage para el uso sin conexión.

PROGRAMABILIDAD

Indice espacial “QgsSpatialIndexKDBush”


Un índice espacial estático muy rápido para puntos 2D basado en un árbol KD plano, utilizando
https://github.com/mourner/kdbush.hpp. En comparación con el índice “QgsSpatialIndex”:

Solo admite funciones de un solo punto (sin multipuntos)


Es estático (las funciones no se pueden agregar o eliminar del índice después de la
construcción)
¡Es mucho más rápido!
Admite búsquedas verdaderas “basadas en la distancia”, es decir, devuelve todos los puntos
dentro de un radio desde un punto de búsqueda

“QgsRasterDataProvider”
Un método de muestreo que permite muestreos más eficientes de rásteres sobre un punto
dado.

Nueva llamada a la API de PyQGIS que devuelve una subcadena de


curva: “QgsCurve”
Devuelve una nueva curva representando una subcadena de una curva, contando con una
distancia origen y una distancia final. Si los valores de z o m están presentes, la salida z y m se
interpolarán utilizando los valores z o m de los vértices existentes. El método también maneja
geometrías curvas sin pérdida o segmentación.

Cambios en la API
Debido a los recientes cambios incorporados a la librería PyQt/sip, la forma recomendada de
importar este módulo ha cambiado en QGIS 3.4. Para obtener la máxima portabilidad, en lugar
de llamar directamente: “import sip” debería de usarse “from qgis.PyQt import sip”. Usando
este nuevo estilo de importación garantizará que el código funcione correctamente en todas las
plataformas y se mantenga funcional en las futuras versiones de QGIS.

PROVEEDORES DE DATOS

Nuevo complemento de método de autenticación OAuth2


Admite flujos de concesión de código de autenticación, implícito y propietario de recursos.
Permite conexiones preconfiguradas, lectura desde ubicaciones predeterminadas
Ofrece almacenamiento en caché del token de acceso más allá de los reinicios de QGIS
Guardar / cargar configuraciones

Capa de malla: Nuevo soporte de formato de capa de malla


Las capas de malla representan datos en una cuadrícula de tamaño variable con componentes
adicionales (por ejemplo, tiempo y vector). Con la introducción de MDAL, los usuarios pueden
cargar los siguientes formatos directamente en QGIS y explorar todos los demás componentes:
GRIB, XMDF y Netcdf

Nuevos soportes para las capas de malla en QGIS 3.4 Madeira LTR

Capa de malla: agrega una función para identiScar el valor en las capas
de malla
Con esta API, los desarrolladores pueden inspeccionar elementos de malla y obtener valores
espacial y temporalmente. Como ejemplo, puede crear gráficos de series de tiempo desde su
capa de malla.

Gráficos de series de tiempo sobre capas de malla

Capa de malla: permite elegir diferentes conjuntos de datos vectoriales y


escalares
Una capa de malla a menudo contiene varias cantidades. Por ejemplo, un netcdf / grib puede
contener varias cantidades meteorológicas. Cada cantidad, también puede tener múltiples
componentes. Por ejemplo, los datos de viento, pueden contener velocidad (escalar) y valores
(cuadrícula). Con esta opción, puede superponer escalar y grillas de diferentes cantidades. En
la imagen de abajo, puedes ver la temperatura (rejilla) y el viento (escalar).
Combinación de diferentes datos sobre una capa de malla en QGIS 3.4 Madeira

Capa de malla: permite vectores/hechas de render en la cuadrícula


deSnida por el usuario
Los datos escalares se generan generalmente en el centro / esquina de cada elemento de la
malla. Cuando se muestran los datos escalares, las flechas pueden parecer dispersas y, a
menudo, no es posible ver la tendencia general. Con esta opción, las flechas se pueden mostrar
en una cuadrícula definida por el usuario. Los valores escalares adicionales se interpolarán
sobre la marcha y se colocarán en la cuadrícula definida por el uso.
Vectores sobre capas ráster en QGIS 3.4

Soporte de tipo JSON/JSONB


Se admite la lectura de tipos JSON de PostgreSQL. Los datos JSON se pueden mostrar en los
widgets como “Clave / Valor” (mapas), como “Lista” (matrices) o como texto.
Soporte JSON/JSONB para PostgreSQL

GESTIÓN DE DATOS

Traducción de proyectos QGIS


Al igual que QGIS y sus complementos, los proyectos se traducen con el proceso de traducción
de Qt. Significa, hace la traducción de acuerdo con un archivo de fuente de traducción
compilado de Qt (archivo .qm). Cuando el usuario abre un proyecto, QGIS busca un archivo
.qm en la misma carpeta que el archivo .qgs, que tiene el mismo nombre que el archivo .qgs y
tiene el código de idioma como postfix del idioma de los usuarios (el idioma configurado en la
configuración de QGIS). Para crear la traducción, en la configuración del proyecto hay una
opción para generar el archivo .ts, que puede ser editado por programas como Qt Linguist o
Transifex.

Posibilidad de agregar un botón en la barra de herramientas de la tabla


de atributos para cambiar entre el modo de ventana acoplado y el modo
de ventana
Anteriormente, tenía que cambiar una opción en el cuadro de diálogo de configuración y abrir
una nueva tabla para cambiar entre acoplado/desacoplado, pero es molesto si decide que
después de que una tabla ya está abierta, le gustaría acoplarlo/desacoplarlo

Nuevo Sltro de localización para buscar en todas las capas


Se ha agregado un nuevo filtro de localización que le permite buscar en todas las capas en su
expresión de visualización. El filtro se puede activar usando el prefijo ‘af’ o configurándolo como
predeterminado en las opciones de QGIS -> Locator -> Features In All Layer. Las
expresiones de visualización se definen en las propiedades de la capa vectorial en la pestaña de
visualización. Las capas se pueden marcar como no buscables en las propiedades del proyecto,
en la pestaña Orígenes de datos.

Indicador de vista de árbol de capas para capas no removibles


(requeridas)
Agrega un ícono de candado al lado de cada capa marcada según sea necesario.

Indicador de bloqueo de capas en QGIS 3.4 Madeira

Agregar capa ráster a un Geopackage existente


Al guardar una capa ráster en la base de datos de GeoPackage, ahora es posible agregar la
capa a un archivo existente.

Agregar capa ráster a un Geopackage en QGIS 3.4 Madeira


SERVIDOR QGIS

Administración de la memoria caché del servidor mediante


complementos
De forma predeterminada, QGIS Server solo almacena en caché el documento GetCapabilities
de WMS en la memoria. Con la implementación de WMTS, es necesario tener una forma de
almacenar en caché los mosaicos. Pero el administrador de caché no se ha desarrollado solo
para almacenar en caché los mosaicos. El complemento administrador de caché, se puede
utilizar para almacenar en caché:

Documentos WMS, WFS, WCS, WMTS GetCapabilities


WFS DescribeFeatureType documentos
WCS Describe documentos de cobertura
Imágenes de GetTile de WMTS
Imágenes WMS GetLegendGraphic

Aquí hay una clase de administrador de caché de python, que no verifica si el proyecto QGIS ha
cambiado:

clase PyServerCache (QgsServerCacheFilter):

1. """ Used to have cache control """


2.
3. def __init__(self, server_iface):
4. super(QgsServerCacheFilter, self).__init__(server_iface)
5.
6. self._cache_dir = os.path.join(tempfile.gettempdir(), "qgs_server_cache")
7. if not os.path.exists(self._cache_dir):
8. os.mkdir(self._cache_dir)
9.
10. self._tile_cache_dir = os.path.join(self._cache_dir, 'tiles')
11. if not os.path.exists(self._tile_cache_dir):
12. os.mkdir(self._tile_cache_dir)
13.
14. def getCachedDocument(self, project, request, key):
15. m = hashlib.md5()
16. paramMap = request.parameters()
17. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
18. m.update(urlParam.encode('utf8'))
19.
20. if not os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml")):
21. return QByteArray()
22.
23. doc = QDomDocument(m.hexdigest() + ".xml")
24. with open(os.path.join(self._cache_dir, m.hexdigest() + ".xml"), "r") as f:
25. statusOK, errorStr, errorLine, errorColumn = doc.setContent(f.read(), True)
26. if not statusOK:
27. print("Could not read or find the contents document. Error at line %d,
column %d:\n%s" % (errorLine, errorColumn, errorStr))
28. return QByteArray()
29.
30. return doc.toByteArray()
31.
32. def setCachedDocument(self, doc, project, request, key):
33. if not doc:
34. print("Could not cache None document")
35. return False
36. m = hashlib.md5()
37. paramMap = request.parameters()
38. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
39. m.update(urlParam.encode('utf8'))
40. with open(os.path.join(self._cache_dir, m.hexdigest() + ".xml"), "w") as f:
41. f.write(doc.toString())
42. return os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))
43.
44. def deleteCachedDocument(self, project, request, key):
45. m = hashlib.md5()
46. paramMap = request.parameters()
47. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
48. m.update(urlParam.encode('utf8'))
49. if os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml")):
50. os.remove(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))
51. return not os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))
52.
53. def deleteCachedDocuments(self, project):
54. filelist = [f for f in os.listdir(self._cache_dir) if f.endswith(".xml")]
55. for f in filelist:
56. os.remove(os.path.join(self._cache_dir, f))
57. filelist = [f for f in os.listdir(self._cache_dir) if f.endswith(".xml")]
58. return len(filelist) == 0
59.
60. def getCachedImage(self, project, request, key):
61. m = hashlib.md5()
62. paramMap = request.parameters()
63. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
64. m.update(urlParam.encode('utf8'))
65.
66. if not os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png")):
67. return QByteArray()
68.
69. img = QImage(m.hexdigest() + ".png")
70. with open(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"), "rb") as f:
71. statusOK = img.loadFromData(f.read())
72. if not statusOK:
73. print("Could not read or find the contents document. Error at line %d,
column %d:\n%s" % (errorLine, errorColumn, errorStr))
74. return QByteArray()
75.
76. ba = QByteArray()
77. buff = QBuffer(ba)
78. buff.open(QIODevice.WriteOnly)
79. img.save(buff, 'PNG')
80. return ba
81.
82. def setCachedImage(self, img, project, request, key):
83. m = hashlib.md5()
84. paramMap = request.parameters()
85. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
86. m.update(urlParam.encode('utf8'))
87. with open(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"), "wb") as f:
88. f.write(img)
89. return os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"))
90.
91. def deleteCachedImage(self, project, request, key):
92. m = hashlib.md5()
93. paramMap = request.parameters()
94. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
95. m.update(urlParam.encode('utf8'))
96. if os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png")):
97. os.remove(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"))
98. return not os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() +
".png"))
99.
100. def deleteCachedImages(self, project):
101. filelist = [f for f in os.listdir(self._tile_cache_dir) if f.endswith(".png")]
102. for f in filelist:
103. os.remove(os.path.join(self._tile_cache_dir, f))
104. filelist = [f for f in os.listdir(self._tile_cache_dir) if f.endswith(".png")]
105. return len(filelist) == 0

1. """ Used to have cache control """


2.
3. def __init__(self, server_iface):
4. super(QgsServerCacheFilter, self).__init__(server_iface)
5.
6. self._cache_dir = os.path.join(tempfile.gettempdir(), "qgs_server_cache")
7. if not os.path.exists(self._cache_dir):
8. os.mkdir(self._cache_dir)
9.
10. self._tile_cache_dir = os.path.join(self._cache_dir, 'tiles')
11. if not os.path.exists(self._tile_cache_dir):
12. os.mkdir(self._tile_cache_dir)
13.
14. def getCachedDocument(self, project, request, key):
15. m = hashlib.md5()
16. paramMap = request.parameters()
17. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
18. m.update(urlParam.encode('utf8'))
19.
20. if not os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml")):
21. return QByteArray()
22.
23. doc = QDomDocument(m.hexdigest() + ".xml")
24. with open(os.path.join(self._cache_dir, m.hexdigest() + ".xml"), "r") as f:
25. statusOK, errorStr, errorLine, errorColumn = doc.setContent(f.read(), True)
26. if not statusOK:
27. print("Could not read or find the contents document. Error at line %d,
column %d:\n%s" % (errorLine, errorColumn, errorStr))
28. return QByteArray()
29.
30. return doc.toByteArray()
31.
32. def setCachedDocument(self, doc, project, request, key):
33. if not doc:
34. print("Could not cache None document")
35. return False
36. m = hashlib.md5()
37. paramMap = request.parameters()
38. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
39. m.update(urlParam.encode('utf8'))
40. with open(os.path.join(self._cache_dir, m.hexdigest() + ".xml"), "w") as f:
41. f.write(doc.toString())
42. return os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))
43.
44. def deleteCachedDocument(self, project, request, key):
45. m = hashlib.md5()
46. paramMap = request.parameters()
47. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
48. m.update(urlParam.encode('utf8'))
49. if os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml")):
50. os.remove(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))
51. return not os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))
52.
53. def deleteCachedDocuments(self, project):
54. filelist = [f for f in os.listdir(self._cache_dir) if f.endswith(".xml")]
55. for f in filelist:
56. os.remove(os.path.join(self._cache_dir, f))
57. filelist = [f for f in os.listdir(self._cache_dir) if f.endswith(".xml")]
58. return len(filelist) == 0
59.
60. def getCachedImage(self, project, request, key):
61. m = hashlib.md5()
62. paramMap = request.parameters()
63. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
64. m.update(urlParam.encode('utf8'))
65.
66. if not os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png")):
67. return QByteArray()
68.
69. img = QImage(m.hexdigest() + ".png")
70. with open(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"), "rb") as f:
71. statusOK = img.loadFromData(f.read())
72. if not statusOK:
73. print("Could not read or find the contents document. Error at line %d,
column %d:\n%s" % (errorLine, errorColumn, errorStr))
74. return QByteArray()
75.
76. ba = QByteArray()
77. buff = QBuffer(ba)
78. buff.open(QIODevice.WriteOnly)
79. img.save(buff, 'PNG')
80. return ba
81.
82. def setCachedImage(self, img, project, request, key):
83. m = hashlib.md5()
84. paramMap = request.parameters()
85. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
86. m.update(urlParam.encode('utf8'))
87. with open(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"), "wb") as f:
88. f.write(img)
89. return os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"))
90.
91. def deleteCachedImage(self, project, request, key):
92. m = hashlib.md5()
93. paramMap = request.parameters()
94. urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
95. m.update(urlParam.encode('utf8'))
96. if os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png")):
97. os.remove(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"))
98. return not os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() +
".png"))
99.
100. def deleteCachedImages(self, project):
101. filelist = [f for f in os.listdir(self._tile_cache_dir) if f.endswith(".png")]
102. for f in filelist:
103. os.remove(os.path.join(self._tile_cache_dir, f))
104. filelist = [f for f in os.listdir(self._tile_cache_dir) if f.endswith(".png")]
105. return len(filelist) == 0

Y la forma de agregarlo al administrador de caché de QGIS Server.

1. servercache = PyServerCache(server_iface)
2. server_iface.registerServerCache(servercache, 100)

1. servercache = PyServerCache(server_iface)
2. server_iface.registerServerCache(servercache, 100)

Nuevo soporte para WMTS 1.0.0


¡Por fin! QGIS Server 3.4 ya es compatible con el estándar WMTS 1.0.0 OGC. En las
propiedades del proyecto QGIS, el usuario puede definir:

Qué parte del proyecto (todo el proyecto, grupos de capas o capas) debe publicarse a través
del estándar WMTS
La escala mínima de las teselas

QGIS Server reutilizó el CRS definido en el WMS para WMTS. Para administrar la caché de
mosaicos, QGIS Server debe instalar y cargar un complemento de QGIS Server con una clase
QgsServerCacheFilter.
Soporte para WMTS 1.0.0

Además también se ha añadido la capacidad para definir una escala mínima para los
WMTS.

Soporte de registros de QGIS Server a “stderr”


Ahora es posible configurar QGIS Server para que escriba sus registros en stderr. Esto se hace
configurando la env de QGIS_SERVER_LOG_FILE al valor especial “stderr”

______________

Hasta aquí todas las novedades de QGIS 3.4 Madeira. Y como ya sabréis, en Geoinnova
Formación somos expertos en GIS y contamos con cursos de QGIS a vuestra disposición
pinchando en el siguiente enlace:

Cursos de QGIS de Geoinnova


Asociación Geoinnova
https://geoinnova.org/

La Asociación Geoinnova fue creada en 2009 por profesionales del medio ambiente y del territorio. Tiene
como objetivos principales desarrollar su actividad en los ámbitos de la Formación en SIG y Medio
Ambiente, así como en la Consultoría de proyectos ligados al Urbanismo, Ordenación del Territorio,
Medio Ambiente y Sistemas de Información Geográfica.

S-ar putea să vă placă și