Documentación / Conceptos / Por qué MapConductor

Por qué MapConductor

El código de las aplicaciones con funciones de mapa suele estar fuertemente vinculado a un SDK de mapa específico. Cuando se desea cambiar, la reescritura no se limita solo a lo relacionado con el mapa, sino que afecta también la lógica de la pantalla. MapConductor reemplaza ese vínculo con una sola API común.

PROVIDERS
13
PLATFORMS
Android · iOS · Web
LICENSE
Apache 2.0
Video de introducción · ¡Libertad de elección en el desarrollo de aplicaciones de mapas con MapConductor!

01 · Cuál es el problema

01

Cambian las tarifas y los contratos

El modelo de facturación de la API de mapas cambia. Puede haber situaciones en las que quieres cambiar, pero el código de la aplicación no lo permite.

02

Escribir la misma función 3 veces

Si usas diferentes SDK de mapas para Android, iOS y Web, el manejo de marcadores y el significado de la cámara no coinciden. Tendrás que discutir las especificaciones 3 veces.

03

Los valores numéricos no coinciden

Si dejas en manos de las utilidades del SDK la escala a la que se refiere el zoom 14 y la distancia entre dos puntos, habrá variaciones según el entorno. En QA tendrás que decidir cada vez "cuál es el correcto".

04

Colapso cuando aumenta la cantidad

Cuando los marcadores superan los miles, las operaciones de la cámara se vuelven lentas con una implementación ingenua. Las contramedidas varían según el proveedor y tendrás que reescribir cada vez.

02 · La respuesta de MapConductor

La aplicación solo depende de una API unificada. Los controladores absorben las diferencias por proveedor, y el cambio consiste simplemente en reemplazar los módulos dependientes y los tipos de vista.

Un solo tipo

Coordenadas y estados en común

GeoPoint, MarkerState y MapCameraPosition tienen el mismo nombre y el mismo significado en las 3 plataformas. No aparecen tipos específicos del proveedor.

Una sola escala

El zoom y la distancia coinciden

El zoom se normaliza a una escala común y la distancia, el rumbo y el área se calculan con la propia implementación del SDK. Con la misma entrada, cualquier proveedor devuelve el mismo valor.

Una sola forma de escribir

Solo pasar el estado

Si pasa „la matriz de los estados que deberían existir ahora“, Core calcula la diferencia con la anterior y refleja en el mapa solo lo necesario. No necesita gestionar por su cuenta la adición, actualización o eliminación.

El problema de la cantidad lo resuelve el SDK

Cuando los marcadores superan los 2000, el motor de renderizado interno cambia automáticamente a teselas raster. Incluso con decenas de miles de elementos, la manipulación de la cámara sigue siendo fluida y el código de la aplicación no cambia ni una sola línea. El valor de referencia se puede cambiar en las opciones de la vista de mapa.

03 · No es un wrapper delgado

Si fuera un wrapper que simplemente llama a los métodos de cada SDK, las posibilidades se limitarían al "SDK con menos funciones". Dado que MapConductor implementa y complementa las funciones que faltan, la apariencia y el comportamiento se mantienen uniformes al cambiar de proveedor.

Lo que tenemos por nuestra cuenta
Gracias a eso se logra uniformidad en
Cálculos geográficos
Distancia, acimut, área e interpolación se implementan con las mismas fórmulas en Kotlin / Swift / TypeScript. Al no depender de las utilidades del SDK, los valores que se muestran no varían según la plataforma.
Motor de renderizado de marcadores
Si son pocos, marcadores nativos; si son muchos, teselas ráster. Gracias a un índice espacial, la detección de toques y la extracción del viewport son rápidas independientemente de la cantidad.
Polígonos con huecos · Rutas de gran círculo
En proveedores sin funciones nativas, se dibujan como teselas ráster para lograr el mismo aspecto. El código de la persona que llama no cambia.
Unificación de la cámara
El zoom y la altura de la cámara se convierten mutuamente y se calibran basándose en mediciones reales. El zoom 14 cubre la misma amplitud en cualquier proveedor.
Atribución de la fuente
Las reglas para cambiar la fuente según el zoom y el rango de visualización se mantienen como parte del diseño. También se pueden mostrar las notas necesarias al usar teselas personalizadas.

04 · Beneficios para el equipo

Al intercalar una API común, cambia la naturaleza del código que se puede escribir. El código en el que no aparece el nombre del SDK de mapa permanece tal cual, incluso si se cambia de proveedor o se migra a otra plataforma.

Costo de aprendizaje

Solo hay que aprender una API

Dado que los conceptos y nombres de los SDK de mapas varían según el proveedor, cada vez que cambie de proveedor o de plataforma tendrá que volver a aprender. Con MapConductor solo hay que aprender una API, que se puede usar con el mismo nombre y significado en Android, iOS y React. Los conocimientos obtenidos en una plataforma son directamente aplicables en otra, y cuando se incorporan personas al equipo no aumenta la cantidad de material que deben leer según el número de proveedores.

Reutilización

Código que no depende del SDK de mapas

GeoPoint y MarkerState son tipos que no pertenecen a ningún SDK de mapas. Construir rutas, determinar si se encuentra dentro de un rango, decidir qué mostrar — esta lógica se puede escribir desacoplada de los tipos del SDK de mapas, por lo que no es necesario reescribirla al cambiar de proveedor. También se puede extraer como una biblioteca los componentes comunes alrededor del mapa, sin tener que crearlos por separado para cada proveedor.

05 · Desde la perspectiva de quien distribuye los datos

Hasta ahora, se ha tratado del lado que incorpora el mapa. El objetivo de MapConductor no es solo la liberación del bloqueo de proveedor, sino también permitir decidir de qué proveedor depender de manera separada de la selección del SDK de mapas.

A veces no se puede elegir

Terminará usando un SDK comercial

A menos que use mapas completamente abiertos, en la producción terminará usando algún SDK de mapas comercial. Debido a contratos y adquisiciones, a veces solo hay una opción desde el principio. MapConductor es útil en esas situaciones porque no tiene que desechar sus recursos existentes.

Desvincular

Separar el SDK de mapas y los datos

Se asumía que los recursos como datos de mapas, geocodificación y mosaicos se usarían junto con el SDK de mapas del proveedor que los ofrece. Si ambos se pueden separar, por ejemplo, se puede usar el contenido acumulado en ArcGIS sobre la pantalla de otro SDK de mapas.

Proveedor sin medios de visualización

Solo geocodificación, solo datos

Los proveedores que solo tienen geocodificación o solo datos de campos específicos han tenido una utilización limitada porque no tienen su propio SDK de mapas. Si se pueden separar del lado de la visualización, podrán usarse en cualquier mapa.

En este momento, todavía no hay ninguna función para este propósito. Lo más cercano es que el SDK de Android puede cargar contenido de ArcGIS Online, pero esto es una visualización en la vista de ArcGIS. Lo que se escribió aquí es una dirección futura y no una lista de funciones actuales.
Es responsabilidad de los desarrolladores que incorporan estos datos o servicios cumplir con los términos de uso de dichos datos o servicios. Que algo se pueda combinar técnicamente y que esa combinación esté permitida son cosas diferentes.

06 · Desde la perspectiva de los proveedores de SDK de mapas

Una capa común puede parecer, para los proveedores de SDK de mapas, algo que diluye su propia presencia. MapConductor no está diseñado así. Solo se estandariza la parte que existe en todos los proveedores; las fortalezas de cada empresa se mantienen tal cual hacia afuera.

Afluencia

Clientes del exterior

Cuando varios proveedores pueden manejarse de la misma manera, también pueden ser considerados como candidatos desde aplicaciones creadas con el SDK de otra empresa. Que se baje la barrera para cambiar también actúa en la dirección de debilitar el poder para retener a los clientes existentes, pero a cambio, la razón para ser elegido se convierte en "precio, cobertura y calidad de renderizado" y no en "no se puede cambiar".

Estandarización mínima

No ocultar las fortalezas

Lo que se ha estandarizado son solo las funciones básicas que existen en cada proveedor. Si llama a getMapViewHolder() del objeto de estado, puede obtener la vista de mapa nativa y la instancia de mapa tal cual, por lo que puede escribir directamente funciones que solo tiene ese proveedor con la API de cada empresa. Si fuera un contenedor que lo oculta todo por completo, los factores de diferenciación desaparecerían, pero no es así.

Toda la industria

Competir sobre una base común

Después de que los browsers unificaron sus implementaciones en HTML5, comenzaron a competir no por la compatibilidad en sí, sino por la velocidad y las funcionalidades. Con los SDK de mapas ocurre lo mismo: una vez definida una interfaz común, la pregunta será qué tan rápido, preciso y en qué áreas más amplias se puede dibujar sobre ella. Creemos que la estandarización no detiene la evolución de cada SDK, sino que alinea la dirección de la evolución.

07 · Casos adecuados y no adecuados

Adecuado
  • Ofrecer la misma experiencia de mapas en múltiples plataformas
  • Dejar abierta la posibilidad de cambiar de proveedor en el futuro
  • Las representaciones estándar de mapas como marcadores, formas y cámara son el foco principal
  • Manejar desde miles hasta decenas de miles de marcadores
  • Se requiere consistencia en la visualización de distancias y áreas
No adecuado
  • Las representaciones avanzadas específicas de un proveedor en particular son el protagonismo (shaders personalizados, capas exclusivas del proveedor)
  • Las funciones dedicadas del SDK en sí son el objetivo, como la navegación turno por turno
  • 1 plataforma, 1 proveedor, todo completo, sin cambios previstos.

Sin embargo, se puede usar parcialmente de manera combinada. Como siempre se tiene acceso a las instancias nativas del mapa, es posible una configuración en la que solo las partes especiales se escriben con código específico del proveedor.

Lecturas adicionales