2.2. Controles básicos y opciones - Desarrollos-IDEE/API-IDEE GitHub Wiki

Controles básicos

La API dispone de una serie de controles básicos, que se especifican mediante el parámetro 'controls' en el constructor del mapa, o llamando al método .addControls del mismo. En ambos casos pueden especificarse como cadenas o como objetos:

mapajs = IDEE.map({
     container:"map",
     controls:['scale','location','backgroundlayers']
});
// Añadir controles
mapajs.addControls(['scale','location','backgroundlayers']);

mapajs.addControls([
    new IDEE.control.Rotate(),
    new IDEE.control.Panzoombar()]);

// Obtener array de controles del mapa
const controles = mapajs.getControls();
// Filtrar controles por nombre
const controlTOC = mapajs.getControls({name:'layerswitcher'})[0];

// Eliminar controles
const scale = mapjs.getControls('scale')[0];
mapajs.removeControls(scale)

Controles Básicos

Estos son los controles básicos que incluye la API (http://componentes.idee.es/api-idee/api/actions/controls):

  • panzoombar: Añade una barra de desplazamiento (zoom) para acercarse/alejarse del mapa. Este control no tiene parámetros.

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['panzoombar'],
            });
    
  • panzoom: Añade botones de '+' y '-' para acercarse y alejarse del mapa. Este control no tiene parámetros.

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['panzoom'],
            });
    
  • scale: Añade la escala numérica. Parámetro exactScale: Indica si se quiere obtener la escala exacta (true) o redondeada (false).

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['scale*true'],
            });
    
  • scaleline: Añade la escala gráfica. Este control no tiene parámetros.

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['scaleline'],
            });
    
  • location: Añade un botón de centrado del mapa en la ubicación del usuario. Parámetros: se le puede indicar si se desea posicionamiento continuo (tracking, por defecto true) y alta precisión (highAccuracy, por defecto false). El orden de los parámetros es: controls: ['location*tracking*highAccuracy']

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['location*true*false'],
            });
    
  • rotate: Añade la funcionalidad girar el mapa para que el Norte quede situado arriba. Este control no tiene parámetros.

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['rotate'],
            });
    
  • backgroundlayers: Añade selector de capas base. Este control no tiene parámetros.

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['backgroundlayers'],
            });
    
  • getfeatureinfo: Añade la herramienta de consulta de información sobre capas WMS y WMTS a través de su operación GetFeatureInfo. Por defecto, espera HTML como formato de respuesta. Otros formatos soportados son 'gml' y 'plain'. Parámetro activated: Indica si está activado o desactivado. Por defecto, true. Importante: Este parámetro es recomendable dejarlo con valor true ya que al ser un control que no posee interfaz un usuario no tendría posibilidad de activarlo en caso de tener como valor false.

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['getfeatureinfo'],
            });
    

    Admite también un área de influencia en píxeles de modo opcional:

    mapajs.addControls(new IDEE.control.GetFeatureInfo(
     'gml', 
     {buffer: 1000}));
  • attributions: Habilita la visualización de atribuciones de las capas del mapa.

            const map = IDEE.map({
                container: 'mapjs',
                controls: ['attributions'],
            });

    Se puede añadir una atribución por defecto.

    const map = IDEE.map({
                container: 'mapjs',
                controls: ['attributions*<p>Atribución por defecto</p>'],
            });

Admite la creación por medio del método mapa.createAttribution, esto permite crear multitud de atribuciones por defecto, definir la posición, entre otras opciones reflejadas en el JSDoc:

mapa.createAttribution({
  collectionsAttributions: ['<p>Prueba Attribution String 1</p>', {
    name: 'Prueba Nombre',
    description: 'Prueba Description',
    url: 'https://www.ign.es',
  }],
});

Dependencias

Para que los controles funcionen correctamente es necesario importar las siguientes dependencias en el documento html:

  • apiign.ol.min.css
  • apiign.ol.min.js
  • configuration.js
<link href="https://componentes.idee.es/api-idee/assets/css/apiign.ol.min.css" rel="stylesheet" />
<script type="text/javascript" src="https://componentes.idee.es/api-idee/js/apiign.ol.min.js"></script>
<script type="text/javascript" src="https://componentes.idee.es/api-idee/js/configuration.js"></script>

Activación/desactivación por código

Los controles también pueden activarse o desactivarse por código:

const ctrlLocation = mapajs.getControls({name:'location'})[0];
ctrlLocation.activate(); //para activarlo
ctrlLocation.deactivate(); //para desactivarlo

Opciones

Opciones de personalización

El API implementa por defecto una serie de propiedades que permiten personalizar el mapa a visualizar. Estas opciones son:

Parámetro Descripción
zoom Nivel de zoom del mapa. Disponible para CesiumJS la opción de indicar el zoom en metros ('125614900*m').
maxZoom Zoom máximo aplicable. Disponible para CesiumJS la opción de indicar el zoom en metros ('125614900*m').
minZoom Zoom mínimo aplicable. Disponible para CesiumJS la opción de indicar el zoom en metros ('125614900*m').
bbox Encuadre de visualización del mapa.
maxExtent Máxima extensión permitida; a diferencia del bbox, no se dibujará el mapa fuera de los límites establecidos. En CesiumJS recortará la vista.
projection Proyección de visualización del mapa. No disponible para CesiumJS.
center Punto central del mapa.
label Popup con el texto indicado en una coordenada especificada o, en su defecto, en el centro (center) establecido del mapa.
resolutions Array con las resoluciones asociadas a cada nivel de zoom del mapa. No disponible para CesiumJS.
viewExtent Array con las coordenadas para restringir hasta donde nos podemos desplazar en el mapa. No disponible para CesiumJS. En Cesium recortará la vista.
zoomConstrains ** Booleano para permitir o no niveles de zooms intermedios.
bgColorContainer Color para cambiar el fondo del mapa (hexadecimal, cadena, rgb, rgba, hsl y hsla).

Opciones de personalización para CesiumJS

Parámetro Descripción
verticalExaggeration Exageración vertical de la escena. Por defecto, 1 (no se aplica). Solo disponible para CesiumJS.
LOD Nivel de preción para la resolución de renderizado. Si no se indica se utiliza la resolución recomendada del navegador. Solo disponible para CesiumJS.
animation Creará el widget de animación.
fullscreenButton Creará el botón de pantalla completa.
vrButton Creará el botón para realidad virtual (VR).
homeButton Creará el botón de inicio.
selectionIndicator Creará el indicador de selección.
ellipsoid El elipsoide predeterminado.
terrainProvider El proveedor de terreno que se usará.
terrain Un objeto de terreno que maneja proveedores de terreno de forma asíncrona.
skyBox La caja celeste utilizada para renderizar las estrellas.
skyAtmosphere Atmósfera azul y el resplandor alrededor del horizonte de la Tierra.
fullscreenElement El elemento o identificador que se colocará en modo de pantalla completa.
useBrowserRecommendedResolution Si es verdadero, renderiza a la resolución recomendada por el navegador.
contextOptions Propiedades de creación de Context y WebGL pasadas a la escena.
sceneMode El modo de escena inicial.
globe El globo que se usará en la escena.
orderIndependentTranslucency Si es verdadero y es compatible, utiliza translucidez independiente del orden.
creditContainer El elemento DOM o ID que contendrá el CreditDisplay.
creditViewport El elemento DOM o ID donde aparecerá el crédito emergente.
dataSources La colección de fuentes de datos visualizadas por el widget.
shadows Determina si las sombras son proyectadas por fuentes de luz.
terrainShadows Determina si el terreno proyecta o recibe sombras.
requestRenderMode Si es verdadero, solo se renderizará un cuadro cuando sea necesario según los cambios en la escena.
maximumRenderTimeChange Define el cambio máximo permitido en el tiempo de simulación antes de un nuevo renderizado.
depthPlaneEllipsoidOffset Ajusta el plano de profundidad para evitar artefactos de renderizado por debajo del nivel del elipsoide.
msaaSamples Controla la cantidad de muestreo múltiple para antialiasing. Los valores típicos son 2, 4 u 8.

Cada uno de estos parámetros puede especificarse directamente en el constructor o bien a través de su método setter correspondiente, al igual que puede obtenerse su valor actual con su método getter

En la construcción del objeto Mapa

const mapajs = IDEE.map({
  container: "map",
  center: {
    x: 311000,
    y: 4040000,
    draw: true
  },
  projection: "EPSG:25830*m",
  zoom: 9
});

label

// añade un label en las coordenadas indicadas
mapajs.addLabel("texto <b>con html</b>",[211000, 4040000]);

//sin especificar coordenada, se añade en el centro establecido
mapajs.addLabel("texto <b>con html</b>"); 

//para eliminarla
mapajs.removeLabel();
const label = mapajs.getLabel();

resolutions

Las resoluciones del mapa establecen las escalas a las que se visualizan las capas en cada nivel de zoom. Si fijamos manualmente las resoluciones, hay que tener en cuenta dos factores:

  • Estaremos indirectamente estableciendo el número de niveles de zoom.
  • Si usamos capas cacheadas compatibles con resoluciones específicas, pueden no mostrarse si no casan con las que establezcamos

El siguiente ejemplo establece resoluciones explícitas para el mapa:

// Dos resoluciones = dos niveles de zoom
mapajs.setResolutions([490.4640841686878, 296.4735539465016]);  

// Podemos consultar las resoluciones del mapa
console.log(mapajs.getResolutions());

// También podemos definir las resoluciones en el constructor
const mapajs = IDEE.map({
     container: 'map',
     resolutions: [490.4640841686878, 296.4735539465016, 179.21101876124024],
     projection : 'EPSG:25830*m'
});

projection

Para ver las proyecciones disponibles podemos hacer uso de IDEE.impl.ol.js.projections.getSupportedProjs(), estas proyecciones se definen internamiente en proj4.

Para añadir nuevas proyecciones podemos usar IDEE.impl.ol.js.projections.addProjections, por ejemplo:

IDEE.impl.ol.js.projections.addProjections([{
    "def": "+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs",
    "extent": [
        166021.4431,
        0,
        833978.5569,
        9329005.1825
    ],
    "codes": [
        "EPSG:1234",
        "urn:ogc:def:crs:EPSG::32629",
        "http://www.opengis.net/gml/srs/epsg.xml#32629"
    ],
    "units": "m",
    "datum": "WGS 84",
    "proj": "UTM 29 N"
}])

Para ver si se ha añadido correctamente, proj4.defs["EPSG:1234"]

Getters y Setters

Parámetro Getters y Setters
zoom mapajs.setZoom(9);
const zoom = mapajs.getZoom();
maxZoom mapajs.setZoom(9);
const zoom = mapajs.getZoom();
minZoom mapajs.setZoom(9);
const zoom = mapajs.getZoom();
bbox mapajs.setBbox([323020,4126873,374759,4152013]);
const bbox = mapajs.getBbox();
maxExtent mapajs.setMaxExtent ([323020,4126873,374759,4152013]);
const maxExtent = mapajs.getMaxExtent();
projection ⚠️ Hay que tener en cuenta que si se cambia el sistema de referencia del mapa,
las coordenadas que usemos a partir de ese momento deben ser las del nuevo sistema.
mapajs.setProjection ("EPSG:4326*d");
const projection = mapajs.getProjection();
center 💡 El parámetro draw indica si queremos añadir una chincheta en el punto central establecido
mapajs.setCenter({x:211000, y:4040000, draw: true});
const center mapajs.getCenter();
zoomConstrains mapajs.setZoomConstrains(true);
const zoom = mapajs.getZoomConstrains();

vendorOptions

Parámetros para la vista del mapa de la librería base. Parámetros disponibles:

  • constrainRotation: Controla si la rotación del mapa está restringida.
  • enableRotation: Indica si la rotación del mapa está habilitada. Si se establece en false, el mapa no se puede rotar.
  • extent: Define la extensión geográfica (coordenadas [minX, minY, maxX, maxY]) en la que el mapa puede moverse.
  • smoothExtentConstraint: Determina si las restricciones de la extensión se aplican de manera suave, permitiendo un ligero movimiento más allá del límite antes de rebotar al área permitida.
  • maxZoom: Especifica el nivel máximo de zoom permitido en el mapa.
  • minZoom: Especifica el nivel mínimo de zoom permitido en el mapa.
  • multiWorld: Permite que el mapa se repita horizontalmente en proyecciones que lo soporten, como Mercator. Si está en false, el mapa no se "repetirá".
  • smoothResolutionConstraint: Controla si el cambio entre niveles de zoom se realiza suavemente (permitiendo interpolación) o bruscamente (saltando entre niveles fijos).
  • showFullExtent: Indica si el mapa debe mostrar la extensión completa definida en el parámetro extent.
  • rotation: Especifica el ángulo inicial de rotación del mapa (en radianes) al cargarlo.
  • zoomFactor: Define el factor de cambio entre niveles de zoom.
const map = new IDEE.map({
  container: "map"
}, {}, {
  rotation: 0.5
});

Ejemplos:

⚠️ **GitHub.com Fallback** ⚠️