OdooWiki OCA HUB

Mapbox Widget

web_widget_mapbox folder_open OCA/geospatial open_in_new
Hidden Licencia: LGPL-3

Este módulo añade un widget de mapa de Mapbox para vista de formulario para campos JSON.

Declara un campo fields.Json en cualquier modelo y establece widget="mapbox" en el arch del formulario. El widget representa marcadores a partir de una carga útil JSON, admite estilos de mapa y satélite, zoom, desplazamiento, inclinación y pantalla completa, y puede abrir un formulario emergente cuando un marcador está marcado como clicable.

Los marcadores pueden usar iconos opcionales de Font Awesome, tamaños y colores HEX. Cuando varios marcadores comparten una ubicación, los elementos anteriores de la carga útil se dibujan encima. El control Mapa / Satélite recuerda la última elección en el navegador y la aplica a todos los widgets mapbox de ese origen.

Mapbox GL JS se carga desde el CDN de Mapbox en tiempo de ejecución y no está incluido en este addon.

Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.

auto_awesome Qué hace este módulo

Generado por IA a partir del código · Odoo 18.0

Añade un widget de mapa de Mapbox para campos JSON en formularios de Odoo, mostrando marcadores a partir de datos JSON con estilos de mapa/satélite, zoom, desplazamiento, inclinación y pantalla completa. Se configura un token de acceso de Mapbox en Ajustes generales.

Este módulo proporciona a los desarrolladores un nuevo widget de formulario llamado "Mapbox Map" que se puede colocar en cualquier campo JSON. Cuando se abre un formulario, el widget lee el valor JSON y dibuja marcadores en un mapa interactivo de Mapbox.

  • Los marcadores provienen del payload JSON y solo se dibujan cuando la latitud y la longitud son válidas. Los marcadores pueden mostrar un popup de etiqueta, un icono de Font Awesome, un tamaño personalizado y un color HEX.
  • Si un marcador está marcado como clicable con un modelo de registro y un id, al hacer clic en él se abre ese registro en un formulario emergente. Los marcadores marcados como editables se pueden arrastrar cuando el campo no es de solo lectura; la nueva posición se escribe de nuevo en el JSON bajo una lista "updated".
  • Se añade un conmutador Mapa / Satélite al mapa. La última elección se recuerda en el navegador y se aplica a todos los widgets de mapa del mismo sitio.
  • El mapa admite controles de zoom, desplazamiento, inclinación y pantalla completa, y estos se pueden desactivar por payload. El centro, el zoom y la inclinación predeterminados también se pueden establecer en el JSON.
  • Si no se configura ningún token de Mapbox, o la biblioteca de Mapbox no se puede cargar desde el CDN, se muestra un mensaje de advertencia en lugar del mapa.

El módulo extiende ir.http para exponer el token en la sesión para los usuarios internos, y añade un campo "Mapbox Token" a res.config.settings en General Settings, almacenado como un parámetro del sistema.

Depende de

webbase_setup

Lo necesitan otros módulos

Modelos y campos (2)
  • ir.http · amplía un modelo existente
  • res.config.settings · amplía un modelo existentemapbox_token

Texto generado por IA (DeepSeek) al leer el código de la versión 18.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub

Disponibilidad por versión

Revisado: 2026-11-03
Confirmado (verificado en repositorio y rama) Estimado (sin verificar) Sin información

Estado de confirmación: 1 confirmada, 8 sin información de 9 versiones.

terminal Instalación y uso

Documentación de OCA · Odoo 18.0
  • Crea una cuenta de Mapbox y un token público (pk.) en .
  • Abre Settings → General Settings y busca Mapbox Token en Integrations.
  • Pega el token público y guarda. Los formularios del backend que usan widget="mapbox" reciben entonces el token a través de la sesión del usuario.
  • El navegador debe poder alcanzar api.mapbox.com (Mapbox GL JS, estilos y teselas).

El token almacenado aquí es un token público de Mapbox. Sigue siendo una credencial: restringe quién puede cambiar Settings y no lo trates como datos anónimos. Este módulo no lee ni escribe el token web_map de Enterprise (web_map.token_map_box / map_box_token).

Añade un campo JSON en el modelo que deba mostrar un mapa, luego usa el widget en la vista de formulario:

<field name="my_map" widget="mapbox"/>

El valor del campo debe ser un objeto JSON. null, false, o un valor que no sea objeto muestran un marcador de posición en lugar de un mapa. Las claves extra desconocidas se conservan cuando el widget escribe.

El contenedor del mapa ocupa todo el ancho del campo y 400px de alto. Un token de Mapbox ausente, una carga fallida del CDN, o datos vacíos / que no sean objeto muestran cada uno un marcador de posición traducido y no construyen un mapa.

Payload

{
  "elements": [],
  "style": {
    "map": "mapbox://styles/mapbox/streets-v12",
    "satellite": "mapbox://styles/mapbox/satellite-streets-v12"
  },
  "default_center": {"lat": 52.37, "lon": 4.89},
  "default_zoom": 12,
  "allow_zoom": true,
  "allow_pan": true,
  "allow_fullscreen": true,
  "default_pitch": 0,
  "allow_pitch": true,
  "updated": []
}

| Key | Type | Default if omitted | |-----|------|-------------------| | elements | array of marker objects | [] | | style.map | Mapbox style URL | mapbox://styles/mapbox/streets-v12 | | style.satellite | Mapbox style URL | mapbox://styles/mapbox/satellite-streets-v12 | | default_center | {lat, lon} | first valid element, else {"lat": 0, "lon": 0} | | default_zoom | number | 12 | | allow_zoom | bool | true | | allow_pan | bool | true | | allow_fullscreen | bool | true (Mapbox fullscreen control) | | default_pitch | number | 0, clamped to [0, 85] | | allow_pitch | bool | true | | updated | array | []; written by the widget after a drag |

El mapa no ajusta los límites. Cuando default_center es un par {lat, lon} válido se usa incluso si existen marcadores. De lo contrario, la cámara se centra en el primer elemento válido.

Solo URLs de estilo clásico de Mapbox — no Mapbox Standard. El estilo inicial es style.map, a menos que el navegador ya almacene una preferencia de Satellite (ver abajo).

Preferencia Map / Satellite

El control Map / Satellite escribe la última elección en el almacenamiento del navegador (web_widget_mapbox.style: map o satellite) y la aplica a cada widget mapbox en este origen, incluidos los mapas que ya están abiertos. Los mapas nuevos comienzan con esa elección. Un valor inválido o ausente recurre a Map. La preferencia sobrevive a las recargas de página en el mismo origen.

Cambiar el estilo mantiene el pitch actual.

Markers

| Key | Type | Notes | |-----|------|-------| | lat / lon | number | required for a visible marker; lat in [-90, 90], lon in [-180, 180] | | label | string | optional; Mapbox popup when a form is not opened | | rec_model | string | model to open on click | | rec_id | int | positive id of rec_model | | clickable | bool | default false; with rec_model and rec_id opens a popup form | | icon | string | Font Awesome 4.7 name, with or without the fa- prefix | | size | int | optional size in pixels of the custom icon element; ignored when icon is omitted | | color | string | optional HEX #RGB or #RRGGBB; tints the default Mapbox pin or the Font Awesome icon | | editable | bool | default false; when true and the field is writable, the marker can be dragged | | index | int | only on updated items; 0-based index in elements |

Las coordenadas inválidas se omiten. Cada elemento válido se dibuja como un marcador igual. Cuando varios marcadores comparten una ubicación, los elementos anteriores en elements se dibujan encima (por lo que el orden de la lista controla qué pin recibe los clics). Un color inválido u omitido deja el color de pin predeterminado de Mapbox, o el color heredado del icono.

Un clic en un marcador abre un formulario emergente (FormViewDialog) solo cuando clickable es true y rec_model es una cadena no vacía y rec_id es un entero positivo. Si esa tripleta está incompleta, el formulario no se abre (el popup de etiqueta se usa en su lugar cuando label está establecido). Un clic que sigue a un arrastre no abre el formulario. Si el mapa está en pantalla completa, el clic sale primero de pantalla completa para que el formulario sea visible, luego el mapa se redimensiona al contenedor en la página.

Drag y updated

Arrastrar no reescribe elements. Al finalizar el arrastre, el widget copia ese elemento, establece lat / lon desde el marcador, establece index a la posición de origen, y lo inserta o actualiza en la raíz updated. Las claves extra del elemento (incluidas clickable, rec_model, rec_id, y color) se copian en el elemento updated.

El arrastre se habilita solo cuando el campo no es de solo lectura, editable es true, y las coordenadas son válidas.

Actualizaciones del payload

Cuando el valor del campo cambia (por ejemplo, un JSON computado que se recalcula):

  • Los cambios en elements (u otros datos de marcador) reconstruyen solo los marcadores. La cámara no se restablece.
  • Los cambios en las claves de cámara (default_center, default_zoom, default_pitch), las URLs de estilo, o allow_zoom / allow_pan / allow_pitch / allow_fullscreen recrean el mapa para que se aplique la nueva configuración.
  • Cambiar a otro registro siempre recrea el mapa para el payload de ese registro.

JSON computado no almacenado

La visualización funciona en un campo JSON computado que no está almacenado. Odoo establece por defecto store=False y readonly=True a menos que se establezca un inverse, por lo que el mapa aún se renderiza cuando el campo está en la vista.

updated se persiste solo cuando el campo es escribible (almacenado, o computado con un inverse / readonly=False). No establezcas store=True a menos que el módulo consumidor necesite esas escrituras.

Ejemplo de un campo computado no almacenado (consumidor típico; no añadido por este addon):

map_data = fields.Json(compute="_compute_map_data")

def _compute_map_data(self):
    for rec in self:
        rec.map_data = {
            "elements": [...],
            "default_center": {
                "lat": rec.partner_latitude,
                "lon": rec.partner_longitude,
            },
            "default_zoom": 12,
        }

Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación.

info

Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.