2.2. Controles básicos y opciones - Desarrollos-IDEE/API-IDEE GitHub Wiki
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)
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',
}],
});
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>
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 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
const mapajs = IDEE.map({
container: "map",
center: {
x: 311000,
y: 4040000,
draw: true
},
projection: "EPSG:25830*m",
zoom: 9
});
// 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();
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'
});
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"]
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 | 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 establecidomapajs.setCenter({x:211000, y:4040000, draw: true}); const center mapajs.getCenter();
|
zoomConstrains |
mapajs.setZoomConstrains(true); const zoom = mapajs.getZoomConstrains();
|
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
});