Primeros pasos
Meratyn es la plataforma SIG ligera y cloud-native de Meratyn. Actualmente se desarrolla y se despliega localmente; este repositorio no publica ninguna aplicación alojada oficial ni versión en un almacén de paquetes.
Esta página le ayuda a empezar a usar Meratyn. Si desea ejecutarlo desde el código fuente con fines de desarrollo, vaya directamente a Ejecutar desde el código fuente más abajo.
Uso de Meratyn
Elija la opción que mejor se ajuste a su forma de trabajar. La misma aplicación se distribuye en cada formato, de modo que los proyectos y los archivos .meratyn.json se mueven entre ellos.
En un navegador
Ejecute bun run dev y abra https://mappview.mapptech.com.co. La compilación para navegador
conserva los datos locales en la sesión del navegador y procesa en el cliente los
flujos de trabajo compatibles.
Instrucciones de compilación local{ .md-button .md-button—primary }
Puede cargar datos vectoriales seleccionados en el navegador y admitidos por DuckDB-WASM Spatial, arrastrar rásteres GeoTIFF/COG sobre el mapa, añadir servicios y conjuntos de datos basados en URL (XYZ, WMS, GeoJSON, teselas vectoriales, COG, ArcGIS, FlatGeobuf, PMTiles, Zarr, LiDAR y Gaussian splats), dar estilo a las capas, probar plugins y abrir o guardar proyectos con un selector o una descarga del navegador. Los diálogos nativos y las rutas recordadas, los MBTiles locales y la lectura local de archivos ráster necesitan la aplicación de escritorio.
En el escritorio
La aplicación de escritorio añade diálogos nativos con rutas recordadas, MBTiles locales y lectura local de archivos ráster. Abrir y guardar proyectos también funciona en el navegador mediante un selector y una descarga. Ejecute el escritorio localmente con bun run tauri:dev.
Descargar la aplicación de escritorio{ .md-button .md-button—primary }
En Jupyter
El paquete Python meratyn incrusta la aplicación completa de Meratyn en un notebook de Jupyter y controla el mapa mediante una API ampliada al estilo leafmap que se sincroniza en ambos sentidos, de modo que las ediciones hechas en la interfaz se pueden leer de vuelta desde Python.
pip install -e ./python
El paquete se instala desde este checkout; el repositorio no publica ningún paquete en
PyPI ni en conda. Hay extras opcionales para las utilidades respaldadas por GeoPandas
disponibles con pip install "meratyn[all]".
Consulte la referencia del Paquete Python para empezar.
En Android
Meratyn se distribuye también como aplicación Android nativa construida a partir del mismo código base, con una disposición táctil responsiva para teléfonos. Consulte Android para los detalles de instalación.
Ejecutar desde el código fuente
Esta sección está dirigida a desarrolladores que quieren clonar Meratyn y ejecutarlo desde el código fuente localmente con fines de desarrollo. La mayoría de los usuarios no la necesita. Meratyn es un monorepo de workspaces npm: la aplicación principal vive en apps/mappview y se compila con Tauri, React, TypeScript y MapLibre GL JS.
Requisitos previos
- Bun 1.4.2 o más reciente
- Cadena de herramientas de Rust para las compilaciones de escritorio
- Dependencias de compilación de escritorio Linux de los requisitos previos de Tauri v2
Instalación
git clone <repository-url>
cd Meratyn
bun install
Los usuarios de Bun pueden ejecutar bun install. La lista trustedDependencies de la raíz permite los scripts de instalación conocidos de core-js, @google/genai, esbuild, protobufjs, sharp y workerd.
Actualización
Para actualizar un checkout existente del código fuente a la versión más reciente, extraiga los cambios, reinstale las dependencias (por si cambió package.json) y recompile:
cd /path/to/Meratyn # your Meratyn checkout
git pull origin main
bun install
Si compila una versión de producción, recompile después con bun run build (web) o bun run tauri:build (escritorio). Si trabaja con los servidores de desarrollo (bun run dev o bun run tauri:dev), el git pull y el bun install anteriores bastan — solo reinicie el servidor de desarrollo para recoger los cambios.
Ejecutar la interfaz de navegador
bun run dev
Abra https://mappview.mapptech.com.co. El mapa y la importación vectorial del navegador admiten archivos vectoriales locales que DuckDB-WASM Spatial puede leer, con manejo directo de GeoJSON, Shapefiles comprimidos y archivos KMZ. Use Add Vector Layer o arrastre archivos sobre la aplicación; los rásteres GeoTIFF/COG también pueden arrastrarse al mapa para añadirlos como capas ráster. La interfaz de navegador también puede añadir servicios y conjuntos de datos basados en URL tales como XYZ, WMS, URLs de GeoJSON, teselas vectoriales, rásteres COG, servicios ArcGIS, FlatGeobuf, PMTiles, Zarr, LiDAR y Gaussian splats.
Los diálogos nativos y las rutas recordadas, los MBTiles locales, la lectura local de archivos ráster y otras operaciones del sistema de archivos de escritorio requieren Tauri. Abrir y guardar proyectos también funciona en el navegador mediante un selector y una descarga alternativa.
Ejecución con Docker
El repositorio incluye un Dockerfile para la versión de navegador de Meratyn. Compila la aplicación Vite y sirve los archivos de producción con nginx:
docker build -t mapptech/mappview:local .
docker run --rm -p 8080:80 mapptech/mappview:local
Abra https://mappview.mapptech.com.co. La interfaz de navegador contenerizada incluye abrir y guardar proyectos en el navegador; los diálogos nativos y las rutas recordadas, los MBTiles locales, la lectura local de archivos ráster y otras funciones exclusivas de Tauri requieren la aplicación de escritorio.
Sidecar de conversión incluido
La imagen también incluye el sidecar Python (uvicorn) y lo expone mediante proxy inverso en
/sidecar, de modo que el navegador lo alcanza en el mismo origen sin CORS ni un proceso
separado que gestionar. /conversion/status está accesible en
https://mappview.mapptech.com.co/sidecar/conversion/status.
Para las entradas y herramientas compatibles, la compilación de navegador ejecuta
Conversion y la caja de herramientas Whitebox en el cliente sobre DuckDB-WASM
y @mappview/wasm. El sidecar incluido añade rutas a archivos nativos, conversiones
y herramientas Whitebox fuera de los motores del navegador, además de:
- Las Raster tools (rasterio), que tienen una alternativa en el cliente para las herramientas principales pero alcanzan el conjunto completo a través del sidecar.
- El motor opcional GeoPandas para las Vector tools, que de otro modo se ejecutan en el cliente sobre Turf.js o Pyodide.
Los trabajos del sidecar leen y escriben rutas del propio sistema de archivos del
sidecar — un navegador no puede entregarle al contenedor una ruta absoluta del host —
y esas lecturas y escrituras están confinadas a MAPPVIEW_CONVERSION_ROOTS (por defecto
/data en la imagen). Monte sus archivos ahí:
docker run --rm -p 8080:80 -v "$PWD/data:/data" mapptech/mappview:local
Las conexiones PostGIS del sidecar están deshabilitadas por separado en despliegues
compartidos hasta que MAPPVIEW_POSTGIS_HOSTS liste los hosts de bases de datos
permitidos (opcionalmente con puertos). La aplicación de escritorio sigue sin
restricciones por defecto porque su sidecar está ligado a loopback y autenticado
por token.
freestiler y whitebox-workflows no publican wheels linux/arm64, así que se
instalan solo en amd64; en arm64 el sidecar reporta esas herramientas
no disponibles. Esto no afecta a los motores propios de PMTiles y Whitebox del
navegador, que son WebAssembly y se ejecutan en cualquier arquitectura.
Defina MAPPVIEW_DISABLE_SIDECAR=1 para ejecutar solo nginx (comportamiento solo web):
docker run --rm -p 8080:80 -e MAPPVIEW_DISABLE_SIDECAR=1 mapptech/mappview:local
Protección con contraseña (opcional)
Para exigir un usuario y una contraseña, defina MAPPVIEW_AUTH_USER y
MAPPVIEW_AUTH_PASSWORD; nginx protege entonces la aplicación y la API /sidecar
con HTTP Basic Auth (una credencial compartida única). Combínelo con un proxy
inverso que termina TLS fuera de las redes de confianza:
docker run --rm -p 8080:80 \
-e MAPPVIEW_AUTH_USER=admin \
-e MAPPVIEW_AUTH_PASSWORD='change-me' \
mapptech/mappview:local
Para permitir que los usuarios autenticados accedan al proxy de IA gestionado sin exponer su token de servidor, dirija las peticiones de IA a través de la misma instancia de nginx:
export MAPPVIEW_AI_PROXY_TOKEN="$(openssl rand -hex 32)"
# Run the edge service (@mappview/edge-service), which reads the token at boot
cd services/edge
MAPPVIEW_AI_PROXY_TOKEN="$MAPPVIEW_AI_PROXY_TOKEN" bun start
cd ../..
docker run --rm -p 8080:80 \
-e MAPPVIEW_AUTH_USER=admin \
-e MAPPVIEW_AUTH_PASSWORD='change-me' \
-e MAPPVIEW_AI_URL=/ai \
-e MAPPVIEW_AI_MODEL=openai/gpt-5.6-luna \
-e MAPPVIEW_AI_PROXY_URL=http://host.docker.internal:8791 \
-e MAPPVIEW_AI_PROXY_TOKEN="$MAPPVIEW_AI_PROXY_TOKEN" \
mapptech/mappview:local
El token del proxy debe coincidir con la variable de entorno MAPPVIEW_AI_PROXY_TOKEN
con la que se inició el servicio edge (services/edge/src/server.ts la lee al
arrancar). nginx
la inyecta en el lado del servidor y nunca aparece en la configuración del frontend.
Las llamadas de inferencia directas al proxy configurado sin el token devuelven 401. Si
MAPPVIEW_AI_URL no está definida, la imagen deja el proxy gestionado deshabilitado. Use
HTTPS y prefiera un --env-file o un gestor de secretos.
Habilitar el proxy no restringe por sí solo quién puede usarlo: quien alcance
/ai en el contenedor consume contra sus cuentas del proveedor de IA. Defina
MAPPVIEW_AUTH_USER/MAPPVIEW_AUTH_PASSWORD como arriba, o ponga su propia
autenticación delante, antes de exponer una instancia con IA habilitada. Si un proxy TLS
está delante del contenedor, liste su dirección en MAPPVIEW_TRUSTED_PROXIES (una
lista de IPs o CIDRs separados por comas) para que el límite de peticiones por cliente
vea al cliente real en lugar de contar a cada usuario como el proxy.
El navegador solicita las credenciales en la primera visita. /healthz permanece
sin autenticación para que la comprobación de salud del contenedor siga funcionando.
Cuando las variables no están definidas (el valor por defecto), no se aplica ninguna
autenticación.
Como con cualquier variable de entorno de Docker, una contraseña pasada con -e
queda en el historial de su shell y es legible en el host vía docker inspect.
Más allá de pruebas locales rápidas, prefiera --env-file con un archivo de
permisos restringidos, o un gestor de secretos.
Basic Auth es una credencial compartida única, no cuentas por usuario, y envía
credenciales con cada petición. Para necesidades multiusuario o de SSO, ponga
delante de la imagen sin modificar un proxy de autenticación como oauth2-proxy
o Authelia.
Vea también la nota en docker/nginx.conf
sobre retirar las excepciones CSP de localhost antes de exponer la imagen
públicamente.
Argumentos de compilación de subruta y onboarding
Para despliegues bajo una subruta de URL, pase la base de la aplicación en tiempo de compilación:
docker build --build-arg MAPPVIEW_APP_BASE=/mappview/ -t mappview .
El contenedor siempre sirve la aplicación desde su ruta raíz. El argumento de compilación solo fija el prefijo de URL que la aplicación espera, de modo que los despliegues en subruta requieren además un proxy inverso delante del contenedor que retire el prefijo antes de reenviar las peticiones (por ejemplo, nginx proxy_pass http://mappview/; con barra final).
Para omitir el asistente de bienvenida del primer arranque para cada visitante
(despliegues tipo kiosco o integrados), incluya VITE_WELCOME_DISABLED=1 de forma
permanente en la compilación:
docker build --build-arg VITE_WELCOME_DISABLED=1 -t mappview .
Los enlaces individuales también pueden desactivarlo en tiempo de ejecución con ?welcome=0. Consulte
Incrustación y uso compartido.
Controlar un mapa incrustado desde una página anfitriona
Para permitir que una página que enmarca la aplicación dialogue con el mapa vivo por
postMessage (volar a un registro, resaltar un elemento, abrir una herramienta de
procesamiento, y recibir eventos de selección, vista y herramienta), liste los orígenes
de confianza:
docker run --rm -p 8080:80 \
-e MAPPVIEW_EMBED_ORIGINS="https://portal.example.com" \
mapptech/mappview:local
Sin definir (el valor por defecto) la API permanece apagada, de modo que un despliegue público jamás puede ser controlado por quien lo enmarque. Consulte Hablar con el mapa en tiempo de ejecución para la referencia de mensajes y un ejemplo de página anfitriona.
Ejecutar la aplicación de escritorio
bun run tauri:dev
Compilar
bun run build
bun run tauri:build
La compilación de escritorio por defecto mantiene pequeño el binario de Linux y usa
DuckDB-WASM para las funciones respaldadas por DuckDB en el navegador. Para compilar un
binario de escritorio mayor con el cargador vectorial nativo duckdb-rs habilitado,
ejecute:
bun run tauri:build:native-duckdb
Dónde encontrar la salida:
- Compilación web — archivos estáticos en
apps/mappview/dist/. Sirva este directorio con cualquier servidor web estático (o con la imagen Docker anterior). - Instaladores de escritorio —
apps/mappview/src-tauri/target/release/bundle/, con subcarpetas por plataforma:deb/,rpm/yappimage/en Linux;msi/ynsis/en Windows;dmg/ymacos/en macOS. El ejecutable sin empaquetar está enapps/mappview/src-tauri/target/release/. En Linux,bun run tauri:buildcompiladebyrpmpor defecto; pasar--bundlessustituye esa selección por defecto en lugar de añadirla, de modo que enumere todos los formatos que quiera, por ejemplobun run tauri:build -- --bundles deb,rpm,appimagepara los tres.
Credenciales opcionales de imágenes
El plugin Street View puede usar imágenes de Google Street View y Mapillary. El panel 3D Tiles también puede cargar Google Photorealistic 3D Tiles con la misma clave de Google Maps. Cree apps/mappview/.env.local y defina una o ambas credenciales de proveedor:
VITE_GOOGLE_MAPS_API_KEY=your_google_maps_api_key
VITE_MAPILLARY_ACCESS_TOKEN=your_mapillary_access_token
Para Google Street View, habilite la Maps Embed API para esa clave en Google Cloud. Para Google Photorealistic 3D Tiles, habilite la Map Tiles API. Para pruebas locales en shell, la compilación de escritorio con Vite también acepta GOOGLE_MAPS_API_KEY. Para Mapillary, cree una aplicación en el panel de desarrollador de Mapillary y use su token de acceso de cliente.
Reinicie bun run dev o bun run tauri:dev después de cambiar las variables de entorno.
Credenciales opcionales de mapas base
El diálogo New map ofrece mapas base de Protomaps (Light, Dark, White, Grayscale, Black) cuando hay configurada una clave de API de Protomaps. Sin clave estas opciones están ocultas, y puede seguir usando los mapas base de OpenFreeMap o una URL de estilo personalizada.
Use su propia clave — créela en el panel de Protomaps. Défela de dos maneras:
-
Para su propio despliegue — incorpórela a la compilación con la variable de entorno
VITE_PROTOMAPS_API_KEY, por ejemplo enapps/mappview/.env.local:VITE_PROTOMAPS_API_KEY=your_protomaps_api_keyPara una compilación gestionada, pásela como variable de entorno de tiempo de compilación. La URL de estilo resultante es
https://api.protomaps.com/styles/v5/<flavor>/en.json?key=<your_key>. -
En tiempo de ejecución, sin recompilar — añada una variable de entorno llamada
VITE_PROTOMAPS_API_KEYen Settings → Environment Variables. Los mapas base de Protomaps aparecen tan pronto como se habilita la clave. Consulte Configuración.
Superposiciones de tráfico opcionales
El control Basemaps incluye una categoría Traffic con superposiciones de tráfico en tiempo real que se apilan sobre cualquier mapa base (active el conmutador de añadir/múltiple del panel). Cada proveedor se autentica con su propia clave de API, definida en Settings → Environment Variables (o incorporada a apps/mappview/.env.local):
VITE_GOOGLE_MAPS_API_KEY=your_google_maps_api_key # Google Traffic (Map Tiles API)
VITE_TOMTOM_API_KEY=your_tomtom_api_key # TomTom Traffic Flow
VITE_HERE_API_KEY=your_here_api_key # HERE Traffic Flow
Google Traffic y Google Photorealistic 3D Tiles reutilizan la misma VITE_GOOGLE_MAPS_API_KEY que Street View; habilite la Map Tiles API para esa clave en Google Cloud. Una clave recién introducida surte efecto de inmediato, sin reabrir el proyecto. Hasta que la clave de un proveedor esté definida, su superposición reporta un error de clave ausente en lugar de cargar teselas.
Estilos opcionales de Amazon Location
Las entradas Amazon Location del control Basemaps son mapas base de estilo (reemplazan todo el estilo del mapa, a diferencia de las superposiciones de tráfico anteriores). Se autentican con su propia clave de API de Amazon Location, definida en Settings → Environment Variables (o incorporada a apps/mappview/.env.local):
VITE_AMAZON_LOCATION_API_KEY=your_amazon_location_api_key # Amazon Location styles
VITE_AMAZON_LOCATION_AWS_REGION=us-east-1 # optional; omit to use the control's built-in default region
Mapas base opcionales de Protomaps y Stadia Maps
El control Basemaps también incluye mapas base de estilo Protomaps y Stadia Maps (incluido Stadia x Stamen). Ambos se autentican con su propia clave:
VITE_PROTOMAPS_API_KEY=your_protomaps_api_key # same key as the New map dialog's Protomaps basemaps
VITE_STADIA_API_KEY=your_stadia_api_key # https://client.stadiamaps.com
Protomaps reutiliza la clave descrita en Credenciales opcionales de mapas base más arriba — défila una vez y ambos lugares la recogen. Hasta que cada clave esté definida, el panel muestra un mensaje “Get a … API key” en lugar del mapa base, sin cargar teselas.
Las claves definidas vía Settings → Environment Variables, o tecleadas directamente en la vista API keys del panel (el botón de clave en la cabecera del panel), se aplican en tiempo de ejecución sin reabrir el proyecto. Una clave incorporada a apps/mappview/.env.local se lee en tiempo de compilación y necesita reiniciar el servidor de desarrollo. Cuando VITE_AMAZON_LOCATION_API_KEY está definida en el entorno tiene precedencia sobre una clave tecleada en el panel; quitarla del entorno la borra en la siguiente recarga de página.
Credenciales opcionales del globo 3D (Cesium Ion)
La vista opcional del globo 3D de Cesium — un globo en panel dividido renderizado con CesiumJS junto al mapa 2D de MapLibre — necesita un token de acceso de Cesium Ion para sus imágenes mundiales y su terreno. Cree una cuenta gratuita de Ion, copie su token de acceso por defecto y déselo a la compilación:
CESIUM_TOKEN=your_cesium_ion_access_token
CESIUM_TOKEN (o la variante con prefijo VITE_, VITE_CESIUM_TOKEN) la lee vite.config.ts y queda incorporada a la compilación. También puede definirla en tiempo de ejecución — sin recompilar — en la sección Environment Variables del diálogo de Settings, que tiene un campo dedicado y enmascarado Cesium Ion token. Ese token se guarda localmente en el dispositivo (en el almacenamiento del navegador en la compilación web), no en el archivo de proyecto compartido, y sobrescribe el valor de compilación; es la manera en que un usuario web aporta su propio token de Ion. (Una variable libre VITE_CESIUM_TOKEN en la misma sección también funciona y tiene precedencia, como anulación.) Sin token de ninguna fuente, el conmutador del globo 3D se oculta por completo (el mapa 2D no se ve afectado). Los tokens de acceso de Ion están diseñados para viajar dentro de los bundles del cliente. Consulte Arquitectura para saber cómo se integra el globo.
Espejos opcionales en tiempo de ejecución (sin conexión y aislados de la red)
El motor vectorial Python (Pyodide) carga su runtime del CDN público jsDelivr por defecto. Para alojarlo usted mismo para uso sin conexión o en producción, apúntelo a una copia espejo de la distribución de Pyodide:
VITE_PYODIDE_INDEX_URL=https://your-host/pyodide/v0.27.7/full/
De forma similar, la extensión Spatial de DuckDB se instala por defecto desde el repositorio remoto de extensiones de DuckDB. Para cargarla desde un espejo (de modo que INSTALL spatial se omita y la extensión se cargue directamente), defina la ruta o URL completa del archivo de extensión:
VITE_DUCKDB_SPATIAL_EXTENSION_PATH=https://your-host/duckdb/spatial.duckdb_extension.wasm
Ambas variables también pueden definirse en tiempo de ejecución a través de las variables de entorno del diálogo de Settings (sin necesidad de recompilar), de modo que los despliegues aislados de la red o corporativos pueden apuntar Pyodide y la extensión DuckDB Spatial a espejos internos sin recompilar.
Sidecar Python opcional
El sidecar FastAPI opcional está reservado para flujos de trabajo de procesamiento más pesados y no es necesario para la interfaz de escritorio.
cd services/server
python -m venv .venv
source .venv/bin/activate
pip install -e "."
uvicorn sidecar.app.main:app --host 127.0.0.1 --port 8765
El sidecar autoconfigura un runtime gestionado en el primer uso; defina
MAPPVIEW_CONVERSION_PYTHON=$(which python) para reutilizar en su lugar el entorno
actual. Consulte el README del sidecar (services/server/README.md)
para más detalles.
Extras opcionales
La instalación base es deliberadamente pequeña. Cada grupo de herramientas tiene su propio extra;
instale solo los que necesite y luego ejecute mappview-server (o el comando uvicorn
anterior). Estos comandos continúan desde services/server, el directorio al
que cambia el fragmento anterior:
# Conversion tools (DuckDB, rio-cogeo, freestiler)
pip install -e ".[conversion]"
# Vector tools — GeoPandas engine (GeoPandas, Shapely)
pip install -e ".[vector]"
# Raster tools (rasterio, numpy, contourpy)
pip install -e ".[raster]"
# Proxy de segmentación IA (cliente HTTP ligero; los modelos usan el runtime separado)
pip install -e ".[ml]"
# Runtime SamGeo/SAM3 gestionado por el operador (Python 3.12+, entorno separado)
pip install -e ".[samgeo-runtime]"
El extra [ml] mantiene ligero el sidecar y no instala PyTorch ni archivos de
modelos. Ejecute samgeo-api desde el entorno Python 3.12 o posterior con una
compilación compatible de PyTorch. El extra [samgeo-runtime] fija
segment-geospatial[api,samgeo3]==1.4.2; defina luego
MAPPVIEW_ML_SAMGEO_URL en el
entorno del sidecar. Después de aportar los pesos y aceptar sus condiciones,
defina MAPPVIEW_ML_SAMGEO_WEIGHTS_CONFIGURED=1 y
MAPPVIEW_ML_SAMGEO_LICENSE_ACCEPTED=1. Meratyn nunca guarda esos pesos,
credenciales ni confirmaciones en un archivo de proyecto. Consulte
Segmentación IA para el límite completo.
Desde la raíz del repositorio, use en cambio la ruta completa — por ejemplo
pip install -e "services/server[conversion]".
Para usar el sidecar desde la compilación web, inícielo y sirva la aplicación desde
localhost:5173 — CORS está restringido a ese origen y a los orígenes de Tauri.
Donde una herramienta tiene motor de navegador (todas las Vector tools y las
conversiones GeoParquet/CSV), el diálogo retrocede a él automáticamente cuando el
sidecar o su extra no está disponible. Consulte Herramientas de procesamiento para saber
qué hace cada motor, y Segmentación IA para el
servidor de modelos samgeo-api independiente.