{"id":62,"date":"2026-05-29T01:20:13","date_gmt":"2026-05-29T01:20:13","guid":{"rendered":"https:\/\/geo.edesma.org\/blog\/?p=62"},"modified":"2026-06-02T01:31:08","modified_gmt":"2026-06-02T01:31:08","slug":"qgis-layer-viewer","status":"publish","type":"post","link":"https:\/\/geo.edesma.org\/blog\/?p=62","title":{"rendered":"QGIS Layer Viewer"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">QGIS Layer Viewer es un visor de mapas web ligero y sin servidor que lee archivos de definici\u00f3n de capa de QGIS (.qlr) y datos GeoJSON directamente en el navegador, renderiz\u00e1ndolos en un mapa OpenLayers con una simbolog\u00eda que se aproxima fielmente al proyecto QGIS original \u2014 incluyendo simbolog\u00eda categorizada y graduada, patrones de guiones, efectos de resplandor, marcadores SVG, etiquetas y map tips.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin backend, sin procesamiento del lado del servidor, sin subir nada a ning\u00fan servicio en la nube. Los archivos se leen localmente o se obtienen desde una URL. Todo se ejecuta en el navegador. Para desplegarlo basta con copiar dos archivos en cualquier servidor web est\u00e1tico.<\/p>\n\n\n\n<!--more Cotin\u00faa leyendo-->\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfPara qui\u00e9n es?<\/strong> Profesionales GIS que trabajan en QGIS y necesitan compartir mapas estilizados en la web sin tener que reconstruir la simbolog\u00eda desde cero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfQu\u00e9 problema resuelve?<\/strong> La brecha entre una capa estilizada en QGIS y un mapa publicable en la web. Exporta el .qlr, comb\u00ednalo con un GeoJSON, \u00e1brelos en el visor \u2014 listo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfQu\u00e9 no es?<\/strong> Un editor GIS completo. No soporta capas r\u00e1ster ni WMS. Es una herramienta de solo lectura para previsualizaci\u00f3n y compartici\u00f3n de mapas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puedes acceder a la aplicaci\u00f3n en l\u00ednea <a href=\"https:\/\/geo.edesma.org\/qgisviewer\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">aqu\u00ed<\/a>. Tambi\u00e9n puedes instalar la aplicaci\u00f3n en tu propio servidor descargando los archivos HTML y JavaScript en este <a href=\"https:\/\/geo.edesma.org\/blog\/wp-admin\/post.php?post=158\" target=\"_blank\" rel=\"noreferrer noopener\">enlace<\/a>, donde podr\u00e1s descargar datos de ejemplo para practicar tambi\u00e9n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Descripci\u00f3n de la interfaz<\/h1>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"849\" height=\"528\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGISLayerViewer_1.png\" alt=\"\" class=\"wp-image-22\" style=\"aspect-ratio:1.607976071784646;object-fit:cover\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGISLayerViewer_1.png 849w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGISLayerViewer_1-300x187.png 300w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGISLayerViewer_1-768x478.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><br>Un panel redimensionable a la izquierda contiene todos los controles. El panel se puede redimensionar arrastrando su borde derecho (entre 220 y 520 px). El mapa ocupa el resto del viewport.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Interfaz de arrastrar y soltar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La funci\u00f3n de arrastrar y soltar permite a los usuarios a\u00f1adir archivos de capa directamente desde su sistema operativo (por ejemplo, el Explorador de Windows o el Finder de macOS) a la aplicaci\u00f3n. Los controles se encuentran en la parte superior del panel izquierdo.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"289\" height=\"222\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Drag-Drop.png\" alt=\"\" class=\"wp-image-23\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hay tres (3) opciones para a\u00f1adir capas.<\/p>\n\n\n\n<ul class=\"wp-block-list lista-indentada has-custom-css wp-custom-css-942ccda8\">\n<li>GeoJSON junto con un <strong>archivo de definici\u00f3n de capa de QGIS<\/strong> (QLR)<\/li>\n\n\n\n<li class=\"has-custom-css wp-custom-css-114749f4\">Un archivo QLR que referencia internamente una fuente de datos<\/li>\n\n\n\n<li>Un archivo de exportaci\u00f3n de QGIS Layer Viewer con extensi\u00f3n <strong>.qview<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Se puede cargar cualquier n\u00famero de capas de forma secuencial.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">GeoJSON m\u00e1s QLR<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">GeoJSON + QLR es la opci\u00f3n predeterminada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GeoJSON es un formato de intercambio de datos geoespaciales basado en la Notaci\u00f3n de Objetos JavaScript (JSON). Define varios tipos de objetos JSON y la forma en que se combinan para representar datos sobre entidades geogr\u00e1ficas, sus propiedades y sus extensiones espaciales.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aunque el IETF (Internet Engineering Task Force) public\u00f3 la RFC 7946 en 2016 estableciendo una norma estricta \u2014 destinada a simplificar la interoperabilidad en la web \u2014 que indica que GeoJSON debe usar coordenadas de longitud-latitud en WGS 84, la realidad es que los softwares GIS modernos son m\u00e1s flexibles. Herramientas como QGIS permiten exportar GeoJSON en cualquier sistema de referencia de coordenadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GeoJSON no soporta estilos de ning\u00fan tipo<\/strong>. El formato contiene \u00fanicamente geometr\u00eda y atributos. El estilo \u2014 colores, anchos de l\u00ednea, patrones de relleno, etiquetas, s\u00edmbolos \u2014 debe ser gestionado siempre de forma externa por el software que renderiza los datos. En QGIS Layer Viewer, el estilo se proporciona acompa\u00f1ando el GeoJSON con un archivo de definici\u00f3n de capa de QGIS o archivo QLR.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un archivo <code>.qlr<\/code> en QGIS es un <strong>archivo de definici\u00f3n de capa de QGIS<\/strong>. Almacena la simbolog\u00eda (colores, estilos de l\u00ednea, etc.), las etiquetas (formato del texto, posicionamiento, configuraci\u00f3n de renderizado \u2014 transparencia, modos de fusi\u00f3n, etc.) y <strong>otras propiedades de la capa<\/strong>, pero <strong>no los datos en s\u00ed<\/strong>. El archivo QLR solo referencia la fuente de datos. La secci\u00f3n <a href=\"#symbology\" data-type=\"internal\" data-id=\"#symbology\">Simbolog\u00eda extra\u00edda del QLR<\/a> m\u00e1s abajo describe brevemente c\u00f3mo QGIS Layer Viewer gestiona la simbolog\u00eda importada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suelta un archivo <code>.geojson<\/code> y su <code>.qlr<\/code> correspondiente en cualquier orden y la aplicaci\u00f3n los empareja por nombre de archivo. Cualquiera de los dos puede llegar primero; un indicador de espera muestra cu\u00e1l est\u00e1 aguardando a su pareja, con un bot\u00f3n de cancelar (X). El nombre completo del archivo se muestra en un tooltip cuando est\u00e1 truncado.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"370\" height=\"265\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Waiting-for-file.png\" alt=\"\" class=\"wp-image-31\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Waiting-for-file.png 370w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Waiting-for-file-300x215.png 300w\" sizes=\"auto, (max-width: 370px) 85vw, 370px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Suelta ambos archivos simult\u00e1neamente y la l\u00f3gica de emparejamiento los resuelve al instante.<br><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"345\" height=\"309\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Drag-Drop-Files-1.png\" alt=\"\" class=\"wp-image-30\" style=\"width:287px;height:auto\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Drag-Drop-Files-1.png 345w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Drag-Drop-Files-1-300x269.png 300w\" sizes=\"auto, (max-width: 345px) 85vw, 345px\" \/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">QLR con URL de fuente de datos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En el caso de que el archivo QLR referencie la URL de la fuente de datos, la opci\u00f3n <strong>QLR + URL web<\/strong> permite soltar \u00fanicamente el archivo .QLR. El visor lee y descarga el GeoJSON autom\u00e1ticamente. Soporta ArcGIS FeatureServer con paginaci\u00f3n por conjuntos de OID y reescritura de filtros SQL.<\/p>\n\n\n\n<ul class=\"wp-block-list lista-indentada has-custom-css wp-custom-css-bf4114c7\">\n<li>ArcGIS FeatureServer con paginaci\u00f3n por conjuntos de OID y reescritura de filtros SQL.<\/li>\n\n\n\n<li>URL de un archivo GeoJSON en un servidor remoto, cargado en QGIS mediante el Administrador de fuentes de datos.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Formato de archivo de importaci\u00f3n <strong>.qview<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Un archivo <code>.qview<\/code> es un mapa port\u00e1til aut\u00f3nomo creado por QGIS Layer Viewer. Agrupa en un \u00fanico archivo JSON todo lo necesario para reproducir una sesi\u00f3n de mapa \u2014 la simbolog\u00eda QLR en bruto, los datos completos de entidades y todos los ajustes editados por el usuario \u2014 de modo que el destinatario puede abrirlo solt\u00e1ndolo en cualquier instancia del visor, sin archivos adicionales, sin software GIS y sin conexi\u00f3n a internet. Lee m\u00e1s sobre <a href=\"#ExportQview\">la exportaci\u00f3n de un archivo .qview m\u00e1s abajo<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><br><strong>Control de capas<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Debajo de la secci\u00f3n de arrastrar y soltar se encuentra el control de capas, el lugar central para gestionar todas las capas del proyecto \u2014 controlando su <strong>visibilidad<\/strong>, <strong>orden<\/strong>, <strong>agrupaci\u00f3n<\/strong> y <strong>simbolog\u00eda<\/strong>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"361\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/layer-control.png\" alt=\"\" class=\"wp-image-41\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/layer-control.png 396w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/layer-control-300x273.png 300w\" sizes=\"auto, (max-width: 396px) 85vw, 396px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada capa se muestra con un borde codificado por color seg\u00fan su tipo de geometr\u00eda \u2014 cian para puntos, verde para l\u00edneas, naranja para pol\u00edgonos \u2014 y ofrece controles individuales: un interruptor de visibilidad, un bot\u00f3n de eliminar con confirmaci\u00f3n, y una fila expandible con ajustes m\u00e1s detallados.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"790\" height=\"262\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/layers-buttons.png\" alt=\"\" class=\"wp-image-53\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/layers-buttons.png 790w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/layers-buttons-300x99.png 300w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/layers-buttons-768x255.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<ul class=\"wp-block-list lista-indentada has-custom-css wp-custom-css-a2610e49\">\n<li>El icono de tabla abre el visor de tabla de atributos de esa capa.<\/li>\n\n\n\n<li>El icono de l\u00e1piz (\u270f) abre el modal de edici\u00f3n de capa.<\/li>\n\n\n\n<li>El interruptor de visibilidad (icono de ojo) por capa; se vuelve rojo cuando est\u00e1 oculta.<\/li>\n\n\n\n<li>Bot\u00f3n de eliminar capa con di\u00e1logo de confirmaci\u00f3n.<\/li>\n\n\n\n<li>Fila expandible: control deslizante de opacidad (en tiempo real), interruptor de etiquetas, interruptor de map tips y texto descriptivo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Al expandir una capa se muestra el control deslizante de opacidad (con efecto en tiempo real), el interruptor de etiquetas, el interruptor de map tips y, cuando est\u00e1 disponible, el texto de descripci\u00f3n de la capa tomado directamente del archivo <code>.qlr<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No hay l\u00edmite en el n\u00famero de capas que se pueden cargar. El visor las apila autom\u00e1ticamente en un orden l\u00f3gico: pol\u00edgonos en la parte inferior, l\u00edneas en el medio y puntos en la parte superior. Este orden se puede cambiar en cualquier momento arrastrando las capas dentro del panel lateral, y el mapa se actualiza de inmediato. Cada vez que se a\u00f1ade una nueva capa, el mapa ajusta autom\u00e1ticamente la vista para mostrar la extensi\u00f3n total de todas las capas cargadas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Etiquetas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las etiquetas se leen del bloque <code>&lt;labeling type=\"simple\"&gt;<\/code> del archivo <code>.qlr<\/code>. Deben estar configuradas y habilitadas en QGIS antes de exportar. El visor soporta familia de fuente, peso, color, tama\u00f1o (con conversi\u00f3n de unidades) y buffer de texto (halo).<\/p>\n\n\n\n<!-- QGIS Layer Viewer \u2014 Labeling Support block -->\n\n<style>\n.qlv-label {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    background: #ffffff;\n    border: 1px solid #e5e7eb;\n    border-radius: 12px;\n    padding: 20px 24px;\n    max-width: 620px;\n    box-sizing: border-box;\n}\n.qlv-label-header {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 12px;\n}\n.qlv-label-badge {\n    background: #f3f4f6;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    padding: 5px 10px;\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 13px;\n    color: #111827;\n    font-weight: 600;\n}\n.qlv-label-title {\n    font-size: 15px;\n    font-weight: 600;\n    color: #111827;\n    margin: 0;\n}\n.qlv-label-intro {\n    font-size: 13px;\n    color: #6b7280;\n    line-height: 1.7;\n    margin: 0 0 16px;\n}\n.qlv-label-intro code {\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 12px;\n    background: #f3f4f6;\n    padding: 1px 5px;\n    border-radius: 3px;\n    color: #374151;\n}\n.qlv-section-label {\n    font-size: 11px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .07em;\n    color: #9ca3af;\n    margin: 0 0 10px;\n}\n.qlv-divider {\n    border: none;\n    border-top: 1px solid #e5e7eb;\n    margin: 16px 0;\n}\n.qlv-props-2col {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 8px;\n    margin-bottom: 0;\n}\n@media (max-width: 420px) {\n    .qlv-props-2col { grid-template-columns: 1fr; }\n}\n.qlv-label-prop {\n    background: #f9fafb;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    padding: 10px 12px;\n}\n.qlv-label-prop-name {\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 11px;\n    color: #2563eb;\n    font-weight: 600;\n    margin: 0 0 3px;\n}\n.qlv-label-prop-desc {\n    font-size: 12px;\n    color: #6b7280;\n    line-height: 1.5;\n    margin: 0;\n}\n.qlv-placement-row {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 8px;\n}\n@media (max-width: 480px) {\n    .qlv-placement-row { grid-template-columns: 1fr; }\n}\n.qlv-placement-tile {\n    background: #f9fafb;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    padding: 10px 12px;\n    text-align: center;\n}\n.qlv-placement-geom {\n    font-size: 12px;\n    font-weight: 600;\n    color: #111827;\n    margin: 0 0 4px;\n}\n.qlv-placement-mode {\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 11px;\n    color: #2563eb;\n    display: block;\n    margin-bottom: 4px;\n}\n.qlv-placement-note {\n    font-size: 11px;\n    color: #9ca3af;\n    margin: 0;\n    line-height: 1.4;\n}\n.qlv-unit-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr 1fr;\n    gap: 0;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    overflow: hidden;\n}\n.qlv-unit-header {\n    background: #f3f4f6;\n    font-size: 11px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .06em;\n    color: #6b7280;\n    padding: 7px 10px;\n    border-bottom: 1px solid #e5e7eb;\n}\n.qlv-unit-cell {\n    font-size: 12px;\n    color: #374151;\n    padding: 7px 10px;\n    border-bottom: 1px solid #f3f4f6;\n    line-height: 1.4;\n}\n.qlv-unit-cell:last-child,\n.qlv-unit-header:last-child {\n    border-right: none;\n}\n.qlv-unit-cell code {\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 11px;\n    color: #2563eb;\n}\n.qlv-unit-warn {\n    background: #fffbeb;\n    color: #92400e;\n    font-size: 11px;\n}\n.qlv-unit-row-divider {\n    grid-column: 1 \/ -1;\n    border: none;\n    border-top: 1px solid #e5e7eb;\n    margin: 0;\n    height: 0;\n}\n<\/style>\n\n<div class=\"qlv-label\">\n\n    <div class=\"qlv-label-header\">\n        <span class=\"qlv-label-badge\">.qlr<\/span>\n        <p class=\"qlv-label-title\">Soporte de etiquetas<\/p>\n    <\/div>\n\n    <p class=\"qlv-section-label\">Propiedades extra\u00eddas del QLR<\/p>\n    <div class=\"qlv-props-2col\">\n\n        <div class=\"qlv-label-prop\">\n            <p class=\"qlv-label-prop-name\">&lt;text-style&gt; fieldName<\/p>\n            <p class=\"qlv-label-prop-desc\">Atributo de la entidad utilizado como texto de la etiqueta.<\/p>\n        <\/div>\n\n        <div class=\"qlv-label-prop\">\n            <p class=\"qlv-label-prop-name\">&lt;text-style&gt; fontSize + fontSizeUnit<\/p>\n            <p class=\"qlv-label-prop-desc\">Tama\u00f1o de fuente con unidad \u2014 convertido a p\u00edxeles CSS en el momento de la carga.<\/p>\n        <\/div>\n\n        <div class=\"qlv-label-prop\">\n            <p class=\"qlv-label-prop-name\">&lt;text-style&gt; fontFamily, fontBold, fontItalic<\/p>\n            <p class=\"qlv-label-prop-desc\">Familia tipogr\u00e1fica, peso y estilo.<\/p>\n        <\/div>\n\n        <div class=\"qlv-label-prop\">\n            <p class=\"qlv-label-prop-name\">&lt;text-style&gt; textColor<\/p>\n            <p class=\"qlv-label-prop-desc\">Color de relleno de la etiqueta en formato RGBA de QGIS.<\/p>\n        <\/div>\n\n        <div class=\"qlv-label-prop\">\n            <p class=\"qlv-label-prop-name\">&lt;text-buffer&gt; bufferDraw<\/p>\n            <p class=\"qlv-label-prop-desc\">Indica si se dibuja un halo alrededor del texto de la etiqueta.<\/p>\n        <\/div>\n\n        <div class=\"qlv-label-prop\">\n            <p class=\"qlv-label-prop-name\">&lt;text-buffer&gt; bufferSize + bufferColor<\/p>\n            <p class=\"qlv-label-prop-desc\">Ancho del halo en MM y color del halo.<\/p>\n        <\/div>\n\n    <\/div>\n\n    <hr class=\"qlv-divider\">\n\n    <p class=\"qlv-section-label\">Posicionamiento de etiquetas por geometr\u00eda<\/p>\n    <div class=\"qlv-placement-row\">\n\n        <div class=\"qlv-placement-tile\">\n            <p class=\"qlv-placement-geom\">Puntos<\/p>\n            <span class=\"qlv-placement-mode\">placement: point<\/span>\n            <p class=\"qlv-placement-note\">Etiqueta centrada en la coordenada de la entidad.<\/p>\n        <\/div>\n\n        <div class=\"qlv-placement-tile\">\n            <p class=\"qlv-placement-geom\">L\u00edneas<\/p>\n            <span class=\"qlv-placement-mode\">placement: line<\/span>\n            <p class=\"qlv-placement-note\">La etiqueta sigue autom\u00e1ticamente la orientaci\u00f3n de la l\u00ednea.<\/p>\n        <\/div>\n\n        <div class=\"qlv-placement-tile\">\n            <p class=\"qlv-placement-geom\">Pol\u00edgonos<\/p>\n            <span class=\"qlv-placement-mode\">placement: point<\/span>\n            <p class=\"qlv-placement-note\">Etiqueta colocada en el centroide visual.<\/p>\n        <\/div>\n\n    <\/div>\n\n    <hr class=\"qlv-divider\">\n\n    <p class=\"qlv-section-label\">Conversi\u00f3n de unidades de tama\u00f1o de fuente<\/p>\n    <div class=\"qlv-unit-grid\">\n\n        <div class=\"qlv-unit-header\">Unidad<\/div>\n        <div class=\"qlv-unit-header\">Conversi\u00f3n<\/div>\n        <div class=\"qlv-unit-header\">Modal de edici\u00f3n muestra<\/div>\n\n        <div class=\"qlv-unit-cell\"><code>Point<\/code><\/div>\n        <div class=\"qlv-unit-cell\">\u00d7 1,333 px<\/div>\n        <div class=\"qlv-unit-cell\">Tama\u00f1o de fuente de etiqueta (Point)<\/div>\n\n        <div class=\"qlv-unit-cell\"><code>Pixel<\/code><\/div>\n        <div class=\"qlv-unit-cell\">\u00d7 1 px<\/div>\n        <div class=\"qlv-unit-cell\">Tama\u00f1o de fuente de etiqueta (Pixel)<\/div>\n\n        <div class=\"qlv-unit-cell\"><code>MM<\/code><\/div>\n        <div class=\"qlv-unit-cell\">\u00d7 3,78 px<\/div>\n        <div class=\"qlv-unit-cell\">Tama\u00f1o de fuente de etiqueta (MM)<\/div>\n\n        <div class=\"qlv-unit-cell\"><code>Inch<\/code><\/div>\n        <div class=\"qlv-unit-cell\">\u00d7 96 px<\/div>\n        <div class=\"qlv-unit-cell\">Tama\u00f1o de fuente de etiqueta (Inch)<\/div>\n\n        <div class=\"qlv-unit-cell qlv-unit-warn\"><code>MetersAtScale<\/code> \/ <code>MapUnit<\/code><\/div>\n        <div class=\"qlv-unit-cell qlv-unit-warn\">Por defecto 10 px<\/div>\n        <div class=\"qlv-unit-cell qlv-unit-warn\">\u26a0 aviso mostrado en el modal de edici\u00f3n<\/div>\n\n    <\/div>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Tabla de atributos<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al hacer clic en el icono de tabla de cualquier capa se abre un caj\u00f3n inferior que ocupa aproximadamente un tercio de la pantalla, manteniendo el mapa visible en la parte superior.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large below-entry-meta has-custom-css wp-custom-css-d60c7d6f\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"630\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/table-1024x630.png\" alt=\"\" class=\"wp-image-42\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/table-1024x630.png 1024w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/table-300x185.png 300w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/table-768x472.png 768w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/table-1200x738.png 1200w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/table.png 1325w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las columnas se pueden ordenar de forma ascendente o descendente haciendo clic en su encabezado, y el cuadro de b\u00fasqueda filtra todas las columnas simult\u00e1neamente, mostrando en tiempo real cu\u00e1ntos registros coinciden. Al hacer clic en cualquier fila, el mapa se centra en esa entidad y la resalta brevemente con un doble trazo cian. La vista actual \u2014 con cualquier filtro activo y el orden de clasificaci\u00f3n aplicado \u2014 se puede exportar directamente como archivo CSV.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Map tips<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al pasar el cursor sobre una entidad del mapa se puede mostrar un popup configurado directamente desde el archivo .qlr. Corresponde al valor o expresi\u00f3n establecido en el par\u00e1metro Display Name en QGIS (Propiedades de capa &gt; Visualizaci\u00f3n) al exportar el archivo <code>.qlr<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"825\" height=\"218\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGIS-Display-Name.png\" alt=\"\" class=\"wp-image-44\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGIS-Display-Name.png 825w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGIS-Display-Name-300x79.png 300w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/QGIS-Display-Name-768x203.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El visor soporta tanto referencias simples a campos de atributos mediante la expresi\u00f3n de vista previa de QGIS, como plantillas HTML completas con sustituci\u00f3n de valores de campo. El tooltip se reposiciona autom\u00e1ticamente para mantenerse dentro de los l\u00edmites de la pantalla. Esta funci\u00f3n se activa individualmente por capa desde el panel lateral y est\u00e1 desactivada por defecto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Selector de mapa base<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un bot\u00f3n flotante de capas (parte superior derecha del mapa) permite seleccionar entre seis (6) mapas de fondo. Al hacer clic se abre una cuadr\u00edcula 3\u00d72 con previsualizaciones de teselas en vivo.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"313\" height=\"288\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Basemap-Switch.png\" alt=\"\" class=\"wp-image-148\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Basemap-Switch.png 313w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/Basemap-Switch-300x276.png 300w\" sizes=\"auto, (max-width: 313px) 85vw, 313px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><br>Hay seis mapas base disponibles: OSM, Esri Topo, Esri Streets, Esri Imagery con capa superpuesta de etiquetas de referencia, NatGeo y Carto Voyager. El mapa base activo se resalta con un borde morado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se cierra al hacer clic fuera del panel.<\/p>\n\n\n\n<h2 id=\"ExportQview\" class=\"wp-block-heading\">Exportar paquete de mapa de QGIS Layer Viewer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El bot\u00f3n <strong>\u2193 Export .qview<\/strong> agrupa todas las capas (QLR + GeoJSON + estado editado) en un \u00fanico archivo JSON port\u00e1til con extensi\u00f3n <code>.qview<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un archivo <code>.qview<\/code> es un mapa port\u00e1til aut\u00f3nomo creado por QGIS Layer Viewer. Agrupa en un \u00fanico archivo JSON todo lo necesario para reproducir una sesi\u00f3n de mapa \u2014 la simbolog\u00eda QLR en bruto, los datos completos de entidades y todos los ajustes editados por el usuario \u2014 de modo que el destinatario puede abrirlo solt\u00e1ndolo en cualquier instancia del visor, sin archivos adicionales, sin software GIS y sin conexi\u00f3n a internet.<\/p>\n\n\n\n<ul class=\"wp-block-list lista-indentada has-custom-css wp-custom-css-0950a659\">\n<li>Contenido de cada entrada de capa<\/li>\n\n\n\n<li>XML QLR en bruto \u2014 simbolog\u00eda completa de QGIS<\/li>\n\n\n\n<li>Instant\u00e1nea completa de entidades GeoJSON<\/li>\n\n\n\n<li>Nombre de capa y tama\u00f1o de fuente editados<\/li>\n\n\n\n<li>Orden de apilamiento, opacidad y visibilidad<\/li>\n\n\n\n<li>Ventaja clave \u2014 instant\u00e1nea de servicio en vivo de ArcGIS<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando una capa se carga desde un ArcGIS FeatureServer \u2014 incluso uno que requiri\u00f3 paginar miles de registros \u2014 el conjunto de datos fusionado completo queda embebido en el archivo <code>.qview<\/code> en el momento de la exportaci\u00f3n. El destinatario obtiene una instant\u00e1nea puntual del servicio en vivo sin necesidad de cuenta ArcGIS ni acceso a la red.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Leyenda<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La leyenda se muestra en una secci\u00f3n colapsable en la parte inferior de la barra lateral (colapsada por defecto). Solo se muestran las capas que est\u00e1n visibles.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"424\" height=\"326\" src=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/legend.png\" alt=\"\" class=\"wp-image-46\" srcset=\"https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/legend.png 424w, https:\/\/geo.edesma.org\/blog\/wp-content\/uploads\/2026\/05\/legend-300x231.png 300w\" sizes=\"auto, (max-width: 424px) 85vw, 424px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se actualiza autom\u00e1ticamente cuando se a\u00f1aden, eliminan o activan\/desactivan capas. Los s\u00edmbolos SVG se generan directamente desde las propiedades de s\u00edmbolo analizadas \u2014 no se requiere ning\u00fan servidor de im\u00e1genes.<\/p>\n\n\n\n<h2 id=\"symbology\" class=\"wp-block-heading symbology\">Simbolog\u00eda extra\u00edda del QLR<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando se suelta un archivo <code>.qlr<\/code> en el visor, su XML se analiza y la simbolog\u00eda se traduce a estilos nativos de OpenLayers \u2014 sin necesidad de reconfiguraci\u00f3n manual. El visor lee tres tipos de renderizador (<code>singleSymbol<\/code>, <code>categorizedSymbol<\/code>, <code>graduatedSymbol<\/code>) y gestiona s\u00edmbolos multicapa, donde varias subcapas se apilan dentro de un \u00fanico s\u00edmbolo de QGIS para producir efectos como carreteras con carcasa o rellenos con contorno.<\/p>\n\n\n\n<!-- QGIS Layer Viewer \u2014 By Geometry Type block -->\n\n<style>\n.qlv-block {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    background: #ffffff;\n    border: 1px solid #e5e7eb;\n    border-radius: 12px;\n    padding: 20px 24px;\n    max-width: 620px;\n    box-sizing: border-box;\n}\n.qlv-block-header {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 16px;\n}\n.qlv-badge {\n    background: #f3f4f6;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    padding: 5px 10px;\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 13px;\n    color: #111827;\n    font-weight: 600;\n}\n.qlv-block-title {\n    font-size: 15px;\n    font-weight: 600;\n    color: #111827;\n    margin: 0;\n}\n.qlv-section-label {\n    font-size: 11px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .07em;\n    color: #9ca3af;\n    margin: 0 0 12px;\n}\n.qlv-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 10px;\n    margin-bottom: 0;\n}\n@media (max-width: 540px) {\n    .qlv-grid { grid-template-columns: 1fr; }\n}\n.qlv-tile {\n    background: #f9fafb;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    padding: 12px 14px;\n}\n.qlv-tile-header {\n    display: flex;\n    align-items: center;\n    gap: 7px;\n    font-size: 12px;\n    font-weight: 600;\n    color: #111827;\n    margin-bottom: 8px;\n}\n.qlv-dot-point {\n    display: inline-block;\n    width: 10px; height: 10px;\n    border-radius: 50%;\n    background: #378ADD;\n    flex-shrink: 0;\n}\n.qlv-dot-line {\n    display: inline-block;\n    width: 16px; height: 3px;\n    background: #1D9E75;\n    border-radius: 2px;\n    flex-shrink: 0;\n}\n.qlv-dot-polygon {\n    display: inline-block;\n    width: 12px; height: 10px;\n    background: #EF9F27;\n    border-radius: 2px;\n    flex-shrink: 0;\n}\n.qlv-tile-body {\n    font-size: 12px;\n    color: #6b7280;\n    line-height: 1.65;\n    margin: 0;\n}\n.qlv-tile-body code {\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 11px;\n    background: #efefef;\n    padding: 1px 4px;\n    border-radius: 3px;\n    color: #374151;\n}\n<\/style>\n\n<div class=\"qlv-block\">\n\n    <div class=\"qlv-block-header\">\n        <span class=\"qlv-badge\">.qlr<\/span>\n        <p class=\"qlv-block-title\">Simbolog\u00eda por tipo de geometr\u00eda<\/p>\n    <\/div>\n\n    <p class=\"qlv-section-label\">Clases de s\u00edmbolo soportadas<\/p>\n\n    <div class=\"qlv-grid\">\n\n        <div class=\"qlv-tile\">\n            <div class=\"qlv-tile-header\">\n                <span class=\"qlv-dot-point\"><\/span> Puntos\n            <\/div>\n            <p class=\"qlv-tile-body\">\n                SimpleMarker \u2014 11 formas incluyendo c\u00edrculo, cuadrado, estrella, cruz, diamante<br><br>\n                SvgMarker \u2014 embebido en base64 o alojado en servidor, con sustituci\u00f3n de color <code>param()<\/code>\n            <\/p>\n        <\/div>\n\n        <div class=\"qlv-tile\">\n            <div class=\"qlv-tile-header\">\n                <span class=\"qlv-dot-line\"><\/span> L\u00edneas\n            <\/div>\n            <p class=\"qlv-tile-body\">\n                SimpleLine \u2014 s\u00f3lida, punto, gui\u00f3n, gui\u00f3n-punto, gui\u00f3n-punto-punto<br><br>\n                Patrones de guiones personalizados<br><br>\n                Resplandor exterior (effectStack a nivel de capa de s\u00edmbolo)\n            <\/p>\n        <\/div>\n\n        <div class=\"qlv-tile\">\n            <div class=\"qlv-tile-header\">\n                <span class=\"qlv-dot-polygon\"><\/span> Pol\u00edgonos\n            <\/div>\n            <p class=\"qlv-tile-body\">\n                SimpleFill \u2014 relleno + contorno<br><br>\n                SimpleLine \u2014 modo solo contorno<br><br>\n                Resplandor exterior (effectStack a nivel de renderizador)\n            <\/p>\n        <\/div>\n\n    <\/div>\n\n<\/div>\n\n\n\n<!-- QGIS Layer Viewer \u2014 Layer-level properties block -->\n\n<style>\n.qlv-props {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    background: #ffffff;\n    border: 1px solid #e5e7eb;\n    border-radius: 12px;\n    padding: 20px 24px;\n    max-width: 620px;\n    box-sizing: border-box;\n}\n.qlv-props-header {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 16px;\n}\n.qlv-props-badge {\n    background: #f3f4f6;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    padding: 5px 10px;\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 13px;\n    color: #111827;\n    font-weight: 600;\n}\n.qlv-props-title {\n    font-size: 15px;\n    font-weight: 600;\n    color: #111827;\n    margin: 0;\n}\n.qlv-props-label {\n    font-size: 11px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: .07em;\n    color: #9ca3af;\n    margin: 0 0 12px;\n}\n.qlv-props-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 10px;\n}\n@media (max-width: 540px) {\n    .qlv-props-grid { grid-template-columns: 1fr 1fr; }\n}\n@media (max-width: 360px) {\n    .qlv-props-grid { grid-template-columns: 1fr; }\n}\n.qlv-prop-tile {\n    background: #f9fafb;\n    border: 1px solid #e5e7eb;\n    border-radius: 8px;\n    padding: 12px 14px;\n    display: flex;\n    gap: 10px;\n    align-items: flex-start;\n}\n.qlv-prop-icon {\n    width: 30px;\n    height: 30px;\n    border-radius: 8px;\n    background: #eff6ff;\n    border: 1px solid #dbeafe;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n}\n.qlv-prop-icon svg {\n    width: 16px;\n    height: 16px;\n    stroke: #2563eb;\n    fill: none;\n    stroke-width: 1.8;\n    stroke-linecap: round;\n    stroke-linejoin: round;\n}\n.qlv-prop-text {}\n.qlv-prop-name {\n    font-size: 12px;\n    font-weight: 600;\n    color: #111827;\n    margin: 0 0 3px;\n}\n.qlv-prop-desc {\n    font-size: 11px;\n    color: #6b7280;\n    line-height: 1.5;\n    margin: 0;\n}\n.qlv-prop-desc code {\n    font-family: \"Courier New\", Courier, monospace;\n    font-size: 10px;\n    background: #efefef;\n    padding: 1px 4px;\n    border-radius: 3px;\n    color: #374151;\n}\n<\/style>\n\n<div class=\"qlv-props\">\n\n    <div class=\"qlv-props-header\">\n        <span class=\"qlv-props-badge\">.qlr<\/span>\n        <p class=\"qlv-props-title\">Propiedades de capa extra\u00eddas<\/p>\n    <\/div>\n\n    <p class=\"qlv-props-label\">Le\u00eddas directamente del archivo QLR<\/p>\n\n    <div class=\"qlv-props-grid\">\n\n        <div class=\"qlv-prop-tile\">\n            <div class=\"qlv-prop-icon\">\n                <svg viewBox=\"0 0 24 24\">\n                    <circle cx=\"12\" cy=\"12\" r=\"3\"\/>\n                    <path d=\"M12 3v2M12 19v2M3 12h2M19 12h2\"\/>\n                    <path d=\"M5.6 5.6l1.4 1.4M16.9 16.9l1.5 1.5M5.6 18.4l1.4-1.4M16.9 7.1l1.5-1.5\"\/>\n                <\/svg>\n            <\/div>\n            <div class=\"qlv-prop-text\">\n                <p class=\"qlv-prop-name\">Opacidad de capa<\/p>\n                <p class=\"qlv-prop-desc\">De <code>&lt;layerOpacity&gt;<\/code>. Aplicada a la capa del mapa y editable mediante el control deslizante de opacidad.<\/p>\n            <\/div>\n        <\/div>\n\n        <div class=\"qlv-prop-tile\">\n            <div class=\"qlv-prop-icon\">\n                <svg viewBox=\"0 0 24 24\">\n                    <path d=\"M12 20h9M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z\"\/>\n                <\/svg>\n            <\/div>\n            <div class=\"qlv-prop-text\">\n                <p class=\"qlv-prop-name\">Nombre de capa<\/p>\n                <p class=\"qlv-prop-desc\">De <code>&lt;layername&gt;<\/code>. Se muestra en el panel de capas y en la leyenda. Editable mediante el modal de edici\u00f3n.<\/p>\n            <\/div>\n        <\/div>\n\n        <div class=\"qlv-prop-tile\">\n            <div class=\"qlv-prop-icon\">\n                <svg viewBox=\"0 0 24 24\">\n                    <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/>\n                    <polyline points=\"14 2 14 8 20 8\"\/>\n                    <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/>\n                    <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/>\n                    <polyline points=\"10 9 9 9 8 9\"\/>\n                <\/svg>\n            <\/div>\n            <div class=\"qlv-prop-text\">\n                <p class=\"qlv-prop-name\">Descripci\u00f3n<\/p>\n                <p class=\"qlv-prop-desc\">De <code>&lt;abstract&gt;<\/code>. Se muestra en la fila expandible de la capa cuando est\u00e1 disponible.<\/p>\n            <\/div>\n        <\/div>\n\n    <\/div>\n\n<\/div>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>C\u00f3mo se simulan los efectos de resplandor<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">OpenLayers no dispone de un primitivo de resplandor nativo, por lo que el resplandor exterior se aproxima apilando cinco trazos de ancho creciente y opacidad decreciente por debajo del trazo principal del s\u00edmbolo. La extensi\u00f3n, el desenfoque y el color se leen directamente del <code>effectStack<\/code> del QLR. En las l\u00edneas el resplandor se sit\u00faa en la capa de s\u00edmbolo; en los pol\u00edgonos se almacena un nivel m\u00e1s arriba, en el propio renderizador \u2014 ambos casos est\u00e1n contemplados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Incorporaciones futuras<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las siguientes son, entre otras, algunas de las incorporaciones contempladas para el futuro.<\/p>\n\n\n\n<ul class=\"wp-block-list lista-indentada has-custom-css wp-custom-css-afdb8e25\">\n<li>Etiquetas avanzadas: etiquetado basado en reglas, evaluaci\u00f3n de expresiones de QGIS, evitaci\u00f3n de colisiones de etiquetas.<\/li>\n\n\n\n<li>Simbolog\u00eda adicional: MarkerLine, LinePatternFill, PointPatternFill, FontMarker.<\/li>\n\n\n\n<li>WFS y otras fuentes de servicios OGC en la fuente de datos del QLR.<\/li>\n\n\n\n<li>Imprimir \/ exportar el mapa como imagen o PDF.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-jetpack-related-posts\">\n<h2 class=\"wp-block-heading has-medium-gray-color has-text-color has-link-color wp-elements-dd37eb683ed33995c564ab9feadacaca\">Posts Relacionados<\/h2>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>QGIS Layer Viewer es un visor de mapas web ligero y sin servidor que lee archivos de definici\u00f3n de capa de QGIS (.qlr) y datos GeoJSON directamente en el navegador, renderiz\u00e1ndolos en un mapa OpenLayers con una simbolog\u00eda que se aproxima fielmente al proyecto QGIS original \u2014 incluyendo simbolog\u00eda categorizada y graduada, patrones de guiones, &hellip; <a href=\"https:\/\/geo.edesma.org\/blog\/?p=62\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;QGIS Layer Viewer&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wikipediapreview_detectlinks":true,"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,6,5],"tags":[9,10,8,7],"class_list":["post-62","post","type-post","status-publish","format-standard","hentry","category-aplicaciones","category-openlayers","category-qgis","tag-qlr","tag-geojson","tag-openlayers","tag-qgis"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/62","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=62"}],"version-history":[{"count":22,"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/62\/revisions"}],"predecessor-version":[{"id":186,"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/62\/revisions\/186"}],"wp:attachment":[{"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geo.edesma.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}